整数値も浮動小数点数値も数値であるから、加減乗除などの計算ができる。既に見た通り、加算を行うには「+」記号を、減算を行うには「-」記号を使う。これらの記号のことを「算術演算子」と呼ぶこともある。前回も述べたが、「演算子」とは「何かの計算を行うための記号類」のことで、その中でも四則演算(加減乗除)や累乗の計算など算術計算を行うための演算子ということで、「算術演算子」と呼ばれる。また「+」記号を「加算演算子」と、「-」記号を「減算演算子」とさらに細かく呼ぶこともある。また、演算子の操作対象となる値のことを「被演算子」と呼ぶことがある。「1 + 2」なら「1」と「2」の双方が被演算子だ。
加算は「+」演算子で、減算は「-」演算子で行うことは分かった。では、乗算と除算はどうだろう。加算と減算も含めて、Pythonでは算術演算などを行うための演算子として以下が使える。
演算子 | 意味 |
---|---|
+ | 加算 |
- | 減算 |
* | 乗算 |
/ | 除算(実数除算) |
// | 除算(整数除算の商) |
% | 除算(整数除算の余り) |
** | 累乗 |
数値演算に使える演算子 |
乗算には「×」記号ではなく「*」記号(乗算演算子、アスタリスク)を使う。除算を行う演算子は3つある。1つは除算結果が実数値になるもので、残りの2つは整数除算を行い、その商と余り(剰余)を求めるものだ。加えて、累乗を求める「**」演算子もPythonには用意されている。以下では幾つか例を見ていこう。
乗算には「X」ではなく「*」を使用する。
「/」(スラッシュ)を使った除算の結果は実数値となる。割り切れる場合でも実数値になっている点に注意しよう。
「13÷5=2…余り3」のように、整数除算の商を求めるには「/」を2つ連ねた「//」を使用する。
「13÷5=2…余り3」の「余り3」つまり、整数除算の剰余(余り)を求めるには「%」を使用する。
なお、Python 2では「整数同士」を「/」演算子で除算すると、Python 3の「//」演算子を使った場合と同様に「整数除算」が行われ、商がその結果となる(浮動小数点数と整数の除算では浮動小数点数が演算結果となる)。以前のバージョンのPythonにも触れることがあるのであれば、「/」演算子の挙動の違いには注意しよう。
実数の整数除算も可能だ。例えば、「17.5÷3.7=4…余り2.7」のような計算もできる。
気を付けたいのは、上の画像の2つ目のセルの実行結果だ。キレイに「2.7」と表示されずに、「2.6999999999999993」となっている。先ほども述べたが、浮動小数点演算ではこのように微小な誤差が発生することがある。「9」を数えてみると、14個並んでいるので、これはほぼ2.7と考えてよいのだが、このようなことも起きることは覚えておこう。
また、Pythonには「累乗演算子」というものもある。これは「210」(2の10乗)のような計算をするための演算子だ。
ここまでに説明した各演算は、整数と浮動小数点数を意識することなく行える。整数値と浮動小数点数値が被演算子に含まれている場合、整数値が浮動小数点数値として見なされるようになる。
その一方で、整数から浮動小数点へ、またはその逆方向の変換も可能だ。これにはint関数とfloat関数を使用する。int関数は引数に受け取った数値オブジェクト(または文字列オブジェクト)を基に整数を返す。float関数は同様に浮動小数点数を返す。こうした操作のことを「型変換」や「キャスト」と呼ぶ。以下に例を示す。
最初の例は浮動小数点数の「2.8」を整数に、次の例は整数の「2」を浮動小数点数に、3番目は文字列の「2」を整数に、4番目の例は文字列の「2.8」を浮動小数点数に変換している。最後の例は文字列の「2.8」を整数に変換しようとしているが、失敗してエラーとなっているところだ。int関数では、文字列として表現されている浮動小数点数を整数には変換できないことは覚えておこう。
「2×3−1」はどのように計算をするのだったろうか。「最初に掛け算をしてから、次に引き算をする」と算数ではならったはずだ。つまり、この例なら「2×3=6」の計算をしてから、次に「6−1=5」として結果を得る。Pythonでも同様に、演算記号が出てきたときに、どこから計算をするかが決まっている。これを「演算子の優先順位」などと呼ぶ。ここまでに出てきた演算子(とその他の演算子や関数)の優先順位を高い順に以下の表にまとめておく。
優先順位 | 演算子 | 説明 |
---|---|---|
1 | int関数、float関数 | 整数/浮動小数点数の変換 |
2 | ** | 累乗(ただし、右側の値に単項演算子の「+」「-」があればそれらが先に計算される) |
3 | -(単項)、+(単項) | 単項演算子の「-」は被演算子の符号を反転 単項演算子の「+」は何もしない |
4 | /、//、%、* | 乗除算 |
5 | +、- | 加減算 |
演算子や関数の優先順位(一部) |
優先順位が最も高いものにある「-(単項)」と「+(単項)」というのは、「単項演算子」と呼ばれる演算子で、前者は被演算子となる値(オブジェクト)の正負の符号を反転するものだ。例えば、「1」という数値に単項演算子「-」を付けると「-1」となる。後者は実質的には何もしない。一方、加算を行う「+」演算子など、2つの項が必要になる演算子のことを「二項演算子」と呼ぶこともある。
もう1つ。演算子の優先順位を変更するにはかっこ「()」を使える。上の例「2×3−1」が「2×(3−1)」ならかっこの中を最初に計算してから、次に掛け算の計算をしたのと同様だ。このような演算子の優先順位とかっこによる優先順位の変更は、われわれが普段慣れ親しんだ計算と同じ計算ができるように定められているので、最初のうちはあまり気にする必要はないだろう。
以下に幾つか例を示す。
最初の例は「2×3−1」をPython風に記述したもの。次の例は、かっこを使って演算の順番を変更したものだ。3番目の例は「-1」自体にかっこを付けて、その値を求めたところ(もちろんそれは「-1」だ)に、単項演算子の「-」で符号を反転している。そのため、結果は正数の「1」となっている。数値リテラルではあまり意味はないが、変数に値を代入しているときに、その正負を反転させるときに単項演算子「-」はよく使う。4番目の例は、3番目の例を利用して、最終的には「2 ** 1」(2の1乗)を計算している。最後の例はさらにint関数を使って同様な計算を行っている。
今回は整数と浮動小数点数というPythonで扱える代表的な数値を取り上げた。Pythonでは、これらに加えて複素数、分数(有理数)なども扱える(後者は標準ライブラリのfractionsモジュールを使用)。ただし、本連載ではこれらは扱わない。興味のある方は公式サイトで公開されている「数値型 int, float, complex」や「fractions --- 有理数」などを参照されたい。
次回はPythonの変数について説明をする。最後に今回の説明したことを以下にまとめておこう。
「Python入門」
Copyright© Digital Advantage Corp. All Rights Reserved.