『Python3入門』演算子の種類と使い方

Python プログラミング Python

値は変数への代入、比較、計算を行うためのにはいろいろな演算子を使います。この記事では演算子の種類と使い方を紹介していきます。

演算子の種類

Pythonでは以下の演算子を主に使用してプログラムを記述していきます。

 演算子 説明
 代入演算子 右辺の値を左辺の変数に代入
 算術演算子(代数演算子) 四則演算や除算、剰余
 文字列演算子 文字列の連結、繰り返し
 比較演算子 複数の値を比較
 論理演算子(ブール演算子) 複数のブール値を比較
 ビット演算子 ビット単位の演算
 累算代入演算子 二項演算と代入演算子を組み合わせた演算子

 

代入演算子

代入演算子は、「 = 」になります。これは右辺の値を評価し、その結果を左辺の変数に代入します。

Python 演算子の種類と使い方- 01

上記の式は、右辺の10を左辺の変数a に代入します。次に右辺の変数a の値と2を足した結果を、左辺の変数b に代入しています。

 

算術演算子

算術演算子には以下の演算子があります。

 演算子 説明
 + 加算
 – 減算
 * 乗算
 ** 累乗(べき乗)
 / 除算(割り算)
 // 整数除算(切り捨て除算)
 % 剰余(余り)

 

加算

Python 演算子の種類と使い方- 02

処理の流れを見てみましょう。

10と5を足した結果として15が返ります。

結果の値を変数a に代入します。

変数a の値と5を足した結果として20が返ります。

結果の値を変数b に代入します。

 

減算

Python 演算子の種類と使い方- 03

処理の流れを見てみましょう。

10と2を引いた結果として8が返ります。

結果の値を変数a に代入します。

変数a の値から3を引いた結果として5が返ります。

結果の値を変数b に代入します。

 

乗算

Python 演算子の種類と使い方- 04

処理の流れを見てみましょう。

10に2を掛けた結果として20が返ります。

結果の値を変数a に代入します。

変数a の値と5を掛けた結果として64が返ります。

結果の値を変数b に代入します。

 

累乗(べき乗)

Python 演算子の種類と使い方- 05

処理の流れを見てみましょう。

2の3乗の結果として8が返ります。

結果の値を変数a に代入します。

変数a の値の5乗の結果として64が返ります。

結果の値を変数b に代入します。

 

除算(割り算)

除算を行った場合、結果は実数で返るので、float型になりますint型の整数どうしを除算して割り切れる場合でもfloat型になるのことを覚えておきましょう。

Python 演算子の種類と使い方- 06

処理の流れを見てみましょう。

整数値の20から2を割った結果として実数の10.0が返ります

結果の値をfloat型の変数a に代入します。

変数a の値から3を割った結果として実数の 3.3333333333333335 が返ります。

結果の値をfloat型の変数b に代入します。

 

整数除算(切り捨て除算)

整数除算は、割り算で求められる商の部分が返ります

簡単に説明すると、割り算で整数として割れるまでの値が商。例えば 20÷3の場合、商は「6(3×6=18)になり、20から商を引いた値の「2」を余りと言います。

除算と違い演算結果は整数で返るため、int型になります。

Python 演算子の種類と使い方- 07

処理の流れを見てみましょう。

整数値の20から3を割った結果として商の値6が返ります。商の値なので整数(int型)になります。

結果の値をint型の変数a に代入します。

変数a の値から2を割った結果として商の値3が返ります。

結果の値をint型の変数b に代入します。

 

剰余(余り)

剰余は、割り算で求められる余りの部分が返ります

簡単に説明すると、割り算で整数として割って残った値が余り。例えば 20÷3の場合、商は「6」(3×6=18)になり、20から商を引いた値の「2」を余りと言います。

除算と違い演算結果は整数で返るため、int型になります。

Python 演算子の種類と使い方- 08

処理の流れを見てみましょう。

整数値の20から3を割った結果として余りの値2が返ります。余りは整数(int型)になります。

結果の値をint型の変数a に代入します。

変数a の値から2を割った結果として余りは無いので0が返ります。

結果の値をint型の変数b に代入します。

 

文字列演算子

文字列と文字列を連結させたり、繰り返す場合に使います。

 演算子 説明
 + 文字列の連結
 * 文字列の繰り返し

 

