ここでは算術演算子について学ぶ。
基本的な演算
足し算についてはすでに 変数 で見た。
四則演算はそれぞれ
-
+ -
- -
*(かけ算) -
/(割り算)
で計算できる。
また、
-
//(切り捨て除算) -
%(剰余)
という演算子もある。 例えば、
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ではない)。 ただしこの場合は、曖昧さや間違いを避けるために、常に(...)を使うのが望ましい。
他にも色々ルールがあるのだが、まずはこれらのことを覚えておけば良いだろう。
まとめ
このページでは重要な算術演算子について学んだ
-
四則演算 (
+,-,*,/), 切り捨て除算 (//), 剰余 (%), べき乗 (**) -
複合代入演算子 (
+=,-=,*=,/=,//=,%=,**=) -
演算子には優先順位がある。 優先順位を変えたいときは
(…)が使える (通常の数学とほぼ同一)