ここでは算術演算子について学ぶ。
基本的な演算
足し算についてはすでに 変数 で見た。
四則演算はそれぞれ
-
+
-
-
-
*
(かけ算) -
/
(割り算)
で計算できる。
また、
-
//
(切り捨て除算) -
%
(剰余)
という演算子もある。 例えば、
print(5 // 3)
は 5 を 3 で割ったときの商を切り捨てした 1 が表示される。
print(5 % 3)
は 5 を 3 で割ったときの余りである 2 が表示される。
べき乗は
-
**
である (**
がない言語や、別の記号を使う言語もある)。
例えば、
print(2 ** 3)
は 2 の 3 乗 (つまり $2^3$) である 8 が表示される。
なお、 -2 ** 4
は $-2$ の $4$ 乗であるのか $2$ を $4$ 乗したものに $-1$ を掛けたものなのかがあいまいなので、
このような書きかたは避けた方が良い。
この場合は (-2) ** 4
($= 16$) か -(2 ** 4)
($=-16$)のように書くべきである。
*
や **
はプログラム特有の書き方であるから、レポートなどの文書やグラフ等ではこれらの記号を使うべきではない
紹介した 7 つの演算子 +
, -
, *
, /
, //
, %
及び **
を使った計算を実際に実行してみよ。
例えば:
print(10 + 3)
print(10 - 3)
print(10 * 3)
print(10 / 3)
print(10 // 3)
print(10 % 3)
print(10 ** 3)
優先順位を変更・明示したい場合や、あいまいさを避けるために (
… )
を使うことができる。
ただし、このような目的では [
… ]
や {
… }
は使うことができない。
print(2 * (3 + 4))
print((2 * 3) + 4)
print((-2) ** 3)
一つめは $2 \times 3 + 4$ ではなく $2 \times (3 + 4)$ を計算したい場合、つまり加算を優先させたい場合の例である。
二つめは括弧なしで print(2 * 3 + 4)
と書くのと同等である。
つまり、この場合の括弧は不要であるが、あっても問題ない。
開きと閉じが対応していれば、余計な括弧を入れても良いという例である。
この例は自明であまり意味がないが、実際の場面では複雑な 条件式 を書く場合などに、
このような優先順位を明示するための(実際には不要な)括弧を書く場合がある。
三つめはすでに見た例である。
以下の計算結果を表示するプログラムを書け。
$$ \begin{align} & 5 + 3 \\ & 3 - 10 \\ & 20 - ( 3 \times 4 ) \\ & 5 \times (-3) \\ & 5 + \left\{ \frac{3}{4} \times (4 - 2) \right\} \\ & 2^{-3} \end{align} $$
変数を使った計算
計算結果を変数に代入したい場合は、数値の代わりに式を書けばよい。
a = 10 + 20
b = 50 / 3
変数を使った計算もできる。
a = 5
b = 3
print(a + b)
print(a - b)
print(a * b)
print(a / b)
print(a // b)
print(a % b)
print(a ** b)
変数と数値との計算ももちろん可能である。
a = 5
print(a + 3)
print(a - 3)
print(a * 3)
print(a / 3)
print(a // 3)
print(a % 3)
print(a ** 3)
新しい変数を作って、それに入れることもできる
a = 5
b = 3
calc1 = a + b
calc2 = a - b
calc3 = a * b
calc4 = a / b
calc5 = a // b
calc6 = a % b
calc7 = a ** b
print(calc1)
print(calc2)
print(calc3)
print(calc4)
print(calc5)
print(calc6)
print(calc7)
この辺は通常の数学とほぼ同様である。
変数を使った計算を実際にやってみよ。
代入演算子
=
は代入演算子 (名前は覚えなくてもよい) と呼ばれ、これも演算子として扱われる。
意味はすでに学んだ通りである。
さらに特別な演算子として、複合代入演算子がある (名前は覚えなくてもよい)。
a += 10
と書くと、 a = a + 10
の意味になる。
-
+=
-
-=
-
*=
-
/=
-
//=
-
%=
-
**=
がある。いずれも意味は自明であろう。
次のプログラムを実行するとどのようになるか考えよ。 その後、実際に実行して、予想通りだったか確認せよ。
a = 12
b = 10
a += 2
print(a)
a -= 3
print(a)
a *= 2
print(a)
a /= 10
print(a)
a += b
print(a, b)
文字列
既に変数でも述べたように、文字列にも +
が使え、これは連結を意味する。
+=
も使える。
文字列に対して -
は使えない。
文字列と数値に対して +
を使用するとエラーになる (例えば "abc" + 1
とは書けない)。
演算子の優先順位
詳細は割愛するが、以下を押さえておけばひとまずよいだろう。 要は数学の場合と大体同じである。
優先度が高いものから順に、
-
(
…)
-
**
-
*
,/
,//
,%
(//
や%
は割り算の一種と考えるとよい) -
+
,-
-
=
,+=
,-=
,*=
,/=
,//=
,%=
,**=
-
**
を除き、同じ優先度のものが並んでいる場合は、左側が優先。 例えば10 / 2 * 3
は左側にある
/
が優先されるので(10 / 2) * 3
と同じであり、10 / (2 * 3)
ではない -
**
が並んでいる場合は右側が優先。 例えばa ** b ** c
は
a ** (b ** c)
と等価である ((a ** b) ** c
ではない)。 ただしこの場合は、曖昧さや間違いを避けるために、常に(...)
を使うのが望ましい。
他にも色々ルールがあるのだが、まずはこれらのことを覚えておけば良いだろう。
まとめ
このページでは重要な算術演算子について学んだ
-
四則演算 (
+
,-
,*
,/
), 切り捨て除算 (//
), 剰余 (%
), べき乗 (**
) -
複合代入演算子 (
+=
,-=
,*=
,/=
,//=
,%=
,**=
) -
演算子には優先順位がある。 優先順位を変えたいときは
(
…)
が使える (通常の数学とほぼ同一)