「x = 10 の = って、イコールじゃないの?」「変数の名前って何を付ければいいの?」「書いた順番を入れ替えたらエラーになった…」

Pythonを始めたばかりのころ、こんなふうに迷いますよね。この記事は、Pythonの基本を1テーマずつ押さえる連載「Python基礎講座」の第1回です。今回は変数とは何か・名前の付け方・代入の順番の3つを、実際にコードを動かしながら確かめます。

対象は、Pythonを始めたばかりの完全初心者の方です。難易度は入門レベルで、print() で文字を表示できれば読み進められます。動作確認は Python 3.13 で行いました。一緒に見ていきましょう! 😊

変数とは?スマホの連絡先に置きかえて考える

smartphone contact list
smartphone contact list / Photo by RDNE Stock project via Pexels

変数とは、値に名前を付けて、あとからその名前で呼び出せるようにする仕組みです。

イメージとしては、スマホの連絡先です。友だちに電話するたびに11桁の番号を打つ人はいませんよね。「田中さん」という名前で登録しておけば、名前を選ぶだけでかけられます。番号が変わったときも、登録を1か所直すだけです。

プログラムでも同じことをします。たとえば、月額980円のサービスの半年分・1年分・2年分を計算するとします。print(980 * 6)、print(980 * 12)、print(980 * 24) と数字をそのまま書いても動きますが、1,080円に値上げされたら3か所すべて直すことになります。1か所でも直し忘れたら、計算は静かにズレたままです。

サンプル1:変数を作って使う

変数を使うと、こう書けます。すでに1,080円へ値上げしたあとの形にしました。

# 変数を使う書き方(値上げのときは1行目だけ直せばOK)
monthly_fee = 1080  # 月額料金

print(monthly_fee * 6)   # 半年分
print(monthly_fee * 12)  # 1年分
print(monthly_fee * 24)  # 2年分

実行結果はこうなりました。

6480
12960
25920

ポイントをまとめるとこんな感じです👇

  • monthly_fee = 1080 で、1080 という値に monthly_fee という名前を付けています
  • 値段が変わっても、直すのは1行目(コメントを除く)だけです
  • 980 のような数字だけだと意味が伝わりませんが、monthly_fee なら「月額料金だな」と読めます

ここで大事なのが = の意味です。Pythonの = は「等しい」ではなく、「右側の値に、左側の名前を付ける」という命令です。これを代入と呼びます。

サンプル2:代入より先に使うとエラーになる

Pythonのコードは上の行から順番に実行されます。では、名前を付ける前に使うとどうなるでしょうか。

print(city)
city = "札幌"

実行すると、エラーで止まりました(ファイルの場所は環境によって変わるので …\ と省略しています)。

Traceback (most recent call last):
  File "…\step2_nameerror.py", line 1, in <module>
    print(city)
          ^^^^
NameError: name 'city' is not defined

NameError: name 'city' is not defined は「city という名前はまだ定義されていません」という意味です。1行目の時点では、Pythonはまだ2行目を実行していません。連絡先に登録する前に、名前で電話をかけようとしたようなものです。

直し方はかんたんで、2行を入れ替えて city = "札幌" を先に書くだけです。実行すると、札幌 と表示されました。

サンプル3:あとから値を変えると、計算結果はどうなる?

代入の順番で、いちばん勘違いしやすいのがここです。これ、実行せずに答えられますか? 最後の print(total) に何が表示されるか、予想してから読み進めてみてください。

price = 300   # 1個の値段
count = 4     # 個数
total = price * count  # 合計を計算する
print(total)

count = 5     # 個数をあとから変更
print(total)  # total はどうなる?
サンプル3の実行結果:個数を変えても total は1200のまま
サンプル3の実行結果:個数を変えても total は1200のまま

答えは 1200 のままです。「個数を5にしたのに、1500にならないの?」と思いますよね。

ここが重要です👇

  • total = price * count は、その行を実行した瞬間の値で計算し、結果の 1200 に total という名前を付けます
  • 「price * count という式」を覚えているわけではありません
  • Excelのセルなら元の値を変えると再計算されますが、Pythonの変数は自動では計算し直されません

1500にしたいときは、count = 5 のあとに total = price * count をもう一度書きます。実際に足して実行すると、2回目の表示は 1500 になりました。「値を変えたら、その値を使う計算もやり直す」と覚えておくと安心です。

サンプル4:自分自身を使って更新する

代入には「右側を先に計算して、そのあと左側の名前に入れる」という順番があります。これを使うと、今の値をもとに新しい値を作れます。旅行の積み立てメモを書いてみましょう。

# 旅行の積み立てメモ
goal_amount = 60000     # 目標金額
saved_amount = 12000    # 今までに貯めた金額
monthly_saving = 8000   # 毎月の積立額

saved_amount = saved_amount + monthly_saving      # 今月分を足す
remaining_amount = goal_amount - saved_amount     # 目標まであといくら?

print("貯めた金額:", saved_amount, "円")
print("目標まで:", remaining_amount, "円")

実行結果はこちらです。

貯めた金額: 20000 円
目標まで: 40000 円

注目は saved_amount = saved_amount + monthly_saving の行です。数学なら成り立たない式ですが、Pythonでは次の順番で進みます。

  1. 右側を計算する(12000 + 8000 = 20000)
  2. 計算結果の 20000 を saved_amount に入れ直す

同じ処理は saved_amount += monthly_saving と短くも書けます。慣れるまでは、長いほうの書き方で流れを確認するのがおすすめです。

サンプル5:2つの変数の中身を入れ替える

