変数と型
すべてのプログラムは何かを記憶する必要があります。クイズにはプレイヤーの名前が必要です。ゲームには現在のスコアが必要です。天気スクリプトには確認したい都市が必要です。Pythonはこのために変数を使います。変数とは値に付ける名前のことで、プログラム全体を通して使用できます。
player_name = "さくら"
score = 0
city = "東京"3行で3つのことをPythonが記憶します。後でこれらの名前を使えば、Pythonは値を返してくれます。
値を格納する
=記号は数学の授業から来る人のほぼ全員を戸惑わせます。Pythonでは、=は「等しい」という意味ではありません。この名前でこの値を格納するという意味です。左から右へ読みましょう:
city = "東京"cityに"東京"が入ります。Pythonに「"東京"を記憶してcityというラベルを付けて」と伝えているわけです。
変数の値はいつでも置き換えられます。Pythonは最新のものを使います:
score = 0
score = 10 # score は今 10
score = 15 # score は今 15変数の命名
名前は自分で選びます。Pythonにはいくつかの厳格なルールがあり、コミュニティは最初から採用する価値のある慣習に従っています。わかりやすい名前は数週間後でもコードを読みやすくします。意味不明な名前は苦痛を生みます。
Pythonが強制するルール:
- 使えるのは文字、数字、アンダースコアのみ。スペースやハイフンは使えない
- 文字またはアンダースコアで始まること。数字で始めることはできない
- 大文字と小文字は区別される:
score、Score、SCOREはそれぞれ別の変数
全員が従う慣習(PEP 8):
| 対象 | スタイル | 例 |
|---|---|---|
| 変数と関数 | snake_case | user_name, total_price |
| 定数 | UPPER_SNAKE_CASE | MAX_RETRIES, BASE_URL |
| クラス | PascalCase | UserAccount, DataLoader |
# わかりやすい名前、一目でわかる
user_name = "さくら"
total_price = 49.99
is_logged_in = True
MAX_RETRIES = 3
# 1時間以内に後悔する名前
x = "さくら"
tp = 49.99
b = True早めに知っておく価値のある落とし穴:list、input、type、printのようなPythonの組み込みと同じ名前を変数に付けないでください。Pythonは許可しますが、そのスコープの残りの部分で組み込みが暗黙的に壊れ、結果として生じるエラーは追跡が困難です。
格納できるもの
ほぼすべてのプログラムで使う4つの型があります。Pythonは値の書き方からどの型を意味するか判断します。型を明示的に宣言する必要はありません。
テキスト(str)
テキストはシングルクォートまたはダブルクォートの中に入れます。クォートはPythonに対して、変数名ではなくリテラルの文字であることを伝えます。一度作成された文字列はその場で変更できません。文字列の章ではできることをすべて解説します。
player_name = "さくら"
city = "東京"
message = 'ゲームオーバー'テキストにアポストロフィが含まれる場合、エスケープを避けるためにダブルクォートを使います:
note = "It's a great day"
note = 'It\'s a great day' # 同じ結果、エスケープを使用整数(int)
整数はクォートや小数点なしで記述します。Pythonはこれを整数と呼びます。必要なだけ大きな値を使えます。Pythonは特別な作業なしで任意の大きな数値を処理します。
score = 0
age = 28
population = 8_100_000_000 # アンダースコアは読みやすさのためだけ小数(float)
小数点を含む数値はすべて浮動小数点数です。ほとんどの計算で期待通りに動作します。知っておくべき点:一部の小数値はバイナリで正確に格納できないため、わずかな丸め誤差が生じることがあります:
price = 4.99
temperature = 36.6
0.1 + 0.2 # 0.30000000000000004日常的な作業ではほとんど問題ありません。1セントの端数が重要な金融計算には、正確に処理できるdecimalモジュールがあります。数値の章で解説します。
真偽値(bool)
単純にオンかオフかのものがあります。Pythonはこれにブール値を使います:TrueとFalseの2つの値だけです。この段階では些細に見えますが、プログラム内のすべての条件と分岐はブール値で動きます。
is_logged_in = True
has_errors = FalsePythonは条件で使われるとFalseのように扱われる値もあります:0、0.0、""、そしてNone(Pythonの「値なし」)はすべてFalseのように振る舞います。それ以外はすべてTrueのように振る舞います。これは制御フローの章で役立ちます。
型の確認と変換
値の型がわからない場合、type()が教えてくれます。値が特定の型かどうかを確認するには、isinstance()がより信頼できるツールです:
print(type("hello")) # <class 'str'>
print(type(42)) # <class 'int'>
print(type(3.14)) # <class 'float'>
print(type(True)) # <class 'bool'>
isinstance(42, int) # True
isinstance("hi", str) # TruePythonは型を自動的に混在させません。文字列と数値を連結するとTypeErrorが発生します:
score = 42
print("あなたのスコアは " + score) # TypeError
print("あなたのスコアは " + str(score)) # 動作する型名を関数として使って明示的に変換します:
| 呼び出し | 結果 |
|---|---|
str(42) | "42" |
int(3.9) | 3(切り捨て、四捨五入ではない) |
float("3.14") | 3.14 |
int("3.14") | ValueError:小数文字列を直接intに変換できない |
int(float("3.14")) | 3(まずfloatに変換してからintに変換) |
bool(0) / bool("") | False |
実践
4つの型すべてが小さなスクリプトで一緒に動作しています。出力行はf文字列を使ってテキストに値を埋め込んでいます。開きクォートの前にfを付け、変数を{}で囲みます。Pythonはそれを変数の実際の値に置き換えます。次の章で正しく学びます。
player_name = "さくら"
level = 3
accuracy = 0.94
is_premium = True
print(f"{player_name} はレベル {level} で精度 {accuracy:.0%} です。")
print(f"プレミアムアカウント: {is_premium}")型が重要なのは、level + 1は動作してもplayer_name + 1は動作しないからです。各変数は一種類のものだけを保持します。Pythonは暗黙的に混在させてくれません。