文字列の連結

Python 演算子の種類と使い方- 09

文字列型の変数a の値と文字列リテラルのスペースが連結され、さらに文字列型の変数b の値を連結しています。

 

文字列の繰り返し

Python 演算子の種類と使い方- 10

文字列型の変数a の値を3回繰り返して連結した値を変数b に代入しています。

 

比較演算子

比較演算子は、2つの値を比較して真偽値(bool型の値)を返す式になります。

比較に使った式が正しい場合はTrue(真)を、正しくない場合はFalse(偽)を返します。

比較演算子は制御構文で多用されるので覚えておきましょう。

次の種類の比較演算子があります。わかりやすくAとBの値を比較して記載します。

 演算子 説明
 A == B AとBは等しい
 A != B AとBは等しくない
 A < B AはBより小さい(未満)
 A > B AはBより大きい(超える、超過)
 A <= B AはBと等しいか小さい(以下)
 A >= B AはBと等しいか大きい(以上)
 A in B AがBに含まれる(A、B共に文字列、またはBはリストやタプル)
 A not in B AがBに含まない(A、B共に文字列、またはBはリストやタプル)

比較演算子については、いくつか使用例を挙げておきます。

Python 演算子の種類と使い方- 11

 

条件分岐のif文の式に使う例も挙げておきます。

Python 演算子の種類と使い方- 12

変数num のリストの値に10が含まれるかを比較しています。変数num には10が含まれないのでFalseが返ります。

 

論理演算子(ブール演算子)

論理演算子は、複数の比較演算を組み合わせて複雑な条件を行う場合に使います

例えば、「aの値は5以上10以下」という比較演算は「a >= 5」であり「a <= 10」という2つの比較演算で評価できます。この「であり」が論理演算子にあたり、式で書くと「a >= 5 and a <= 10」となります。この論理演算子を使うことで複数の条件を1行で比較することが出来ます。

論理演算子は比較演算の評価結果である真偽値での評価になります。

次の種類の論理演算子があります。わかりやすくAとBの真偽値を比較して記載します。

 論理演算子 説明
 A and B 論理積(AとBが真の場合)
 A or B 論理和(AかBのどちらかが真の場合)
 not A 否定(Aが真の場合は偽、偽の場合は真)

 

論理積

論理積は、AとBの両方が真ならば真、そうではない場合は偽が返ります

最初の評価が偽であった場合は、結果がすでに出ているので後続の評価は実行されません

Python 演算子の種類と使い方- 13

 

条件分岐であるif文の式に使う例も挙げておきます。

Python 演算子の種類と使い方- 14

上記の例では論理演算子を複数使っています。

if文の式を見てみましょう。

まずは、左の括弧内で論理積を行った結果としてTrueが返ります。

次に右の括弧内で論理積を行った結果としてFalseが返ります。

最後に先ほどの評価結果である真偽値で論理積(True and False)を行い、評価の結果としてFalseを返す流れになります。

 

論理和

論理和は、AとBのどちらかが真ならば真、両方共に偽の場合は偽を返します

最初の評価が真であった場合は、結果がすでに出ているので後続の評価は実行されません

Python 演算子の種類と使い方- 15

 

条件分岐であるif文の式に使う例も挙げておきます。

Python 演算子の種類と使い方- 16

上記の例では論理演算子を複数使っています。

左側と右側の括弧内の式で返った真偽値で論理和を行っています。

まず左の括弧内で論理積を行った結果としてTrueが返ります。

今回はこの時点で結果が出たので後続の評価を行わないません。論理和はどちらかが真の場合、真を返すのでしたね。なので結果として左側の括弧内の評価のみとなとなり、結果としてTrueを返します。

 

否定

否定は、Aの評価が真の場合は偽、偽の場合は真を返します

Python 演算子の種類と使い方- 17

 

条件分岐であるif文の式に使う例も挙げておきます。

Python 演算子の種類と使い方- 18

例として初期化がされていない場合に初期化を行うと言った処理を行っています。

変数init_flag の値がFalseなので、not(否定)によりTrueが返り、if文の処理を実行します。

 

ビット演算子

