初心者でも比較的扱いやすいということもあり、Pythonと呼ばれるプログラミング言語は注目を集めています。シンプルでわかりやすい一方で、今後さらに重視されるであろうAIのプログラミング言語としても活用できるからです。
そのPythonには、計算するときに使用する記号である「演算子」と呼ばれるものが様々あります。今回は、Pythonにおける主要な演算子について紹介します。
演算子の必要性
演算子とは、足し算や割り算などの計算で使用する記号のことです。+や÷などのプログラムバージョンと考えてください。
何ができる?
Pythonの演算子をマスターすれば、計算処理ができるだけではありません。演算子を組み合わせることで、さまざまな設定が可能になります。
たとえば計算結果によって、処理の割り振りが可能です。また結果が10以下になったらA、10より大きくなったらになったらBの処理をするといったオーダーができます。
コンピューターへのマニュアルの役割
プログラミングを学習するにあたって、演算子は避けては通れない問題と言えます。というのも、コンピューターに対して、どのような動作すればよいかのマニュアルになるものだからです。プログラミングをする際、非常に複雑な処理が伴うものです。しかし細かく分解していくと、足し算や割り算などのシンプルな計算式によって構成されています。
+-×÷の四則演算はプログラミングの土台です。基礎ができていなければ、応用もできなくなります。Pythonをマスターし、実際に利用できるようになるためには演算子を使った計算を正しく理解しておく必要があるのです。
Pythonの代数演算子
Pythonの演算子をマスターするために、まずは代数演算子を理解する必要があります。いわゆる足し算や引き算、割り算、掛け算のことです。
基本的な使い方
足し算・引き算・割り算・掛け算の演算子は、それぞれ「+」「-」「/」「*」です。たとえばprint(1 + 1)は「1+1」の計算をせよというオーダーです。もちろん結果は2です。
応用的な使い方
割り算の場合、余りの出る事例もあります。たとえばprint(7 / 3)という記述をすれば、結果は2.3333333…という形になるでしょう。また、本来割り算で0は使用しないでしょう。もしprint(4 / 0)と記述した場合、「ZeroDivisionError」というエラーメッセージが表示されるはずです。
小数点以下は必要ないと思ったら、print(7 % 3)と記述してください。すると結果が2とスッキリします。似たような演算子として//もあります。これは切り捨ての伴う割り算のことです。例えばprint(4 // 3)と記述すると、小数点以下の「33333…」の部分は切り捨て扱いです。よって結果は1と出力されるはずです。
また**と入力すると、これは累乗を意味する演算子です。たとえばprint(5 ** 2)と入力すると、5の二乗、すなわち25という結果が出力されるわけです。print(0 * 0)と入力した場合、結果は1です。
比較演算子
数値などを比較したいときに使用する演算子のことです。以下で紹介する演算子で記述した場合、「True」もしくは「False」のいずれかで出力されます。
同値を示す演算子
もし、あるもの2つが同じ値を示している場合には==という演算子を使用します。一方、2つの数値が異なることを意味する場合、!=という演算子を記述してください。
具体的な事例で見ましょう。たとえば、print(3 == 3)と入力した場合、Trueという出力結果が表示されるはずです。一方、print(3 != 3)と入力した場合、誤りを示すFalseと出力結果が表示されるでしょう。
大小を示す演算子
大小を示す演算子は、従来の計算記号と一緒で「<」や「>」で表現します。print(8 > 6)と記述すれば、正しいのでTrueという出力結果が表示されます。一方、print(10 < 5)と入力した場合、これは間違っているのでFalseという出力結果が現れるでしょう。
is演算子
is演算子を使用すると、その間にあるものが一緒であることを意味する演算子です。ただし「==」とは記述方法によっては異なる結果が出ることもあるでしょう。
具体的な事例で見ていきましょう。a = [1,3,5]とb = [1,3,5]という数列があったとします。数列そのものは一緒かもしれません。
しかし、たとえばprint(id(a))とprint(id(b))という定義を行うと、数列は一緒でもIDは異なります。この場合、print(a == b)と記述するとTrueと出力されます。一方、print(a is b)と入力した場合、IDが異なるのでFalseという結果が出力されるのです。
in演算子
in演算子とは、とある要素が含まれているかどうかを示す演算子のことです。たとえばa = [2,4,6]と呼ばれる数列があったとします。この時、print(4 in a)と記述した場合、たしかに4はaの数列に含まれているのでTrueと出ます。一方、print(3 in a)と記述すると、3は含まれていないのでFalseと出力されます。
逆に特定の要素が含まれていないかを示す演算子として、not inがあります。上の事例の場合、print(3 not in a)と記述すれば、3は含まれていないのでTrueと逆の結果になるでしょう。
論理演算子
文字通り、論理計算のために使用する演算子です。こちらの演算子で記述すると、出力はTrueもしくはFalseで表示されるでしょう。
and
こちらの演算子は、2つの要素がいずれもTrueになるかどうかを表示するための演算子です。たとえば、print(True and True)と入力すれば、結果はTrueになるでしょう。ところが、print(True and False)と記述すれば、両方Trueではないので結果はFalseです。
or
orの場合、2つの要素のうちいずれかTrueであれば、Trueという表示になります。よって、先ほど紹介したprint(True or False)と入力すれば、andの場合Falseですが、orであればTrueという結果になるでしょう。
not
こちらは、逆の結果を出力させる場合に使用する演算子です。つまりprint(not True)と記述すれば、結果は逆のFalseになるでしょう。
ビット演算子
ビットとして取り扱いたいときに使用する演算子です。この演算子の使い方が複雑でよくわからなくなる人も少なくないようです。ビット演算子は2進数もしくは16進数で見たほうがわかりやすいでしょう。
ビット反転
ビット反転は「~」と呼ばれる演算子を使用します。こちらは、符号が逆になって数値+1にせよというオーダーになります。例えば、print(~3)という記述をした場合、出力は-4です。
論理積
「&」という演算子を使用すると、論理積を出力できます。ここでは#値は2進法で考えた場合で紹介します。aが7、bが14と設定します。2進法で考えた場合、aが#0b0111、bが#0b1110と仮定しましょう。
これで、print(a & b)#0b110と入力した場合、出力結果は6になります。
論理和
「|」という演算子を使用した場合、論理和の出力を指示できます。こちらもaが7でbが14と設定した場合のことを考えましょう。#値は2進法を採用します。この場合print(a | b)#0b1111と記述した場合、出力結果は15になります。
Pythonの演算子と優先順位
Pythonの場合、上で紹介した演算子単独だけでなく、いくつかを組み合わせて計算処理することも可能です。しかし、複数の演算子を組み合わせる場合、優先順位が存在するので注意しましょう。
代数演算子の場合
代数演算子の場合、算数の計算と基本的に一緒なので初心者でもわかりやすいでしょう。たとえばprint(3 + 5 / 5)と記述したとします。すると、まず割り算が優先されます。そして次に足し算の処理をするので、結果は4になります。割り算のほかにも掛け算が足し算や引き算よりも優先されます。
もし、足し算や引き算を優先させたい場合、普通の算数と同様にカッコを使用します。先ほどの事例で見るとprint((3 + 5) / 5)と記述すれば、足し算の方が優先されます。よって出力結果は1.6となるはずです。
その他の演算子の優先順位について
Pythonではいろいろな演算子があります。演算子には優先順位があるので、覚えておきましょう。ここで紹介した演算子の中では、代数演算子が優先されます。次にビット演算子、比較演算子の順番で優先される形です。ただしカッコを使用した場合、カッコで囲まれた部分の処理が真っ先に行われます。
具体的な事例で見ていきましょう。print(1 + 5 & 3 + 7)と記述したと仮定します。この場合、代数演算子による計算が優先されます。すると実質的には(6 & 10)という演算を実行せよという記述になるわけです。
6と10のビット演算になるわけで、2進法の論理積の処理が行われます。つまり、6(0110)と10(1010)の論理積の計算となり、2(0010)になって出力結果は2になるわけです。
まとめ
Pythonを活用するためには、演算子はできるだけ覚えておくと良いでしょう。上で紹介した記号とその意味を理解すれば、さまざまな演算上の処理が可能になります。複数の要素を組み合わせることで、より複雑な処理をスピーディに進められるでしょう。
また演算子の種類によって、優先されるものが違ってくる点も把握しておきましょう。この順番を正しく理解していないと、思うような結果を導き出せない可能性もあります。またカッコを使用することで、演算子の優先順位を変えることも可能なので必要に応じて活用してみましょう。