順番に読み進めながら学べます

変数とデータ型

Pythonの変数をx = 10のような代入から学びます。未代入で起きるNameError、再代入で上書きできる動的型付け、命名ルールと予約語、TAX_RATEのような定数の慣習を扱います。

変数とは何か

変数(variable)を用いればその変数の箱にデータを入れることができます。たとえばx = 10と書くと、xに整数10を入れられます。

また同じ変数名で値を取り出したり、書き換えたりできます。

変数と値の関係
変数名(x)(10)メモリ参照格納

変数名が値を参照したら、値がメモリ上に格納されます

では実際にターミナルで試してみましょう。ターミナルに「x = 10」と「print(x)」を入力して実行してみてください。

Python エディタ

コードを実行してください

右画面に10と表示されましたか?これはprint(x)の実行結果です。

print(変数)とすると、その変数の中身を画面上に表示できます。

一方、まだ代入していない変数を使おうとするとNameErrorが発生します。これは「その名前の変数が存在しない」とPythonが判断するためです。

変数は必ず代入してから使う必要があります。

ターミナルで実際にエラーを確認してみましょう。

Python エディタ

コードを実行してください

型とは何か

変数に入れるデータには(type)があります。型とは「このデータが何者か」を示すラベルのようなものです。

たとえば10整数(int)"hello"文字列(str)という型を持っています。

整数型(int)

int整数を扱う型です。小数点のない数値はすべて int として扱われます。

足し算・引き算・掛け算・割り算などの算術演算が直接使えるのが特徴です。

type()関数に渡すと<class 'int'>と表示され、int型だと確認できます。

int型 の基本
10(数値そのもの)int型10 + 5= 1510 * 3= 30<class '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'>

total_minutes = 130(合計分数)が用意されています。

整数除算 //を使って「何時間ぶんか」、剰余 %を使って「残り分」を計算し、それぞれprint()で表示してください。

type()を使ってtotal_minutesの型を表示してください。

Python エディタ

コードを実行してください

文字列型(str)

str文字列を扱う型です。シングルクォート'...'またはダブルクォート"..."で囲んだ値が str になります。

+で文字列を連結したり、len()文字数を取得したりできます。

数字を"10"のようにクォートで囲むと str になり、そのままでは計算に使えません。

str型 の基本
"hello"文字列リテラルstr型"hello" + "!"= "hello!"len("hello")= 5型が決まる連結文字数

文字列リテラルから 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'>

変数name = "Alice"score = "95"が用意されています。

+を使って"Aliceのスコアは95点です。"と表示してください。

len()を使ってnameの文字数を表示してください。

Python エディタ

コードを実行してください

異なる型の操作

型が違うと、できる操作も変わります。整数同士は足し算できますが、整数と文字列を足そうとすると 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歳

実行してTypeErrorとなることを確認してください

Python エディタ

コードを実行してください

変数の宣言と代入

Pythonは動的型付け(dynamic typing)と呼ばれる言語で、JavaやC言語のようにint x;と型を先に書く必要がありません。

=を使って右辺の値を左辺の変数名に代入するだけで変数を定義できます。

また、一度代入した変数に別の値を再代入することも可能です。

動的型付け vs 静的型付け
動的型付け(Python)x = 10→ int型x = 'hello'→ str型静的型付け(Java / C)int x = 10型宣言が必須x = 'hello'コンパイルエラー代入再代入OK型宣言型が違う

Pythonは実行時に型が決まる(動的)、JavaやCはコンパイル時に型が固定される(静的)

以下は、変数に値を代入・再代入している例です。Pythonでは、変数に値を代入する際に型を指定せずに代入することができ、再代入も自由にできます。

# 変数への代入
name = "Alice"
age = 25

# 再代入(値の上書き)
age = 26

# 複数変数に異なる値を同時に代入(まとめて1行で書ける)
x, y, z = 1, 2, 3

以下の3つを順番に行い、それぞれprint()で表示してください。

① 変数city"Tokyo"を代入して表示する。

city"Osaka"に再代入して表示する(同じ変数に上書きできることを確認)。

a, b, c10, 20, 30を同時に代入し、3つをまとめて表示する。

Python エディタ

コードを実行してください

変数の命名ルール

変数名は自由に付けられますが、いくつかの書き方のルールがあります。

- 使える文字は英字(a-z, A-Z)、数字(0-9)、アンダースコア(_)の3種類

- 先頭は英字かアンダースコアのみ(数字で始めることはできない)

- 大文字と小文字は区別される(ageAgeは別の変数)

変数名OK / NG理由
user_nameOK英字とアンダースコアの組み合わせ
age2OK英字で始まり、途中に数字を含むのは問題ない
_totalOKアンダースコアで始まるのは許容
2nd_userNG先頭に数字は使えない
user-nameNGハイフンは使えない
user nameNGスペースを含めない

加えて、Python があらかじめ意味を決めている予約語(キーワード)は変数名にできません。for / if / class / return / True / None / importなど 35 個あり、これらを変数名にしようとするとSyntaxErrorが発生します。

ルールに反した変数名を実行するとどうなるか確認してみましょう。

Python エディタ

コードを実行してください

定数 — 変更しない値の書き方

プログラム中で一度決めたら変更しない値定数と呼ばれ、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と再代入してもエラーにはならず、値が変わってしまいます。全大文字は「変更しないでください」というプログラマー間の約束と覚えておきましょう。

定数を使って税込み価格を計算してみましょう。

① 消費税率を表す定数TAX_RATE0.1を代入する。

② 商品価格price980を代入する。

③ 税込み価格(price × (1 + TAX_RATE))を計算してprint()で表示する。

Python エディタ

コードを実行してください

型の確認と変換

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
型変換の流れ
"100"str型int()変換100int型str()変換"100"str型渡すstr→int渡すint→str

商品の価格が文字列price_str = "1980"として与えられています。

int()で整数に変換し、消費税10%を加えた税込み価格を計算して表示してください。

type()を使って、変換前(price_str)と変換後(price_int)の型を表示してください。

Python エディタ

コードを実行してください

型変換できない場合は ValueError

数値として解釈できない文字列をint()float()に渡すとValueErrorが発生します。例えばint("abc")float("hello")はエラーになります。ユーザー入力などを変換する際はtry / exceptで例外処理を行いましょう。

実行するとValueErrorが発生するので確認をしてみてください。ValueErrorに対処するには、例外処理が必要となります。

Python エディタ

コードを実行してください

この記事では、変数の使い方とint型・str型の基本、そして動的型付けの仕組みを学びました。

type()による型の確認やint() / str()を使った型変換、変換失敗時のValueErrorまで、Pythonのデータ型の基礎をひととおり押さえました。

QUIZ

理解度チェック

まずは1問ずつ答えてみましょう。

Q1次のうち、変数名として使えないものはどれですか?

Q2次のコードの実行結果はどれですか?
x = str(3.14)
print(type(x))

Q3次のコードの実行結果はどれですか?
x = "10"
print(int(x) + 5)