見出し画像

Python勉強記(5)- 演算子


演算子

Pythonの演算子一覧。

+ - * ** / // % @ << >> & | ^ ~ := < > <= >= == !=
+= -= *= /= //= %= @= &= |= ^= >>= <<= **=

https://docs.python.org/ja/3/reference/lexical_analysis.html#operators

他のプログラム言語と共通なものと、そうでないものがあります。

2列目のものは公式ドキュメント「演算子」直下の「トークン」に含まれますが、プログラム言語では一般的に演算子に入るので、載せておきました。
(演算+代入=累積代入演算子)

論理演算子がありませんね。
Pythonではand, or, not などのキーワードになっています。

文字列

文字列の連結は'+'で行います。

>>> a = "Hello"
>>> a = a + ",world"
>>> a
'Hello,world'

上のような同じ変数への連結は「+=」を使ってより簡単に書けます。

>>> a = "Hello"
>>> a += ",world"
>>> a
'Hello,world'

演算とは言いませんが、文字列からある文字列を取り出すには「 [ ][ : ]」を使用します。この操作をスライスと言います。

>>> a
'Hello,world'
>>> a[0] # 先頭の文字
'H'
>>> a[0:4] # 先頭4文字
'Hell'
>>> a[0:5] # 全島5文字
'Hello'
>>> a[-1] # 最終文字
'd'

スライスでは終わりの文字の指定が直感と異なることに注意。
上の例ではこんな感じになります。
・先頭はa[0], 終わりはa[-1]。
・a[0:5] でa[0]~a[4]の5個が取り出される。

算術演算

演算子は他言語(や数学)とほぼ同じで、あまり迷うことはありません。
加算「+」、減算「-」、乗算(*)

>>> a = 1
>>> b = 2
>>> c = 3.0 
>>> type(a)  #変数の型を確認。 
<class 'int'>
>>> type(c)
<class 'float'>
>>> a + b  # int + int = int
3
>>> a + c    # int + float = float
4.0
>>> a += c # a = a + c 
>>> a
4.0

除算はちょっと注意が必要。
普通の除算「/」はint 同士で割り切れてもfloatになります。

int の除算をやりたい場合は、以下のようになります。
・「//」:int 同士の除算(小数以下切り捨て)
・「%」:「//」したときの余り。

>>> a = 4
>>> b = 2
>>> a / b # int / int = float
2.0
>>> c = 3 
>>> a // c # int // int = int
1
>>> a % c
1

べき乗「**」
数学でも同じですが、べき乗は右結合(右から計算する)なので注意。
左から計算したいときはカッコを使います。

>>> a = 2
>>> b = 3
>>> c = 4
>>> a ** b
8
>>> a ** b ** c # a ** (b ** c)
2417851639229258349412352
>>> (a ** b) ** c
4096

乗数がfloat の場合も数学と同じなので安心。

>>> a = 2 # sqrt(2) を計算する。
>>> b = 0.5 
>>> a ** b
1.4142135623730951
>>>

複素数の四則演算を一通りためしました。
複素数の除算は公式と同じになるか、実部と虚部を検算しておきます。

$$
x = a + bj, y = c + dj \\ \text{→} \\ \dfrac{x}{y} = \dfrac{ac + bd} {c_2+d_2} + \dfrac{bc - ad} {c_2+d_2}j
$$

>>> a = 1 + 2j
>>> b = 3 + 4j 
>>> a + b
(4+6j)
>>> a - b
(-2-2j)
>>> a * b
(-5+10j)
>>> a / b
(0.44+0.08j)
>>> (1*3+2*4) / (3**2+4**2) # Re(a / b)
0.44
>>> (2*3-1*4) / (3**2+4**2)  #Im(a / b)
0.08
>>>

比較演算とbool型

意味は他言語と全く同じです。
比較した後bool値(TrueまたはFalse)を返します。

  • 大小:「>」(greater) 、「>=」(greater or equal)、「<」(smaller)、「<=」(smaller or equal)

  • 等しい:「==」(equal)、「!=」(not equal)

>>> 2 > 1
True
>>> 2 >= 1
True
>>> 2 <= 1
False
>>> 2 < 1
False
>>> 2 == 1
False
>>> 2 != 1
True
>>>

比較ができないものについてはエラーを返します。

>>> a = 1 + 2j
>>> b = 3 + 4j
>>> a > b # 複素数どうしの大小は比較不能。
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: '>' not supported between instances of 'complex' and 'complex'
>>> a == b
False
>>> a != b
True

比較演算は論理演算子と組み合わせて条件式として使用されます。

比較演算は論理演算より優先度が高いため、下記の例では比較条件のカッコは不要ですが、このような例ではカッコを付けた方がわかりやすいと、個人的には思います。

>>> a = 2
>>> b = 1
>>> (a > b) and (a < b) # greater and smaller = False
False
>>> (a > b) or (a < b)   # greater or smaller = True
True
>>> (a > b) and (a != b)
True
>>>

(続き)関数など

当初、続けて書くつもりでしたが、演算子だけで結構おなか一杯なので、続きは次回。
次回からやっとプログラム言語としての説明ができそうです。
まだ説明できていない型(リスト、タブルなど)についても、徐々に書いていくつもりです。

この記事が気に入ったらサポートをしてみませんか?