Q1次のうち、変数名として使えないものはどれですか?
変数とデータ型
Python の変数とデータ型の基本を学びます。宣言と代入から命名ルール、int / str の型変換まで初心者向けに一通り図解で押さえます。
変数とは何か
変数(variable)を用いればその変数の箱にデータを入れることができます。たとえば x = 10 と書くと、x に整数 10 を入れられます。
また同じ変数名で値を取り出したり、書き換えたりできます。
変数名が値を参照したら、値がメモリ上に格納されます
右画面に10と表示されましたか?これは print(x) の実行結果です。
print(変数) とすると、その変数の中身を画面上に表示できます。
一方、まだ代入していない変数を使おうとすると NameError が発生します。これは「その名前の変数が存在しない」とPythonが判断するためです。
変数は必ず代入してから使う必要があります。
型とは何か
変数に入れるデータには型(type)があります。型とは「このデータが何者か」を示すラベルのようなものです。
たとえば 10 は整数(int)、"hello" は文字列(str)という型を持っています。
整数型(int)
int は整数を扱う型です。小数点のない数値はすべて int として扱われます。
足し算・引き算・掛け算・割り算などの算術演算が直接使えるのが特徴です。
type() 関数に渡すと <class 'int'> と表示され、int型だと確認できます。
a = 10
b = 3
print(a + b) # 13(加算)
print(a - b) # 7 (減算)
print(a * b) # 30(乗算)
print(a // b) # 3 (整数除算:小数切り捨て)
print(a % b) # 1 (剰余:割り算の余り)
print(type(a)) # <class 'int'>
文字列型(str)
str は文字列を扱う型です。シングルクォート '...' またはダブルクォート "..." で囲んだ値が str になります。
+ で文字列を連結したり、len() で文字数を取得したりできます。
数字を "10" のようにクォートで囲むと str になり、そのままでは計算に使えません。
文字列リテラルから str型が生成され、連結や文字数取得に使われる
greeting = "hello"
name = "Alice"
print(greeting + ", " + name + "!") # hello, Alice!
print(len(greeting)) # 5(文字数)
# 注意:"10" は str なので計算できない
num_str = "10"
# print(num_str + 5) # TypeError!
print(int(num_str) + 5) # 15(int()で変換すればOK)
print(type(greeting)) # <class 'str'>
異なる型の操作
型が違うと、できる操作も変わります。整数同士は足し算できますが、整数と文字列を足そうとすると TypeError が発生します。
以下のコードで、int型とstr型を混ぜた演算がどうなるか確認してみましょう。
age = 25 # int型
name = "Alice" # str型
# int同士はOK
print(age + 10) # 35
# str同士はOK(連結)
print(name + "!") # Alice!
# int + str はエラー
# print(age + name) # TypeError: unsupported types for __add__: 'int', 'str'
# str() で変換すれば連結できる
print(str(age) + "歳") # 25歳
変数の宣言と代入
Pythonは動的型付け(dynamic typing)と呼ばれる言語で、JavaやC言語のように int x; と型を先に書く必要がありません。
= を使って右辺の値を左辺の変数名に代入するだけで変数を定義できます。
また、一度代入した変数に別の値を再代入することも可能です。
Pythonは実行時に型が決まる(動的)、JavaやCはコンパイル時に型が固定される(静的)
以下は、変数に値を代入・再代入している例です。Pythonでは、変数に値を代入する際に型を指定せずに代入することができ、再代入も自由にできます。
# 変数への代入
name = "Alice"
age = 25
# 再代入(値の上書き)
age = 26
# 複数変数に異なる値を同時に代入(まとめて1行で書ける)
x, y, z = 1, 2, 3
変数の命名ルール
変数名は自由に付けられますが、いくつかの書き方のルールがあります。
- 使える文字は英字(a-z, A-Z)、数字(0-9)、アンダースコア(_)の3種類
- 先頭は英字かアンダースコアのみ(数字で始めることはできない)
- 大文字と小文字は区別される(age と Age は別の変数)
| 変数名 | OK / NG | 理由 |
|---|---|---|
| user_name | OK | 英字とアンダースコアの組み合わせ |
| age2 | OK | 英字で始まり、途中に数字を含むのは問題ない |
| _total | OK | アンダースコアで始まるのは許容 |
| 2nd_user | NG | 先頭に数字は使えない |
| user-name | NG | ハイフンは使えない |
| user name | NG | スペースを含めない |
加えて、Python があらかじめ意味を決めている予約語(キーワード)は変数名にできません。for / if / class / return / True / None / import など 35 個あり、これらを変数名にしようとすると SyntaxError が発生します。
定数 — 変更しない値の書き方
プログラム中で一度決めたら変更しない値は定数と呼ばれ、Python では慣例的にすべて大文字とアンダースコアで書きます。
たとえばコードの中に突然 20 とだけ書いてあると、読み手には「なぜ 20 なのか」が伝わりません(この意味不明な数字をマジックナンバーと呼びます)。先頭で LEGAL_AGE = 20 のように定数として名前を付けておけば、意味が一目で伝わり、値を変えたくなったときもその 1 行だけ直せば済むようになります。
# 定数は全部大文字 + アンダースコア
LEGAL_AGE = 20
MAX_RETRY = 3
PI = 3.14159
print(f"成人年齢は{LEGAL_AGE}歳")
print(f"最大リトライ回数: {MAX_RETRY}")
print(f"円周率は約{PI}")
Pythonに「本物の定数」はない
C や Java と違い、Python には書き換えを禁止する仕組みがありません。LEGAL_AGE = 20 と書いたあとに LEGAL_AGE = 25 と再代入してもエラーにはならず、値が変わってしまいます。全大文字は「変更しないでください」というプログラマー間の約束と覚えておきましょう。
型の確認と変換
type() 関数を使うと変数のデータ型(どの種類のデータか)を確認できます。また、int() / str() などの組み込み関数(Pythonに初めから備わっている関数)を使うことで、値を別の型に変換(型変換またはキャストともいう)できます。
たとえばユーザーが入力した文字列の数字を計算に使いたいときは、int() で整数型に変換する必要があります。
以下の例では、型の確認と型変換を行なっています。
# 型の確認
x = 42
print(type(x)) # <class 'int'>
print(type("hello")) # <class 'str'>
# 型変換
num_str = "100"
num_int = int(num_str) # str → int
back_to_str = str(num_int) # int → str
print(num_int + 50) # 150
型変換できない場合は ValueError
数値として解釈できない文字列を int() や float() に渡すと ValueError が発生します。例えば int("abc") や float("hello") はエラーになります。ユーザー入力などを変換する際は try / except で例外処理を行いましょう。
この記事では、変数の使い方と int型・str型 の基本、そして動的型付けの仕組みを学びました。
type() による型の確認や int() / str() を使った型変換、変換失敗時の ValueError まで、Pythonのデータ型の基礎をひととおり押さえました。
理解度チェック
まずは1問ずつ答えてみましょう。
Q2次のコードの実行結果はどれですか?x = str(3.14)
print(type(x))
Q3次のコードの実行結果はどれですか?x = "10"
print(int(x) + 5)