edubun
日本語

値と変数

代数では、score = score + 5に解はありません。でもPythonでは、よく使うコードです。scoreが10なら、15になります。

=の記号は「等しい」という意味ではない

数学を学ぶ人にscore = score + 5という行を見せると、「それは成り立たない」と言うでしょう。自分自身に5を足した数と等しい数はないからです。代数としてはその通りで、だからこそこの行は、プログラムの中で初めて見たときに人を混乱させます。Pythonでは、=は2つのものが等しいという主張ではありません。向きのある命令です。まず右辺を計算し、次に左の名前をその結果に結びつけます。

score = 10
score = score + 5
print(score)
出力
15

Pythonがするように読みましょう。1行目:右辺は10なので、名前scoreは10を指します。2行目:右辺はscore + 5で、これは10 + 5、つまり15なので、scoreは15を指します。古い10は消えます。3行目は、その時点でscoreが指しているものを出力します。このように値を指す名前を変数と呼び、それに値を与える行を代入と呼びます。

変数は名札のように働きます。score = score + 5のあとで、名札は新しい値15に移り、古い値10は置き去りにされます。

トレース表は変数を1行ずつ追う

複数の変数が変わるときは、トレース表をつくります。コードの1行につき1行、変数ごとに1列で、その行が実行されたあと各変数がもつ値を書きます。時間はかかりますが、役に立ちます。「なぜそれが出力されるのか」という疑問の大半は、トレース表で1分以内に決着します。

score = 10
bonus = score * 2
score = 0
print(score, bonus)
出力
0 20
行scorebonus
score = 1010(まだなし)
bonus = score * 21020
score = 0020
print(score, bonus)020

最後の2行を見てください。scoreを0に変えても、bonusは変わりませんでした。2行目が実行されたとき、Pythonは10 * 2 = 20を計算し、その数をbonusに与えました。bonusが持つのは結果であって、計算のしかたではないので、その20がどこから来たかを覚えていません。

すべての値には型がある

値には種類があり、型と呼ばれます。42のような整数はintです。3.5のような小数点のある数はfloatです。引用符の中の文字はstrです。TrueとFalseはboolです。組み込み関数のtypeは、持っているものがどれかを教えてくれます。型が大切なのは、演算が何をするかを決めるからです。2 + 3は足し算をし、"2" + "3"は2つの文字列を連結して"23"にします。

print(type(42))
print(type(3.5))
print(type("42"))
print(type(True))
print(2 + 3, "2" + "3")
出力
<class 'int'>
<class 'float'>
<class 'str'>
<class 'bool'>
5 23

名前の規則

変数名には、文字、数字、アンダースコア_が使えますが、数字で始めたり、空白を含めたりはできません。大文字は別の文字として数えられるので、Scoreとscoreは2つの別の変数です。if、for、Trueのような語は言語のもので、名前には使えません。Pythonプログラマは、ふつう名前を小文字で、語の間をアンダースコアでつないで書き、lunch_priceのように値の意味を表す名前を選びます。xは手早い試しならかまいませんが、ほかの人が読むプログラムではseats_leftのほうがよいです。

a = "left"
b = "right"
a, b = b, a
print(a, b)
出力
right left

最後の例は、1行で2つの値を入れ替えます。Pythonは右辺全体、b, aを先に計算し、そのあとで2つの結果をaとbに与えます。ほかの多くの言語では、同じことに3つ目の変数が要ります。

変数値を指す名前
代入name = value:右辺を計算してから、名前を結びつける
int整数:7、-3、2026
float小数点のある数:3.5、0.1
str引用符の中の文字
boolTrueまたはFalse
トレース表各行のあとの、すべての変数の値の表
  1. このコードは何を出力しますか。
    x = 4
    x = x + 3
    print(x)
  2. このコードは何を出力しますか。
    a = 3
    b = a
    a = 7
    print(b)
  3. このコードは何を出力しますか。
    price = 1500
    count = 3
    total = price * count
    print(total)
  4. このコードは何を出力しますか。
    n = 2
    n = n * n
    n = n * n
    print(n)
    • 4
    • 8
    • 16
    • 2
  5. このコードは何を出力しますか。
    print(type(7.0))
  6. このコードは何を出力しますか。
    print("7" + "7")
  7. 次のうち、有効な変数名はどれですか。
    • 2nd_place
    • seats left
    • seats_left
    • for
  8. このコードは何を出力しますか。
    a = "left"
    b = "right"
    a, b = b, a
    print(b)
  9. このコードは何を出力しますか。
    Score = 5
    score = 9
    print(Score)
    • 5
    • 9
    • 14
    • An error
  10. x = 10のあと、単独の行でx + 1を実行すると、xはいくつですか。
    • 10
    • 11
    • x + 1
    • エラー
