Pythonの算術演算子(代数演算子)の使い方をIT初心者向けにわかりやすく解説します。
具体的には、Pythonで足し算・引き算・掛け算・割り算などを始めとする四則演算の基本から、関連する組み込み関数についてサンプルコード付きでご説明します。
Pythonエンジニアを目指す方であれば知らないと恥ずかしい超・基本知識の1つです。是非最後までご覧ください。
Python:算術演算子の基本
Pythonの基本的な算術演算子を以下に示します。
各演算子の概要と使用方法をサンプルコード付きで解説します。
Python:加算 (+)
この演算子は2つの数値を足し合わせます。
文字列に対して使用すると、2つの文字列が連結(=結合)されます。
a = 5 b = 2 print(a + b) # 出力: 7 str1 = "Hello, " str2 = "world!" print(str1 + str2) # 出力: "Hello, world!"
参考 print関数の使い方
Pythonの加算演算子は小数点数に対しても利用可能です。小数を加算するときの基本的な規則は整数の場合と同じです。
a = 5.5 b = 2.3 print(a + b) # 出力: 7.8
ただし、小数を扱う際には浮動小数点数の精度に注意する必要があります。コンピュータは浮動小数点数を二進数で表現するため、すべての小数が正確に表現できるわけではありません。そのため、非常に大きな数と非常に小さな数を加算すると、精度の問題が発生する可能性があります。
a = 1000000.0 b = 0.000001 print(a + b) # 出力: 1000000.000001 (理論上はこれが正しいですが、精度の問題によりそれが必ずしも得られるわけではない)
Python:減算 (-)
この演算子は最初の数値から二番目の数値を引きます。
a = 5 b = 2 print(a - b) # 出力: 3
Pythonの減算演算子 -
は文字列に対しては利用できません。文字列に対する算術演算子は基本的に限定的で、特に加算 +
(文字列の結合)と乗算 *
(文字列の繰り返し)がサポートされています。
例えば、文字列から特定の文字や部分文字列を削除したい場合は、文字列の replace()
メソッドを使用することができます。これは直接的な「減算」ではありませんが、一部を削除するという目的を達成することはできるので、頭に入れておくと良いでしょう。
s = "Hello, world!" s = s.replace("world", "") print(s) # 出力: "Hello, !"
Python:乗算 (*)
この演算子は2つの数値を掛け合わせます。
a = 5 b = 2 print(a * b) # 出力: 10
乗算演算子 *
を文字列に対して使用すると、その文字列が指定した回数だけ繰り返されます。
s = "Hello " print(s * 3) # 出力: "Hello Hello Hello "
ただし、この動作は整数のみに対して有効。浮動小数点数や他の文字列を乗算因子として使用することはできません。
s = "Hello " print(s * "3") # TypeError print(s * 3.0) # TypeError
Python:除算 (/)
この演算子は最初の数値を二番目の数値で除算します。
a = 5 b = 2 print(a / b) # 出力: 2.5
割り切れない除算はどうなるか?
例えば1を3で除算すると、結果は約0.3333333333333333となります。コンピュータは数値を有限の精度でしか表現できないため、実際の結果は無限に続く小数0.33333...を近似したものとなります。
a = 1 b = 3 print(a / b) # 出力: 0.3333333333333333
割り切れない数は、ある一定の少数まで割り続けて答えを返してくれます。
Python:整数除算 (//)
この演算子は最初の数値を二番目の数値で除算し、結果の整数部分だけを返します。
分かりやすく言うと、結果は小数点以下を切り捨てた整数となります。
a = 5 b = 2 print(a // b) # 出力: 2
5を2で除算すると、結果は2.5となりますが、整数除算演算子 //
を使用しているため、結果の小数部分 .5 は無視され、結果として2が返さるということです。
小数に //
演算子を使用すると、結果も同様に小数点以下が切り捨てられます。
a = 5.5 b = 2.1 print(a // b) # 出力: 2.0
ここで注意すべき点は、Pythonの //
演算子は「切り捨て」を行い、結果は「小さい方の最も近い整数」になるということです。
このため、負の数値に対して //
演算子を使用すると、結果は直感と異なるかもしれません。
a = -5 b = 2 print(a // b) # 出力: -3
-5を2で除算すると、結果は-2.5となります。
しかし、//
演算子は小さい方の最も近い整数、つまり-3に向かって切り捨てを行います。このような挙動は、プログラムの中で意図しないバグを引き起こす可能性がありますので、負の数値を扱う際には注意が必要です。
Python:剰余 (%)
この演算子は最初の数値を二番目の数値で除算したときの余りを返します。
a = 5 b = 2 print(a % b) # 出力: 1
5を2で除算すると、商は2で余りは1となります。そのため、 a % b
の結果は1となります。
剰余演算子は負の数に対しても使用可能ですが、こちらも結果は直感と異なるかもしれません。
a = -5 b = 2 print(a % b) # 出力: 1
-5を2で除算すると、商は-3で余りは1となります。Pythonの剰余演算子は「商を小さい方の最も近い整数に丸め、その結果から余りを計算する」というルールに従います。このため、剰余演算子を負の数に対して使用する際には注意が必要です。
整数除算 //
と剰余 %
は密接に関連しており、次の等式が常に成り立ちます。
a == (a // b) * b + a % b
。
Python:指数 (**)
指数演算子 **
は、一方の数値を他方の数値のべき乗とします。つまり、a ** b
は "aのb乗" を意味します。
a = 2 b = 3 print(a ** b) # 出力: 8
2の3乗(つまり2 * 2 * 2)が計算され、その結果8が出力されます。
指数演算子は小数、負数、さらには複素数に対しても使用することが可能です。
print(2 ** 0.5) # 出力: 1.4142135623730951(2の平方根) print(2 ** -2) # 出力: 0.25(2の-2乗、つまり1/2の2乗) print((1j) ** 2) # 出力: (-1+0j)(虚数単位jの2乗)
Pythonの指数演算子 **
は非常に強力で、多様な数値のべき乗を簡単に計算することができます。
ただし、大きな数値を扱う場合は注意が必要で、結果が非常に大きな数になったり、計算に時間がかかったりする可能性があります。
算術演算子に関連するPython組み込み関数
Pythonでは、算術演算子に関連するいくつかの組み込み関数が提供されています。
その中でも特に重要な関数 abs()
, divmod()
, pow()
, round()
についてご説明します。
abs(x)
絶対値を返します。つまり、x
が負の場合は -x
を、それ以外の場合は x
を返します。
print(abs(-5)) # 出力: 5
divmod(a, b)
2つの数値 a
と b
を引数として受け取り、a
を b
で除した商と余りをタプルで返します。
つまり、divmod(a, b)
は (a // b, a % b)
と等価です。
print(divmod(5, 2)) # 出力: (2, 1)
pow(x, y)
x
の y
乗を計算します。つまり、pow(x, y)
は x ** y
と等価です。
3つ目の引数をオプションで受け取り、pow(x, y, z)
は x ** y % z
をより効率的に計算します(ただし、x, y, zはすべて整数で、z ≠ 0 である点に注意しましょう)。
print(pow(2, 3)) # 出力: 8 print(pow(2, 3, 3)) # 出力: 2
round(number[, ndigits])
数値を最も近い整数に丸めます。
オプションの引数 ndigits
を指定すると、その桁までの小数点以下を丸めます。
print(round(5.76543, 2)) # 出力: 5.77 print(round(5.76543)) # 出力: 6
これらの関数は算術演算子と一緒に使うことで、より高度な数値操作を行うことができます。
算術演算子利用時の注意点
算術演算子を利用する際には、いくつかの注意点があります。
最後に初心者の方が陥りがちな罠を見ていきましょう。
ZeroDivisionError
Pythonでは、数値を0で除算することは許されていません。
つまり、a / 0
、a // 0
、a % 0
のようなコードはエラー(ZeroDivisionError
)を引き起こします。このエラーを避けるためには、除算を行う前に除数が0でないことを確認するか、try/except文を使用してエラーを適切に処理する必要があります。
a = 5 b = 0 try: c = a / b except ZeroDivisionError: print("Error: Division by zero")
浮動小数点の誤差
コンピュータは数値を有限の精度でしか表現できないため、浮動小数点の計算結果は常に微小な誤差を含む可能性があります。これは、特に比較演算や等価性チェックを行う際に問題を引き起こす可能性があります。
a = 0.1 + 0.2 print(a) # 出力: 0.30000000000000004 print(a == 0.3) # 出力: False
0.1と0.2を加算した結果は、数学的には0.3となるべきですが、浮動小数点の精度による誤差のため、結果は厳密には0.3ではなくなります。そのため、結果を直接0.3と比較すると、Falseが出力されます。
大きな数値の取り扱い
Pythonは非常に大きな数値も取り扱うことが可能ですが、大きな数値を操作すると、メモリ使用量が増えたり、計算速度が遅くなったりする可能性があります。
特に、大きな数値をべき乗する場合 (**
演算子の使用)、計算結果が非常に大きな数になるため注意が必要です。
a = 10 ** 1000 print(a) # 非常に大きな数が出力される
このコードは正常に動作しますが、非常に大きな数が出力され、計算に時間がかかる可能性があります。
整数と浮動小数点数の混在
Pythonでは、整数と浮動小数点数を混在させて計算することが可能ですが、その結果は浮動小数点数となります。
つまり、小数部分が0であっても、計算結果は浮動小数点数になります。これが望ましくない場合は、結果を整数に変換する(例えば、int(a / b)
)か、整数除算演算子 //
を使用する必要があります。
a = 5 b = 2 print(a / b) # 出力: 2.5 print(a // b) # 出力: 2 print(int(a / b)) # 出力: 2
5を2で割った結果は2.5ですが、整数除算演算子//
を使用するか、結果をint
関数で整数に変換することで、結果を整数にすることができます。
算術演算子の優先順位
Pythonでは、算術演算子は特定の優先順位で評価されます(例えば、乗算と除算は加算と減算より先に評価されます)。複雑な式を書く場合は、この優先順位を理解していることが重要です。
分かりやすくするために、必要に応じて( )を利用するなどの工夫が必要です。
a = 2 b = 3 c = 4 print(a + b * c) # 出力: 14 print((a + b) * c) # 出力: 20
a + b * c
は、算術演算子の優先順位により、b * c
が先に評価され、その結果とa
が加算されます。しかし、(a + b) * c
の場合、括弧内のa + b
が先に評価され、その結果がc
と乗算されます。このように、優先順位を明示的に変更するためには括弧を使用します。
Python:算術演算子のまとめ
始めてPythonを勉強するのは結構難しいですよね。
でもその悩みを抱えているのは一人じゃありません。全てのPython使いが同じ道を進んできました。
Pythonをはじめとするプログラミングスキルを武器に、時間と場所に捉われない自由な生き方を目指してみませんか?今すぐ行動したい方は以下の記事をチェック!
読者料典 Python入門:学習カリキュラム ←こちらから!