演算は、平たく言うと、四則演算、比較演算、論理演算などの計算機能のことです。プログラミングでは、演算子という記号を用いて、この計算処理を行います。
そこで、ここでは、Pythonの
- 数値演算子
- 文字列演算子
- 比較演算子
- 論理演算子
- ビット演算子
をそれぞれ解説します。
演算子は、頻繁に使うものなので、ぜひ押さえておきましょう。
なお、変数の代入の際に使う複合代入演算子については、「Pythonの変数の基礎知識」で解説していますので、ご参照ください。
1. Pythonの数値演算子
1.1. 数値演算子一覧
数値演算子は以下の通りです。
演算子 | 例 | 説明 |
+ | a + b | 足し算 |
– | a – b | 引き算 |
* | a*b | 掛け算 |
/ | a/b | 割り算 |
// | a//b | aをbで割った商の整数値 |
% | a%b | aをbで割った時の割り切れなかった余り |
** | a**n | aをn回掛けた数(べき乗) |
実際に見ていきましょう。
1.2. 数値演算子の使い方
まずは足し算です。
10 + 3
引き算です。
10 - 3
掛け算です。特に難しいことはありませんね。
10*3
割り算です。
10/3
//演算子は商の整数値です。
10//3
商の余り(剰余)です。
10%3
べき乗です。
10**3
1.3. Python演算子の優先順位
計算の順番は小学校の算数と同じです。
10 + 3 * 5 -2
計算の優先順位をつけるには括弧を使います。
(10 + 3) * (5 -2)
簡単ですね。
2. Pythonの文字列演算子
続いて文字列の演算子です。
2.1. 文字列演算子一覧
演算子 | 例 | 説明 |
+ | “a” + “b” | 文字列”a”と”b”を連結して、文字列”ab”になる |
* | “abc”*n | 文字列”abc”をn回繰り返す |
確認していきましょう。
2.2. 文字列演算子の使い方
2.2.1. 文字列の結合
+ 演算子を使うと、2つの文字列を連結することができます。
name = "山田" + "さん"
name
変数に文字列を指定して、それぞれの変数を連結することもできます。
a = "Pineapple"
b = "Pen"
c = "Apple"
d = "Pen"
a + b + c + d
2.2.2. 文字列と数字を連結するにはstr()を使う
文字列と数字を連結する時は注意が必要です。普通に連結すると、以下のように Type Error が出ます。
price = 2500 + "円"
このタイプエラーが出る原因は、文字列と、文字列ではない数値が混同していることにあります。これを解決するには、str()関数を使って、数値を文字列化することが必要です。
以下をご覧ください。
price = str(2500) + "円"
price
str()関数を利用すると、以下のような計算式の文字列を作ることができます。
tanka = 80
kosuu = 3
price = str(tanka*kosuu) + "円"
price
2.2.3. 文字列の繰り返し
* 演算子を使うと、文字列を指定回数繰り返すことができます。
"a" * 3
複数の文字列でも繰り返しを作ることができます。
"abc" * 3
繰り返し文字を使うと、以下のように簡易的な棒グラフなどを素早く作ることができます。
symbol = "*"
print("東京", symbol * 12)
print("大阪", symbol * 6)
3. Pythonの比較演算子
比較演算子とは a と b の値は等しいか、 a が b より大きいか小さいかといった比較を行う時に使います。
3.1. 比較演算子の一覧
以下が一覧です。
演算子 | 例 | 説明 |
== | a == b は正ではない | 2つの値がイコールの時に「正」 |
!= | a != b は正 | 2つの値がイコールでない時に「正」 |
<> | a <> b は正 | 同上(注1) |
> | a > b は正ではない | 左の値が右の値より大きい時に「正」 |
< | a < b は正 | 左の値が右の値より小さい時に「正」 |
>= | a >= b は正ではない | 左の値が右の値以上の時に「正」 |
<= | a <= b は正 | 左の値が右の値以下の時に「正」 |
is | a is b は正ではない | 2つのオブジェクトが同一の時に「正」 |
is not | a is not b は正 | 2つのオブジェクトが同一でない時に「正」 |
注1:<>は時代遅れの書き方のため新しいコードでは != を使うこと。
3.2. 比較演算子の使い方
Pythonの比較演算子では、比較結果は True か False で表示されます。
以下の例では、a(3) と b(5) は等しくないので、 a == b は False です。
a = 3
b = 5
c = 8
a == b
しかし、 a + b(3+5) と c(8) はともに 8 なので、以下では True となります。
a + b == c
2つの値がイコールでないときに「正」となるのは != です。
以下では a(3) と c(8)は等しくないので True です。
a != c
大きさの比較は > か < で行います。
以下では a(3) は b(5) より大きくないので False です。
a > b
以下では、b(5) は c(8) より大きくないので True です。
b < c
<= や >= は、値が等しい場合も正となります。
例えば、c(8) は a(3) + b(5) と等しいので、以下の比較では、どちらも True になります。
c <= a + b
c <= a + b
is や is not はリストなどのオブジェクトの比較の際に使います。
以下では list1 と list2 は等しくないので False です。
list1 = [1,2,3,4,5]
list2 = [6,7,8,9,10]
list1 is list2
つまり、 is not で比較すると True になります。
list1 is not list2
演算子 | 例 | 説明 |
and | a and b | 論理積。a と b の両方が 「正」の時「正」。一方でも「否」なら「否」。 |
or | a or b | 論理和。a か b のどちらか一方でも「正」の時「正」。両方とも「否」なら「否」。 |
not | a not b | 否定。 a が「正」なら「否」。a が「否」なら「正」。 |
早速見ていきましょう。
4.2. 論理演算子の使い方
4.2.1. 論理積(and)
以下では、両方とも True なので、論理積は True になります。
True and True
こちらの場合は、片方が False なので論理積も False です。
True and False
4.2.2. 論理和(or)
論理和では、双方が「否」の時のみ False になります。
つまり以下では True です。
True or True
True or False
以下のように、双方が「否」の時に False になります。
False and False
4.2.3. 否定(not)
否定はそのままなので分かりやすいですね。
「正」の否定は「否」なので False です。
not True
「否」の否定は「正」なので True です。
not False
4.3. 比較演算子と論理演算子の組み合わせ
次の例では、a は50以上、100以下で、どちらも「正」ですので、論理積(and)は True です。
a = 80
(a >= 50) and (a <= 100)
以下では、b は50以上ですが、100以下ではないので、False になります。
b = 110
(b >= 50) and (b <= 100)
論理和(or)は、どちらか一方が「正」ならば True です。
以下の例では a は OK ではないので「否」ですが、b は OK なので「正」です。論理和(or)は、どちらか一方でも正しければ「正」なので True となります。
a = "NG" ; b = "OK"
(a == "OK") and (b == "OK")
4.4. True と False , 1 と 0
Pythonの数値処理では、True と False が使われた時、それぞれ 1 と 0 として扱われます。
そのため、以下のように True + False は 1 + 0 = 1 になります。
True + False
True + True だと 1 + 1 = 2 になります。
True + True
反対に、 1 and 1 は True and True と同じですし、 1 or 0 は True or False と同じです。
1 and 1
1 or 0
なお、論理式で、 True, False, 0, 1 以外の値が使われた時、値の大きさに関わらず、 or では左項が、 and では右項が出力されます。
2 or 3
2 and 3
5. ビット演算子
ビット演算子は、2進数の値をビットごとに演算するものです。画像の合成などでよく活用されます。
5.1. ビット演算子一覧
演算子 | 例 | 説明 |
& | a & b | 論理積(AND。両ビットとも1の時1) |
| | a | b | 論理和(OR。どちらかのビットが1ならば1) |
^ | a^b | 排他的論理和(XOR。比較したビットの値が異なる時1) |
– | -a | ビット反転(NOT。ビットの1と0を反転させる) |
<< | a<<1 | 左シフト。ビットを左にずらす。値は2倍になる。 |
>> | a>>1 | 右シフト。ビットを右にずらす。値は1/2になる。 |
5.2. ビット演算の使い方
例えば、0b0101 と 0b0011 を、 AND, OR, XOR でビット演算すると、それぞれ以下のようになります。なお、 0b は2進数であることを示す記号です。
& (AND)では、両方とも 1 の桁だけ 1 となります。Pythonでは、演算結果は10進数で示されます。bin()を使うと、2進数の文字列で出力することができます。
a = 0b0101
b = 0b0011
bin(a & b)
| (OR)では、どちらか一方が1であれば、その桁のは1となります。
bin(a|b)
^ (XOR)では、桁の値が一致しない時だけ1となります。
bin(a^b)
– (NOT)は、ビット反転なので、0b0101 は 0b1010 になります。
bin(-a)
5.3. 左シフトと右シフト
ビット演算は2進数なので、左シフトすると値は2倍に、右シフトすると値は1/2になります。
10進数では、10を左シフトして100にすると10倍に、右シフトして1にすると1/10になりますね。これと同じで、2進数では、左シフトは2倍、右シフトは1/2です。
a = 0b001011
bin(a << 1)
bin(a & b)
5.4. ビットマスク
ビットの中の取り出したい部分を、1 にした値とANDすると抜き出すことができます。これを「ビットマスク」と言います。
以下の例では、変数 a に指定された 0b100110 のうち、下3桁の 110 を取り出しています。
a = 0b100110
bin(a & 0b111)
途中の数桁を取り出したい場合は、値をシフトしてからビットマスクをします。
以下の例では、まず 0b10101 を右へシフトして、0b1010 することによって、 変数 a の右から2,3桁目を取り出しています。
a = 0b10101
bin(a>>1 & 0b11)
6. まとめ
いかがだったでしょうか?
Pythonの
- 数値演算子
- 文字列演算子
- 比較演算子
- 論理演算子
- ビット演算子
をそれぞれ解説しました。
演算子は、頻繁に使うものなので、いつでも見られるようにしておくと良いでしょう。
コメント
コメント一覧 (1件)
“is” に関してですが、内容を比べる、というよりも id (?) を比べます。
なので、以下の例でも False を返します。
list1 = [0, 1, 2]
list2 = [0, 1, 2]
list1 is list2
結果: False