よくある間違い
  • 「5 = xとx = 5は同じ意味。」 名前は左になければなりません。5 = xは、SyntaxError: cannot assign to literal here. Maybe you meant '==' instead of '='?で止まります。
  • 「bonus = score * 2は、bonusをscoreに永久に結びつける。」 bonusは、その時点で計算が出した数を受け取ります。トレース表が示すように、あとでscoreを変えても影響しません。
  • 「x + 1と書くと、xに1が足される。」 式だけでは何も変わりません。x = x + 1、または短い形のx += 1が必要です。
先生からひとこと=の記号は、数学から持ち越される最大の混乱のもとです。役に立つ習慣の1つは、=を「等しい」ではなく、「得る」や「なる」(「scoreはscore足す5になる」)と声に出して読むことです。トレース表には、授業の時間をきちんと割く価値があります。5行のプログラムを出し、実行する前に表を求め、そのあと実行して比べます。入れ替えa, b = b, aは、右辺全体が先に計算されることを学習者が理解しているかを確かめるのに向いています。type()は最初から目に入る場所に置いておきましょう。"7" + "7"の意外な結果は、入力の単元でまた現れるからです。
ポイント
  • =は「右辺を計算し、それにこの名前を与える」という意味。
  • トレース表は、各行のあとのすべての変数を記録する。
  • 型:int、float、str、bool。type()がどれかを教える。
  • 名前:文字、数字、_。最初に数字は不可。大文字小文字は区別される。
このコースの出典 (6)
  • Python Software Foundation, The Python Tutorial for Python 3.12 (docs.python.org/3.12/tutorial: 2 Using the Python Interpreter, 3 An Informal Introduction to Python (numbers, text, lists), 4 More Control Flow Tools (if, for, range, break and continue, defining functions, default argument values, 4.10 coding style: 4-space indentation), 5 Data Structures (list methods, 5.5 dictionaries, insertion order), 8 Errors and Exceptions (syntax errors, exceptions, reading the traceback, handling exceptions), 15 Floating-Point Arithmetic (0.1 + 0.2))
  • Built-in Functions (docs.python.org/3.12/library/functions.html: print, input, len, int, float, str, type, round (round half to even: round(0.5) and round(-0.5) are 0, round(1.5) is 2), range, sum, min, max, sorted)
  • Built-in Types (str methods upper, lower, replace, strip; dict.get; list.append, pop, remove, sort returning None)
  • General Python FAQ (docs.python.org/3.12/faq/general.html: Guido van Rossum began Python in the 1989 Christmas holidays, posted it to USENET in February 1991, named it after Monty Python's Flying Circus)
  • Curriculum for the Korean pages: 교육부 고시 제2022-33호 [별책 10] 정보과 교육과정 (PDF read 2026-10-19: 중학교 정보 [9정03-05] 리스트 등 데이터를 순차적으로 저장하는 구조, [9정03-06] 논리 연산과 중첩 제어 구조, [9정03-07] 함수 활용과 디버거로 오류 수정, [9정03-08] 실생활 문제를 프로그래밍으로 해결, 적용 시 고려 사항 「학생의 수준을 고려하여 적합한 프로그래밍 언어를 선정」; 고등학교 정보 [12정03-04] 자료형, [12정03-05] 표준입출력, [12정03-07] 제어 구조)
  • Bug story only: Smithsonian National Museum of American History, Log Book With Computer Bug, 1947, Harvard Mark II, "first actual case of bug being found", probably not Hopper's log book (americanhistory.si.edu/collections/object/nmah_334663, read 2026-10-19)

確認日: 2026-10-19