ビット演算子は、「2進数の各ビットの値を操作する演算子」です。数値はコンピュータの内部では2進数(1と0)のデータとして扱われます。例えば「10」という整数値は2進数では「1010」になります。この2進数の各桁をビット(bit)といい、右から1ビット、右から2番目が2ビットとなります。このビットの値を操作するのがビット演算子になります。

また、2進数を表すために値の先頭に0bを付けます。「0b1010」こんな感じです。この0bのことをプレフィックス(接頭辞)と呼び、他にも8進数は0o、16進数は0x、普段目にする10進数には付けません。

次の種類のビット演算子があります。わかりやすくAとBの真偽値を比較して記載します。

 演算子 説明
 & ビット積
 | ビット和
 ^ 排他的論理和(XOR)
 ~ 否定(NOT)
 << 左シフト
 >> 右シフト

 

ビット積

ビット積は、各ビットを比較して両方共に1なら1、どちらか片方でも0の場合は0を返します

フラグをビット管理している場合、各ビットがフラグとしてON(1)になっているかを調べたり、OFF(0)に切り替える場合などに使うことがあります。

Python 演算子の種類と使い方- 19

上記はビットの動きがわかりやすいように2進数で確認しています。

bin関数の引数で計算をすることで、結果を2進数で返しています。

この演算では0b1010 の4ビット目がONになっているかを0b1000 とビット積を行うことで評価しています。4ビット目は両方1なので1が返ります。なのでONであることがわかります。

 

次に、フラグを全てOFFに初期化したい場合は以下のようにビット積を行います。

Python 演算子の種類と使い方- 20

こうすることで必ず片方が0になるので、全てが0になります。

 

ビット和

ビット和は、各ビットを比較してどちらか片方でも1なら1、両方共0の場合は0を返します

フラグをビット管理している場合、フラグをONにするときなどに使います。

Python 演算子の種類と使い方- 21

上記は右辺の値で1ビット目をONに切り替えています。

 

排他的論理和(XOR)

排他的論理和は、各ビットを比較してどちか片方だけ1なら1、両方共0または1の場合は0を返します

2つフラグを比較して、どのビットが違うかを調べるときなどに使います。

Python 演算子の種類と使い方- 22

上記の排他的論理和によって、お互いの1ビット目と2ビット目が異なることがわかります。

 

ビット反転(NOT)

ビット反転は、全てのビットの状態を逆転させます。ビットが1なら0、ビットが0なら1を返します。

しかし、Pythonにおいては反転ではなく、 -(x + 1) で求めることができ、整数にのみに適用できます

Python 3.7.4rc2 ドキュメント : 6. 式 (expression) - 単項算術演算とビット単位演算

Python 演算子の種類と使い方- 23

 

左シフト

左シフトは、左辺の値を右辺で指定した数だけ左へシフトさせて、移動によって空いたビットは0で埋まります。2ビット左シフトで4倍、4ビット左シフトで8倍と増えていきます。

Python 演算子の種類と使い方- 24

 

右シフト

右シフトは、左辺の値を右辺で指定した数だけ右へシフトさせて、移動によって空いたビットは0で埋まります。シフトによって1ビット目からはみ出した分は消えます。このはみ出た分をオーバーフローと呼びます

Python 演算子の種類と使い方- 25

 

累算代入演算子

累算代入演算子は、二項演算子と代入演算子を組み合わせた演算子になります。

例えば、「a = a + 1」のような式があった場合に「a += 1」と表現でき、結果は同じになります。

演算と代入の対象とする変数が同じ場合に累算代入演算子を利用することでスッキリした式になります。

次の種類の累算代入演算子があります。

 演算子 二項演算の場合
 a += 式 a = a + 式
 a -= 式 a = a - 式
 a *= 式 a = a * 式
 a **= 式 a = a ** 式
 a /= 式 a = a / 式
 a //= 式 a = a // 式
 a %= 式 a = a % 式
 a >>= 式 a = a >> 式
 a <<= 式 a = a << 式
 a &= 式 a = a & 式
 a |= 式 a = a | 式
 a ^= 式 a = a ^ 式

累算代入演算子については、すでに演算子の使い方として解説してあるので、ここでは解説しません。

 

まとめ

演算子の種類は多いですが、使っていくうちに覚えていきます。全てを覚えていなくても、こんな演算子があったなぁ程度で繰り返し確認していくうちに身に付きます。

 

タイトルとURLをコピーしました