演算の優先順位について学んでいきましょう。
算数では、足し算よりも先に掛け算を計算しますよね。
プログラミングもこれと同じです。
例えば、このようなコードを実行してみます。
コードprint(5 + 10 * 10)
アウトプット105
コードでは、先に5 + 10と書かれていますが、実際には後に書かれている10 * 10という計算が行われました。
数学の計算と同じルールなので分かりやすいですよね。
では、なぜこのような計算結果になるのでしょうか?
その答えは、Pythonには演算子に優先順位が付けられているからです。言い方を変えると、人が理解しやすいように優先順位を付けた。ということもできます。
優先順位の一覧表
ここで、優先順位の表を見てみましょう。上に行くほど演算子の優先順位が高いです。
演算子 | 説明 |
** | 累乗 |
*、/、//、% | 掛け算、小数点型の割り算、整数型の割り算、割った余り |
+、- | 足し算、引き算 |
in、not、in、is、is not、<、<=、>、>=、!=、== | 比較演算子 |
not | 否定(TrueをFalseに、FalseをTrueに) |
and | 且つ |
or | 又は |
この表を見ると、掛け算は足し算よりも優先順位が高いことが分かります。先程の計算で掛け算が先に計算されたのは、この優先順位の表に従って演算が行われたからです。
実際には
この表を覚えるのも一つの方法ですが、Pythonのコードは読む人が読みやすいコードにすることが大切です。
そういった意味では、5 + 10 * 10という式は、5 + ( 10 * 10 ) と()を使ってどの計算を先にするのかを明示してあげることが親切です。
実際のPythonのコードも、上記のように()が使われることが多いです。
具体例でイメージしてみる
表を見ただけではあまりイメージがわかないと思いますので、いくつか例を見てみながら、演算をしてみましょう。
コードa = 10 * 3 + 2 ** 3 / 4 < 30 - 2
print(a)
アウトプットFalse
順番に整理していきましょう。
補足(1) 2**3が計算されます。
→10 * 3 + 8 / 4 < 30 - 2
(2) 10*3と8/4が計算されます。
→30 + 2 < 30 - 2
(3) 30+2と30-2が計算されます。
→32 < 28
(4) 比較演算子で比較されます。
→False
順番に計算していくと、イメージがわきやすくなるのではないかと思います。
次の例です。
コードa = not True and False or False and not False or True
print(a)
補足(1) not演算子が使われます。
→False and False or False and True or True
(2) and演算子が使われます。
→False or False or True
(3) or演算子が使われます。
True
演算子が沢山でてきても、一つずつ整理していけば怖くありません。
演算の優先順位のまとめ
(1) 基本的には数学と同じような優先順位付けがされている
(2) 実際のコーディングでは、()を使って分かりやすく書くことが大切
演算の優先順位を学んだ後は
条件の判定に使われるTrue・False・Noneについてより詳しく理解していきましょう。