メインコンテンツへスキップ
Lesson4 / 5

代入演算子の応用 - 効率的な値の更新

目次

このレッスンで学ぶこと

  • 代入演算子とは何か
  • 複合代入演算子(+=, -=, *=など)の使い方
  • 複数変数への同時代入
  • 効率的なコーディングテクニック

代入演算子とは

代入演算子は、変数に値を格納したり、既存の値を更新したりするための演算子です。

Pythonの代入演算子一覧

演算子名前意味同等の書き方
=代入値を代入x = 5-
+=加算代入加算して代入x += 3x = x + 3
-=減算代入減算して代入x -= 3x = x - 3
*=乗算代入乗算して代入x *= 3x = x * 3
/=除算代入除算して代入x /= 3x = x / 3
//=切り捨て除算代入切り捨て除算して代入x //= 3x = x // 3
%=剰余代入剰余を代入x %= 3x = x % 3
**=べき乗代入べき乗して代入x **= 3x = x ** 3

代入演算子の特徴

  • 変数の値を効率的に更新できる
  • コードを簡潔に書ける
  • カウンターや累積計算に便利
  • 文字列やリストの結合にも使える

簡単な例

Python
# 基本的な代入
x = 10
print(x)  # 10

# 加算代入(カウントアップ)
x += 5    # x = x + 5 と同じ
print(x)  # 15

# 減算代入(カウントダウン)
x -= 3    # x = x - 3 と同じ
print(x)  # 12

なぜ代入演算子の応用が必要なのか?

変数の値を更新する操作は、プログラミングで頻繁に行います。

Python
# 通常の書き方
count = 0
count = count + 1  # カウントアップ

# 複合代入演算子で簡潔に
count = 0
count += 1  # 同じ意味

複合代入演算子を使うことで、コードを簡潔に、読みやすくできます。

💡 豆知識: 複合代入演算子は、C言語から受け継がれた記法です。元々はタイピング量を減らすために考案されましたが、今では可読性向上のためにも使われています。


基本の代入演算子

単純代入(=)

機能: 右辺の値を左辺の変数に代入します。

Python
# 基本的な代入
x = 10
name = "太郎"
is_valid = True

print(x)     # 10
print(name)  # 太郎

# 再代入
x = 20
print(x)  # 20

用途: 変数の初期化、値の更新


複合代入演算子

加算代入(+=)

機能: 変数に値を加算して代入します。

Python
# 基本的な使い方
count = 10
count += 5  # count = count + 5 と同じ
print(count)  # 15

# カウントアップ
score = 0
score += 10  # 10点加算
score += 5   # さらに5点加算
print(score)  # 15

# 文字列の連結
message = "Hello"
message += " World"
print(message)  # "Hello World"

# リストの結合
items = [1, 2, 3]
items += [4, 5]
print(items)  # [1, 2, 3, 4, 5]

書き方: 変数 += 値変数 = 変数 + 値 と同じ

用途: カウンタの増加、スコア加算、文字列連結


減算代入(-=)

機能: 変数から値を減算して代入します。

Python
# 基本的な使い方
health = 100
health -= 20  # health = health - 20
print(health)  # 80

# 在庫の減少
stock = 50
stock -= 5  # 5個販売
stock -= 3  # さらに3個販売
print(f"残り在庫: {stock}個")  # 42個

# カウントダウン
countdown = 10
countdown -= 1
print(countdown)  # 9

書き方: 変数 -= 値変数 = 変数 - 値 と同じ

用途: HP減少、在庫減少、カウントダウン


乗算代入(*=)

機能: 変数に値を乗算して代入します。

Python
# 基本的な使い方
value = 5
value *= 3  # value = value * 3
print(value)  # 15

# ポイント倍増
points = 100
points *= 2  # 2倍
print(f"ポイント: {points}")  # 200

# 文字列の繰り返し
text = "Hi!"
text *= 3
print(text)  # "Hi!Hi!Hi!"

# リストの繰り返し
items = [1, 2]
items *= 3
print(items)  # [1, 2, 1, 2, 1, 2]

書き方: 変数 *= 値変数 = 変数 * 値 と同じ

用途: 値の倍増、複利計算、繰り返し生成


除算代入(/=)

機能: 変数を値で除算して代入します。