順番を間違えると、エラーが出ないまま結果だけおかしくなることもあります。左手のりんごと、右手のみかんを入れ替えてみましょう。

left_hand = "りんご"
right_hand = "みかん"

# 入れ替えたつもりのコード
left_hand = right_hand
right_hand = left_hand

print("左手:", left_hand)
print("右手:", right_hand)
サンプル5の実行結果:左手も右手もみかんになった
サンプル5の実行結果:左手も右手もみかんになった

どちらも「みかん」になってしまいました。原因は、1行ずつ追うとわかります。

  • left_hand = right_hand で、left_hand の中身が「みかん」に変わる。この時点で「りんご」はどの変数からも呼び出せなくなる
  • right_hand = left_hand は、もう「みかん」になった left_hand を右手に入れるだけ

正しい入れ替え方は2つあります。

left_hand = "りんご"
right_hand = "みかん"

# 方法1:一時的な変数に控えておく
temporary = left_hand
left_hand = right_hand
right_hand = temporary
print("左手:", left_hand, "/ 右手:", right_hand)

# 方法2:Pythonらしい1行の書き方(もう一度入れ替えて元に戻す)
left_hand, right_hand = right_hand, left_hand
print("左手:", left_hand, "/ 右手:", right_hand)
左手: みかん / 右手: りんご
左手: りんご / 右手: みかん

方法1は、先に別の変数へ控えておくやり方です。方法2は a, b = b, a の形で、右側の値をまとめて取り出してから左側へ入れるので、途中で値が消えません。順番の考え方がわかる方法1を理解してから、ふだんは短い方法2を使うとよいでしょう。

変数の名前の付け方:エラーになる名前と事故になる名前

最後は名前のルールです。実際に試して出たエラーを並べました。

書いたコード 実際に出たエラー 原因
2nd_price = 800 SyntaxError: invalid decimal literal 数字で始まる名前は使えない
class = "1年A組" SyntaxError: invalid syntax class はPythonの予約語
price = 500 のあとに print(Price) NameError: name 'Price' is not defined. Did you mean: 'price'? 大文字と小文字は別の名前
sum = 700 のあとに sum(numbers) TypeError: 'int' object is not callable 組み込み関数の名前を上書きした

⚠️ 特に注意したいのは4行目です。sum = 700 の行そのものはエラーになりません。あとで合計を出す sum() を呼んだときに初めて止まるので、原因に気づきにくいんです。list・max・str なども同じ理由で、変数名には避けましょう。

予約語は import keyword のあと print(len(keyword.kwlist)) で数えられます。Python 3.13で試すと35個でした。全部覚える必要はなく、エラーが出たときに疑えば十分です。

ルールがわかったら、読みやすい名前のコツは次の3つです。

  • 中身がわかる名前にする:a・b・c より goal_amount・saved_amount。サンプル4を a や b で書き直すと、計算は同じでも何の数字か読めなくなります
  • 小文字と _ でつなぐ:monthly_fee の形です。Pythonの書き方の指針であるPEP 8でも、変数名は小文字を _ でつなぐ形とされています
  • 半角の英数字で書く:なまえ = "ok" のような日本語の名前も動きましたが、入力の切り替えが増えて打ち間違いのもとになります

まとめ

  • 変数は、値に名前を付けて呼び出す仕組み。値が変わっても直すのは1か所で済む
  • = は「等しい」ではなく代入。右側を先に計算してから、左側の名前に入れる
  • コードは上から順に動くので、代入より先に使うと NameError になる
  • あとから値を変えても、計算済みの変数は自動で変わらない
  • 入れ替えは a, b = b, a。名前は小文字と _ で、中身がわかるものにする

次回の第2回は、int・float・str・bool というデータ型の見分け方を取り上げます。「むずかしそう」を「できそう」に変えていきましょう。サンプル3の個数や値段を変えて、予想どおりの結果になるか、ぜひ試してみてください! 🚀

\ 読んだら、次は自分で作ってみよう /

筆者が運営する無料の入門コース「作って学ぶPythonプログラミング入門」では、こうした基本文法を、割り勘計算機・おみくじ・数当てゲームなどを作りながら身につけます。各章末の定着ドリル(全42問)で、自分の手で書く練習まで。最初の4レッスンは登録なしで読めます。

→ 無料の入門コース(全7章52レッスン)を見てみる

📚 関連商品・おすすめ書籍

スッキリわかるPython入門 第2版 (スッキリわかる入門シリーズ)

もしも

スッキリわかるPython入門 第2版 (スッキリわかる入門シリーズ)

初心者に定番のPython入門書

Amazonで見る
徹底攻略! 電子工作&プログラミング Arduinoで学ぶ電子工作完全ガイド

もしも

徹底攻略! 電子工作&プログラミング Arduinoで学ぶ電子工作完全ガイド

電子工作とプログラミングを同時に学べる

Amazonで見る
実践Claude Code入門―現場で活用するためのAIコーディングの思考法

もしも

実践Claude Code入門―現場で活用するためのAIコーディングの思考法

AIコーディングの現場活用法を学ぶ一冊

Amazonで見る

※本記事にはアフィリエイトリンクが含まれます。

ABOUT ME
やまちゃん
これまで学生と社会人を合わせて5000人以上にプログラミング学習を指導。 ゼロからイチをわかりやすく解説する専門家として活動しており、本業ではArduinoを用いたIoT開発とロボットプログラミングが専門。 Pythonを用いたアプリ開発、ウェブアプリケーションの開発で業務の効率化をサポートしています。