演算と変数¶
1. 演算¶
Pythonでは、数値の演算を簡単に行うことができます。基本的な算術演算子を使って、加算、減算、乗算、除算などを実行できます。
数値の演算¶
Pythonでは、次のような算術演算子を使用できます。
演算子 | 説明 | プログラム例 | 出力 |
---|---|---|---|
+ |
加算 | 3 + 2 |
5 |
- |
減算 | 5 - 2 |
3 |
* |
乗算 | 3 * 4 |
12 |
/ |
除算(浮動小数点) | 7 / 2 |
3.5 |
// |
整数除算(切り捨て) | 7 // 2 |
3 |
% |
剰余(余り) | 7 % 2 |
1 |
** |
累乗 | 2 ** 3 |
8 |
Pythonのコードで、コンピュータに計算させるために用いる記号を演算子(operator)や算術演算子(Math Operators)といいます。
実際に演算子を使ったコードを実装して、その動作を確認していきましょう。
割り算(除算、除法)¶
/
を使って割り算を行うことができます。結果は小数点(浮動小数点数型という)で表示されます。
プログラム:
print(7 / 2)
print(8 / 2)
出力:
3.5
4.0
切り捨て(整数除算)、あまり(剰余)¶
整数除算 //
を使うと、小数点以下を切り捨てた整数結果が得られます。
剰余 %
を使うと、割り算の余りが得られます。
プログラム:
print(7 // 2)
print(7 % 2)
出力:
3
1
累乗¶
累乗を計算するには **
を使います。
プログラム:
print(2 ** 3)
print(5 ** 2)
出力:
8
25
プログラム上での評価¶
Pythonでは、式(Expression) は オペランド(値)と演算子(+
, -
, *
, /
など) で構成されます。
式が実行されると、演算子ごとに処理が行われ、最終的に1つの値に置き換えられます。この 計算の過程 を 評価(Evaluation) と呼びます。
例えば、以下の式を考えてみます。
10 + 5 * 2
この式の評価(計算の流れ)は、次のように進みます。
ステップ | 式の状態 | 説明 |
---|---|---|
1 | 10 + 5 * 2 |
演算子の優先順位を確認する |
2 | 10 + 10 |
5 * 2 を計算(乗算が優先) |
3 | 20 |
10 + 10 を計算(加算) |
Python は 演算子の優先順位 に従い、まず *
(掛け算)を評価し、その結果を +
(足し算)に適用します。次は、より複雑な式を見てみましょう。
(2 + 3) ** 2 / 2 - 4
この式の評価の流れは以下のようになります。
ステップ | 式の状態 | 説明 |
---|---|---|
1 | 5 ** 2 / 2 - 4 |
2 + 3 = 5 を計算(加算) |
2 | 25 / 2 - 4 |
5 ** 2 = 25 を計算(べき乗) |
3 | 12.5 - 4 |
25 / 2 = 12.5 を計算(除算) |
4 | 8.5 |
12.5 - 4 = 8.5 を計算(減算) |
このように、優先順位の高い演算から順に評価 され、最終的に 8.5
という値を計算します。この演算子における優先度は、算術演算子の表 の下から上に評価されます。
文字の演算¶
Pythonでは、数値だけでなく文字(文字列、str
) も演算に利用できます。主に +
(連結)と *
(繰り返し)を使用します。
文字列の結合(連結)¶
+
演算子を使うと、文字列を結合できます。
プログラム:
print("こんにちは" + "世界")
出力:
こんにちは世界
文字列の繰り返し¶
*
演算子を使うと、文字列を指定回数繰り返せます。
プログラム:
print("Hello" * 3)
出力:
HelloHelloHello
数値と文字の違い¶
プログラム上で数理を意味する部分を数理リテラル、文字を表す部分を文字列リテラルと言います。数値リテラル(int や float)と文字列リテラル(str)は、見た目が似ていても動作が異なります。
リテラル | 例 | 型 | 挙動 |
---|---|---|---|
数値リテラル | 123 |
int |
123 + 1 → 124 |
数値リテラル | 3.14 |
float |
3.14 * 2 → 6.28 |
文字列リテラル | "123" |
str |
"123" + "1" → "1231" |
例えば、"123"
は数値ではなく文字列なので、+
を使うと足し算ではなく連結になります。
プログラム:
print("123" + "1")
出力:
1231
数値として計算するには int()
を使って変換が必要です。
プログラム:
print(int("123") + 1)
出力:
124
このように、文字列の演算には +
(連結)と *
(繰り返し)が使えます。
また、数値リテラルと文字列リテラルは見た目が似ていても動作が異なるので注意が必要です。
特殊な文字¶
プログラミングで特別な文字を扱うには、エスケープシーケンスを使います。エスケープシーケンスとは、文字列の中で特殊な意味を持つ記号を使うための方法です。 例えば、Pythonでは \
(バックスラッシュ)を使って、改行やタブ、特殊文字を表現できます。
以下は、Pythonでよく使われるエスケープシーケンスの一覧です。
エスケープシーケンス | 説明 | 例 |
---|---|---|
\n |
改行 | "Hello\nWorld" → Hello(改行)World |
\t |
タブ | "Hello\tWorld" → Hello World |
\\ |
バックスラッシュ | "C:\\Program Files\\" → C:\Program Files\ |
\' |
シングルクォート | 'It\'s OK' → It's OK |
\" |
ダブルクォート | "He said \"Hello\"" → He said "Hello" |
改行(\n
)¶
文字列の途中で改行したい場合は \n
を使います。
プログラム:
print("こんにちは\n世界")
出力:
こんにちは
世界
タブ(\t
)¶
タブ(スペース4つ分または8つ分の空白)を入れたいときは \t
を使います。
プログラム:
print("名前:\t田中\n年齢:\t25")
出力:
名前: 田中
年齢: 25
バックスラッシュ(\\
)¶
パスなどで \
(バックスラッシュ)を使いたい場合は \\
と書きます。
プログラム
print("C:\\Users\\User\\Documents")
出力:
C:\Users\User\Documents
クォートのエスケープ(\'
と \"
)¶
シングルクォート('
)やダブルクォート("
)を文字列内に含めたい場合に使います。
プログラム:
print('It\'s a pen.')
print("He said \"Hello\"")
出力:
It's a pen.
He said "Hello"
複数行の文字
Pythonでは、長い文字列を複数行にわたって記述したい場合、複数行文字列リテラル(In triple-quoted literals)を使用できます。複数行文字列リテラルは、"""
(ダブルクォート3つ)または '''
(シングルクォート3つ)で囲んだ文字列のことです。通常、文字列は "
または '
で囲みますが、1行が長くなると見づらくなります。そのため、複数行の文字列を扱うときは """
または '''
を使います。
プログラム:
print("""
これは
複数行の
文字列です。""")
出力:
これは
複数行の
文字列です。
"""
(ダブルクォート3つ)と'''
(シングルクォート3つ)のどちらでもOK\n
を使わなくても改行される- 変数への代入や関数の返り値として使える
2. 変数¶
ここまでで演算した数値や文字は、Python の変数に保存することができます。変数はプログラミングにおいて箱に例えられます。それではPythonの変数を見ていきましょう!
変数の利用¶
プログラミングにおいて 変数(variable) は、データを一時的に保存するための 識別子(identifier) です。Python では、変数に値を 代入することで使用でき、その値を参照することができます。
変数を使用するためには、まず定義する必要があります。Pythonでは、=
を使って変数に値を代入します。この =
は 代入演算子(assignment operator) と呼ばれます。
プログラム:
x = 10
y = 20
print(x + y)
出力:
30
変数名のルール¶
変数名(識別子)は、自由に決められますが、以下のルールを守る必要があります。
- 使用できる文字
- 英字(a-z, A-Z)、数字(0-9)、アンダースコア(_)が使える。
- 数字で始めることはできない(1var ❌)
- Pythonの予約語(keyword)を使えない
if
,for
,while
,def
,class
などの 予約語(keyword) は変数名にできない。
-
変数名のケース(記法)
- 変数の命名方法として、次のスタイルがよく使われます。
スタイル名 例 説明 スネークケース(snake_case) my_variable
Python では一般的 キャメルケース(camelCase) myVariable
Java や JavaScript などで使用される アッパーキャメルケース(UpperCamelCase) MyVariable
クラス名によく使われる チェインケース(chain-case) my-variable
Python の変数名では使えない
Pythonでは、一般的に スネークケース(snake_case) を使用するのが推奨されます。
user_name = "Alice" # スネークケース(推奨)
userAge = 25 # ロワーキャメルケース(非推奨)
UserAge = 25 # アッパーキャメルケース(クラス名向き)
Python の予約語
予約語は次のコードで出力することもできます。
プログラム:
import keyword
print(keyword.kwlist)
出力:
['False', 'None', 'True', '__peg_parser__', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
変数の上書き¶
変数に値を代入し、その後に参照することでプログラム内でデータを扱えます。
name = "Python"
print(name) # 変数 name を参照し、出力(Python)
Python では、異なる型の値を同じ変数に代入することができます。このような特徴を持つプログラミング言語のことを、動的型付け言語 といったりもします。
プログラム:
num = 10
print(num)
num = "hello"
print(num)
出力:
10
hello
アンパック代入¶
プログラムが複雑になっていきたくさんの変数を利用すると、それだけでコード量が多くなる場合があります。そんな時に複数の変数をいっぺんに代入する方法としてアンパック代入があります。
プログラム:
name, age = 'まさゆき', 32
print(name)
print(age)
出力:
まさゆき
32
複合代入演算子¶
Python では、変数に新しい値を代入すると、それまでの値は 上書き されます。
この仕組みを利用して、自分自身の変数を使って値を更新 することができます。
例えば、カウンターを 1 ずつ増やす処理を考えてみましょう。
count = 0 # 初期値を 0 に設定
count = count + 1 # 自分自身の値に 1 を加える
print(count) # 1 が出力される
このコードでは、count = count + 1 という式が次のように評価されます。
- count の現在の値(0)を取得
- 0 + 1 を計算し、新しい値 1 を求める
- count に 1 を再代入(上書き)
このように、変数の現在の値を使って、新しい値を計算し 再代入 することができます。
上記のような 自分自身の変数に新しい値を代入する処理 は、複合代入演算子(compound assignment operator) を使うと より簡潔に記述 できます。
例えば、次の 2 つのコードは同じ意味を持ちます。
x = 5
x = x + 3 # x に 3 を加算
x = 5
x += 3 # x に 3 を加算(簡潔な書き方)
複合代入演算子はほかにも、下記があります。
演算子 | 意味 | 例 | 同じ意味の通常の式 |
---|---|---|---|
+= |
加算 | x += 2 |
x = x + 2 |
-= |
減算 | x -= 2 |
x = x - 2 |
*= |
乗算 | x *= 2 |
x = x * 2 |
/= |
除算 | x /= 2 |
x = x / 2 |
//= |
整数除算 | x //= 2 |
x = x // 2 |
%= |
剰余 | x %= 2 |
x = x % 2 |
**= |
累乗 | x **= 2 |
x = x ** 2 |
プログラム:
num = 10
num += 5 # num = num + 5 と同じ
print(num)
num *= 2 # num = num * 2 と同じ
print(num)
num -= 10 # num = num - 10 と同じ
print(num)
出力:
15
30
20
複合代入演算子を使うメリットとして、コードがシンプルになり、読みやすくなります。
キーボード入力値の代入
Python では、input()
関数を使ってキーボードから入力を受け取り、それを変数に代入できます。
この機能を利用すると、ユーザーの入力をプログラム内で扱う ことができます。
キーボードから入力を受け取り、変数に代入する基本的なコードは次のようになります。
プログラム:
name = input("あなたの名前を入力してください: ")
print("こんにちは、" + name + "さん!")
出力:
あなたの名前を入力してください: まさゆき
こんにちは、まさゆきさん!
- input("メッセージ") は、ユーザーにメッセージを表示し、入力を受け取る。
- 入力された値は 文字列(str型) として変数 name に代入される。
- print() を使って、入力された値を画面に表示できる。
input()
関数で受け取った値は 常に文字列(str
型) なので、数値として計算したい場合は 型変換(キャスト
) が必要です。int(input(...))
にすることで、入力された文字列を 整数(int型) に変換します。
プログラム:
age = int(input("あなたの年齢を入力してください: "))
print("来年は", age + 1, "歳ですね!")
出力:
あなたの年齢を入力してください: 32
来年は 33 歳ですね!
float(input(...))
にすることで、小数を含む 浮動小数点数(float
型) に変換。
プログラム:
height = float(input("あなたの身長を入力してください(cm): "))
print("あなたの身長は", height, "cm ですね!")
出力:
あなたの身長を入力してください(cm): 167.5
あなたの身長は 167.5 cm ですね!
Python では split()
を使うことで、スペース区切りの入力を 複数の変数に同時に代入 できます。split()
を使うことで、ユーザーが John Doe のようにスペース区切りで入力した場合、first_name
に John、last_name
に Doe が代入される。
プログラム:
first_name, last_name = input("名前と名字をスペースで区切って入力してください: ").split()
print("あなたの名前は", first_name, last_name, "ですね!")
出力:
名前と名字をスペースで区切って入力してください: John Doe
あなたの名前は John Doe ですね!
3. 数値や文字列の演算テクニック¶
Python では、異なるデータ型を混ぜて計算しようとするとエラーが発生することがあります。
プログラム:
age = 25
message = "あなたの年齢は " + age + " 歳です。"
出力:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
/var/folders/lc/k7jt3gx9283453ptp9t9ty5m0000gn/T/ipykernel_16119/43467500.py in <module>
1 age = 25
----> 2 message = "あなたの年齢は " + age + " 歳です。"
TypeError: can only concatenate str (not "int") to str
これは、age(整数型 int
)と message(文字列型 str
)を直接結合できない ためです。
このようなエラーを防ぐには、データ型を適切に変換(キャスト) する必要があります。
キャスト¶
プログラムを作成する際、異なるデータ型を適切に扱うことが重要です。
Python では、データ型を変換(キャスト) することで、型の違いによるエラーを防ぎ、適切な処理を行うことができます。
明示的な型変換(キャスト)¶
異なるデータ型を手動で変換することを「明示的な型変換(explicit type conversion)」または「キャスト」と呼びます。 Python では、以下の関数を使ってデータ型を変換できます。
変換関数 | 説明 |
---|---|
int(x) | x を整数型(int )に変換 |
float(x) | x を浮動小数点数型(float )に変換 |
str(x) | x を文字列型(str )に変換 |
age = 25
message = "あなたの年齢は " + str(age) + " 歳です。"
print(message)
- age は
int
型なので、直接str
型の文字列と結合するとエラーになります。 str(age)
を使って age をstr
型に変換することで、文字列の結合が可能になります。
プログラム:
price = "100"
total = int(price) + 50 # 文字列 "100" を整数 100 に変換
print(total)
出力:
150
price は文字列型(str
)だが、数値として計算するために int(price)
を使って int
に変換。
プログラム:
x = 3.14
y = int(x) # 小数点以下を切り捨て
print(y)
出力:
3
int()
を使うと、小数点以下を切り捨てた整数 になる。
型変換の注意点
文字列を数値に変換するとき、数値以外の文字が含まれているとエラーになる ので注意。
プログラム:
value = "100円"
num = int(value)
出力:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
/var/folders/lc/k7jt3gx9283453ptp9t9ty5m0000gn/T/ipykernel_16119/2455516455.py in <module>
1 value = "100円"
----> 2 num = int(value)
ValueError: invalid literal for int() with base 10: '100円'
このような場合は、replace()
などを使って不要な文字を削除する必要があります。
プログラム:
value = "100円"
num = int(value.replace("円", "")) # "100" に変換してから数値に変換
print(num)
出力:
100
暗黙的な型変換(自動変換)¶
Python では、異なるデータ型が混在する演算を行うと、自動的に型変換が行われることがあります。
このことを 暗黙的な型変換(implicit type conversion) といいます。
プログラム:
x = 10 # int型
y = 2.5 # float型
result = x + y # int + float
print(result)
print(type(result))
出力:
12.5
<class 'float'>
整数(int
)と小数(float
)の計算結果は、自動的に float
に変換されます。
format
関数¶
文字列と数値を合わせて出力する方法として、str()
を使ってデータ型を変換して、文字列として+
結合する方法を学びました。
age = 25
message = "あなたの年齢は " + str(age) + " 歳です。"
print(message)
この方法はシンプルですが、変数が多くなると可読性が悪くなります。Python ではその他にもformat()
を使うことで、より柔軟にも文字列を作成できます。
プログラム:
name = "太郎"
age = 25
message = "私の名前は {} です。年齢は {} 歳です。".format(name, age)
print(message)
出力:
私の名前は 太郎 です。年齢は 25 歳です。
{}
の部分に .format()
の引数が順番に埋め込まれます、位置を指定することも可能です。
プログラム:
message = "年齢は {1} 歳です。名前は {0} です。".format(name, age)
print(message)
出力:
年齢は 25 歳です。名前は 太郎 です。
出力する際に数値のフォーマットを指定することも可能です。
プログラム:
pi = 3.1415926535
print("円周率は {:.2f} です。".format(pi))
出力:
円周率は 3.14 です。
f-string¶
Python 3.6 以降で導入された f-string(フォーマット済み文字列) は、変数の値を文字列に埋め込むための最も簡潔で可読性の高い方法です。
f-string を使うと、変数を {}
の中にそのまま埋め込むことができます。
文字列の前に f
を付ける ことで、フォーマット済み文字列として扱われます。
プログラム:
name = "太郎"
age = 25
message = f"私の名前は {name} です。年齢は {age} 歳です。"
print(message)
出力:
私の名前は 太郎 です。年齢は 25 歳です。
f"..."
の中で {}
を使うことで、変数の値がそのまま文字列に埋め込まれます。format()
よりもシンプルで、コードが読みやすくなります。
f-string は、数値のフォーマット(小数点以下の桁数、桁区切りなど)を簡単に指定できます。
{pi:.2f}
→ 小数点以下 2桁 に丸める。
プログラム:
pi = 3.1415926535
print(f"円周率は {pi:.2f} です。") # 小数点以下2桁
出力:
円周率は 3.14 です。
{price:,}
→ 3桁ごとにカンマ(,
)を追加。
プログラム:
price = 123456789
print(f"金額は {price:,} 円です。")
出力:
金額は 123,456,789 円です。
f-string の {}
の中では、計算式を直接記述することも可能 です。
プログラム:
a = 5
b = 3
print(f"{a} + {b} = {a + b}")
出力:
5 + 3 = 8
f-string 内で 関数の戻り値 を埋め込むこともできます。
プログラム:
def get_name():
return "花子"
print(f"こんにちは、{get_name()} さん!")
出力:
こんにちは、花子 さん!
辞書やリストの値も、{}
の中で参照できます。
プログラム:
person = {"name": "太郎", "age": 25}
print(f"名前: {person['name']}, 年齢: {person['age']} 歳")
出力:
名前: 太郎, 年齢: 25 歳
ゼロ埋め(0
を前につける)も簡単にできます。
プログラム:
number = 7
print(f"番号は {number:03} です。")
出力:
番号は 007 です。
f-string を使うことで以下のようなメリットがあります。
-
シンプルで直感的
{}
内に変数を書くことで、すぐに埋め込める。 -
コードの可読性が高い
format()
よりも短くて見やすい。 -
計算や関数の戻り値を埋め込める
{a + b}
や{get_name()}
など、直接記述が可能。 -
書式指定が簡単
{:.2f}
で小数点以下の桁数を調整、{:,}
でカンマ区切りなどができる。
Python 3.6 以降では f-string が最も簡単で推奨される方法 です!
従来の format()
に比べて、短く・分かりやすく・柔軟に 記述できます。
次のステップでは、f-string を活用してより高度なフォーマットを実践してみましょう!
この章のまとめ¶
1. 式と演算
- 数値の演算:
+
,-
,*
,/
,//
,%
,**
などの算術演算子を使って計算ができる。 - 文字列の演算:
+
で連結、*
で繰り返しが可能。 - エスケープシーケンス:
\n
(改行),\t
(タブ)など、特殊な文字を表現できる。 - 複数行文字列リテラル:
"""
や'''
を使って複数行の文字列を扱う。 - 式と評価: 演算の優先順位に従い、演算子が順に評価されて最終的な結果を得る。
2. 変数
- 変数の利用:
変数名 = 値
の形で変数を定義し、値を代入できる。 - 変数名のルール: アルファベット、数字、アンダースコア
_
を使用し、予約語は使用不可。 - 変数の上書き: 同じ変数名に新しい値を代入すると、元の値は上書きされる。
- アンパック代入:
a, b = 10, 20
のように複数の変数に一度に値を代入できる。 - 自分自身への代入:
x = x + 1
のように、変数の値を更新できる。 - 複合代入演算子:
+=
,-=
,*=
,/=
,//=
,%=
,**=
などで簡潔に計算と代入を同時に行える。 - キーボード入力値の代入:
input()
を使ってユーザーからの入力を受け取り、変数に代入できる。