Python
# 基本的な使い方
value = 100
value /= 4  # value = value / 4
print(value)  # 25.0

# 半額セール
price = 1000
price /= 2
print(f"セール価格: {price}円")  # 500.0円

# 平均の計算
total = 300
total /= 3  # 3で割る
print(f"平均: {total}")  # 100.0

注意: 結果は常にfloat型になります。

書き方: 変数 /= 値変数 = 変数 / 値 と同じ

用途: 値の分割、平均計算、割引計算


整数除算代入(//=)

機能: 変数を値で整数除算して代入します。

Python
# 基本的な使い方
value = 17
value //= 5  # value = value // 5
print(value)  # 3

# ページ数の計算
items = 25
items_per_page = 10
pages = items
pages //= items_per_page
print(f"ページ数: {pages}")  # 2

書き方: 変数 //= 値変数 = 変数 // 値 と同じ

用途: 整数での分割、商の計算


剰余代入(%=)

機能: 変数を値で除算した余りを代入します。

Python
# 基本的な使い方
value = 17
value %= 5  # value = value % 5
print(value)  # 2(17 ÷ 5 = 3 余り 2)

# 範囲内に収める
index = 15
index %= 10  # 0〜9の範囲に
print(index)  # 5

# 周期的な処理
counter = 23
counter %= 7  # 7日周期
print(f"曜日インデックス: {counter}")  # 2

書き方: 変数 %= 値変数 = 変数 % 値 と同じ

用途: 範囲制限、周期計算、余り取得


べき乗代入(**=)

機能: 変数をべき乗して代入します。

Python
# 基本的な使い方
value = 2
value **= 3  # value = value ** 3
print(value)  # 8

# 指数的成長
bacteria = 2
bacteria **= 4  # 4世代後
print(f"細菌数: {bacteria}")  # 16

# 面積から体積へ
side = 5
side **= 2  # 面積(平方)
print(f"面積: {side}cm²")  # 25

書き方: 変数 **= 値変数 = 変数 ** 値 と同じ

用途: べき乗計算、指数的増加


複数変数への代入

同時代入

機能: 複数の変数に同時に値を代入します。

Python
# 複数変数への同時代入
x, y = 10, 20
print(f"x={x}, y={y}")  # x=10, y=20

# リストから取り出し
coordinates = [5, 10]
x, y = coordinates
print(f"座標: ({x}, {y})")  # 座標: (5, 10)

# 値の交換
a, b = 5, 10
a, b = b, a  # 値を交換
print(f"a={a}, b={b}")  # a=10, b=5

用途: 初期化、値の交換、アンパック


連鎖代入

機能: 複数の変数に同じ値を代入します。

Python
# 同じ値を代入
x = y = z = 0
print(f"x={x}, y={y}, z={z}")  # x=0, y=0, z=0

# 初期化に便利
count1 = count2 = count3 = 100
print(count1, count2, count3)  # 100 100 100

注意: リストなどの可変オブジェクトでは注意が必要

Python
# 問題のある例
list1 = list2 = []  # 同じリストを参照
list1.append(1)
print(list2)  # [1](list2も変わる)

# 正しい方法
list1 = []
list2 = []
list1.append(1)
print(list2)  # [](list2は変わらない)

具体例

例1: ゲームのスコア管理

Python
score = 0

# ステージ1
score += 100  # 基本スコア
score += 50   # ボーナス

# ステージ2
score += 150
score *= 2    # 2倍タイム

print(f"最終スコア: {score}点")  # 600点

例2: 買い物かごの合計

Python
total = 0

# 商品を追加
total += 500   # りんご
total += 300   # みかん
total += 1200  # 肉

# 消費税を加算
total *= 1.1

print(f"合計: {int(total)}円")  # 2200円

例3: HPの管理

Python
max_hp = 100
current_hp = 100

# ダメージを受ける
current_hp -= 30
print(f"HP: {current_hp}/{max_hp}")  # HP: 70/100

# 回復
current_hp += 20
print(f"HP: {current_hp}/{max_hp}")  # HP: 90/100

# HPが最大値を超えないようにする
current_hp = min(current_hp, max_hp)

例4: 在庫管理システム

Python
# 初期在庫
apple_stock = 50
orange_stock = 30

# 販売
apple_stock -= 5
orange_stock -= 8

# 入荷
apple_stock += 20
orange_stock += 15

print(f"りんご在庫: {apple_stock}個")  # 65個
print(f"みかん在庫: {orange_stock}個")  # 37個

例5: 複利計算

Python
principal = 100000  # 元金
rate = 1.03        # 年利3%(1.03倍)

# 5年間
principal *= rate  # 1年目
principal *= rate  # 2年目
principal *= rate  # 3年目
principal *= rate  # 4年目
principal *= rate  # 5年目

print(f"5年後: {int(principal)}円")  # 115927円

例6: カウンターの管理

Python
# ページビューカウンター
page_views = 1000

# アクセスごとに増加
page_views += 1
page_views += 1
page_views += 1

print(f"総ページビュー: {page_views}")  # 1003

# 1000の位で表示
display_views = page_views // 1000
print(f"表示: {display_views}k views")  # 1k views

よくある間違い

間違い1: 初期化忘れ

Python
# エラー: 変数が未定義
score += 10  # NameError

# 正しい: 先に初期化
score = 0
score += 10
print(score)  # 10

間違い2: 型の不一致

Python
# エラー: 文字列に数値を加算できない
count = "10"
count += 5  # TypeError

# 正しい: 型を揃える
count = 10
count += 5
print(count)  # 15

間違い3: リストのappendと+=の混同

Python
items = [1, 2, 3]

# appendは要素を1つ追加
items.append([4, 5])
print(items)  # [1, 2, 3, [4, 5]]

# +=はリストを結合
items = [1, 2, 3]
items += [4, 5]
print(items)  # [1, 2, 3, 4, 5]

間違い4: 連鎖代入の参照

Python
# 問題: 同じリストを参照
a = b = []
a.append(1)
print(b)  # [1](bも変わる)

# 正しい
a = []
b = []
a.append(1)
print(b)  # []

間違い5: /=と//=の混同

Python
value = 10

# /= は常にfloatになる
value /= 3
print(value)  # 3.3333333333333335

# //= は整数除算
value = 10
value //= 3
print(value)  # 3

練習問題

問題1(基礎)⭐☆☆

変数countを0で初期化し、3回インクリメント(1ずつ増加)してください。

💡 ヒント

+= を使います。

✅ 解答例
Python
count = 0

count += 1
count += 1
count += 1

print(count)  # 3

実行結果:

3

解説: count += 1count = count + 1 と同じです。


問題2(基礎)⭐☆☆

価格1000円の商品を、まず20%引き、次にさらに10%引きにしてください。

💡 ヒント
  • 20%引き = 0.8倍
  • 10%引き = 0.9倍
✅ 解答例
Python
price = 1000

# 20%引き
price *= 0.8
print(f"20%引き後: {price}円")  # 800.0円

# さらに10%引き
price *= 0.9
print(f"最終価格: {price}円")  # 720.0円

実行結果:

20%引き後: 800.0円
最終価格: 720.0円

解説: *= を使って連続的に割引を適用できます。


問題3(応用)⭐⭐☆

初期値100のHPに対して、以下の処理を行ってください:

  1. 30のダメージを受ける
  2. 20回復する
  3. 25のダメージを受ける 最終的なHPを表示してください。
💡 ヒント
  • ダメージ: -=
  • 回復: +=
✅ 解答例
Python
hp = 100

print(f"初期HP: {hp}")

# ダメージ
hp -= 30
print(f"ダメージ後: {hp}")

# 回復
hp += 20
print(f"回復後: {hp}")

# ダメージ
hp -= 25
print(f"最終HP: {hp}")

実行結果:

初期HP: 100
ダメージ後: 70
回復後: 90
最終HP: 65

解説: 複合代入演算子を使ってHPの増減を管理できます。


まとめ

このレッスンでは、代入演算子と複合代入演算子の使い方を学びました。

  • +=, -=, *=, /= などを使うと、更新処理を簡潔に書けます。
  • カウンタ更新や累積計算など、繰り返し処理での記述が読みやすくなります。
  • 複数変数への同時代入を使うと、値の初期化や入れ替えを効率化できます。
  • 代入前の初期化や型の整合性を確認することが、エラー防止に重要です。
  • /= の結果が float になる点や、+=append() の違いを理解して使い分ける必要があります。