Programmierkurs
für Naturwissenschaftler/innen

算術演算子

ここでは算術演算子について学ぶ。

基本的な演算

足し算についてはすでに 変数 で見た。

四則演算はそれぞれ

  • +

  • -

  • * (かけ算)

  • / (割り算)

で計算できる。

また、

  • // (切り捨て除算)

  • % (剰余)

という演算子もある。 例えば、

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 ではない)。 ただしこの場合は、曖昧さや間違いを避けるために、常に (...) を使うのが望ましい。

他にも色々ルールがあるのだが、まずはこれらのことを覚えておけば良いだろう。

まとめ

このページでは重要な算術演算子について学んだ

  • 四則演算 (+, -, *, /), 切り捨て除算 (//), 剰余 (%), べき乗 (**)

  • 複合代入演算子 (+=, -=, *=, /=, //=, %=, **=)

  • 演算子には優先順位がある。 優先順位を変えたいときは () が使える (通常の数学とほぼ同一)