MQL5システムトレーダーの為のPython講座:第10回「演算子について」

Python
スポンサーリンク
スポンサーリンク

はじめに

前回集合について学びました↓

今回はPython演算子について説明します。演算子は、足し算引き算などの算術操作や、2つの値を比較するために使われる記号です。演算子を使うことで、数値の計算や条件の判定ができます。

演算子とは

演算子とは、数値の計算や条件の比較を行うために使われる記号のことです。たとえば、足し算引き算の記号(+-)を指します。Pythonには多くの種類の演算子があり、それぞれの目的に応じて使われます。

主な演算子の種類には、以下のようなものがあります。

算術演算子

算術演算子は、数値の計算を行うために使われる演算子です。Pythonで使える主な算術演算子には、足し算引き算掛け算、割り算、剰余べき乗があります。

足し算と引き算

足し算は「+」を使い、引き算は「-」を使います。それぞれ数値の加算と減算を行います。

# 変数Xに10を代入
X = 10

# 変数Yに2を代入
Y = 2

# 足し算:XとYの足し算の結果を表示します
print("足し算の結果:", X + Y)  # 10 + 2 = 12

# 引き算:XからYを引いた結果を表示します
print("引き算の結果:", X - Y)  # 10 - 2 = 8

掛け算と割り算

掛け算には「*」、割り算には「/」を使います。割り算の結果は小数になります。

# 掛け算:XとYを掛けた結果を表示します
print("掛け算の結果:", X * Y)  # 10 * 2 = 20

# 割り算:XをYで割った結果を表示します(結果は小数)
print("割り算の結果:", X / Y)  # 10 / 2 = 5.0

剰余と商

剰余は「%」を使って割り算の余りを求めます。剰余とは、割り算をしたときに余る部分のことです。

は「//」を使って割り算の整数部分のみを求めます。とは、割り算をした結果の整数部分だけを取り出したものです。

# 剰余:XをYで割った余りを表示します
print("剰余の結果:", X % Y)  # 10 % 2 = 0

# 商:XをYで割った商(整数部分)を表示します
print("商の結果:", X // Y)  # 10 // 2 = 5

べき乗

べき乗には「**」を使います。べき乗とは、ある数を特定の回数だけ掛けた結果です(例:2の3乗は2×2×2のことです)。

# べき乗:XのY乗(10の2乗)の結果を表示します
print("べき乗の結果:", X ** Y)  # 10 ** 2 = 100

関係演算子

関係演算子は、2つの値の関係を比較し、その結果が「真(True)」か「偽(False)」かを判断するために使われます。条件分岐(if文)などでよく使われます。Pythonで使える主な関係演算子には以下のものがあります。

大小比較(<, >, <=, >=)

大小比較の演算子には「<」「>」「<=」「>=」があります。これらの演算子を使うと、値の大小を比較することができます。

  • <」は左側の値が右側の値より小さいかどうかを判定します。
  • >」は左側の値が右側の値より大きいかどうかを判定します。
  • <=」は左側の値が右側の値以下かどうかを判定します。
  • >=」は左側の値が右側の値以上かどうかを判定します。
# 変数Xに10を代入
X = 10

# 変数Yに2を代入
Y = 2

# XがYより大きいかどうかを比較します
print("X > Y の結果:", X > Y)  # True(10は2より大きい)

# XがY以下かどうかを比較します
print("X <= Y の結果:", X <= Y)  # False(10は2以下ではない)

等しいかどうか(==)と等しくないかどうか(!=)

等しいかどうかを判定するには「==」を使います。等しくないかどうかを判定するには「!=」を使います。

  • ==」は左側の値と右側の値が等しい場合に「True」を返します。
  • !=」は左側の値と右側の値が等しくない場合に「True」を返します。
# XとYが等しいかどうかを比較します
print("X == Y の結果:", X == Y)  # False(10と2は等しくない)

# XとYが等しくないかどうかを比較します
print("X != Y の結果:", X != Y)  # True(10と2は等しくない)

関係演算子を使うことで、数値や変数同士の大小や等しいかどうかの比較ができます。これにより、条件分岐を行ったり、プログラムの動作を制御することが可能になります。

論理演算子

論理演算子は、複数の条件を組み合わせて、結果が「真(True)」か「偽(False)」かを判断するために使われます。Pythonで使える主な論理演算子には andornotがあります。

and 演算子

and演算子は、2つの条件がどちらも「真(True)」の場合に「真(True)」を返します。それ以外の場合は「偽(False)」を返します。

# 変数Aに5、変数Bに10を代入
A = 5
B = 10

# Aが3より大きい かつ Bが15より小さいかどうかを判定します
print("A > 3 and B < 15 の結果:", A > 3 and B < 15)  # True(どちらの条件も満たしている)

or 演算子

or演算子は、2つの条件のうち少なくとも1つが「真(True)」であれば「真(True)」を返します。どちらの条件も「偽(False)」の場合のみ「偽(False)」を返します。

# Aが3より大きい または Bが15より小さいかどうかを判定します
print("A > 3 or B < 5 の結果:", A > 3 or B < 5)  # True(1つ目の条件が満たされている)

not 演算子

not演算子は、条件が「真(True)」の場合に「偽(False)」を返し、条件が「偽(False)」の場合に「真(True)」を返します。

# Aが10より大きいという条件を否定します
print("not (A > 10) の結果:", not (A > 10))  # True(Aは10より大きくないので、その否定はTrue)

論理演算子を使うことで、複数の条件を柔軟に組み合わせ、複雑な条件を簡単に記述することができます。

代入演算子と複合代入演算子

代入演算子は、変数に値を代入するために使われる演算子です。Pythonでは「=」を使って代入を行います。また、代入と同時に計算も行える複合代入演算子もあります。

代入演算子

代入演算子は、右側にある値を左側の変数代入します。

# 変数Xに10を代入
X = 10
print("Xの値:", X)  # 10が表示されます

複合代入演算子

複合代入演算子は、代入と計算を同時に行います。以下は、Pythonで使える複合代入演算子の例です。

具体的な例を見てみましょう。

# 変数Xに10を代入
X = 10

# Xに5を足してから再度Xに代入
X += 5  # これは X = X + 5 と同じ意味です
print("X += 5 の結果:", X)  # 15が表示されます

# Xから3を引いてから再度Xに代入
X -= 3  # これは X = X - 3 と同じ意味です
print("X -= 3 の結果:", X)  # 12が表示されます

# Xに2を掛けてから再度Xに代入
X *= 2  # これは X = X * 2 と同じ意味です
print("X *= 2 の結果:", X)  # 24が表示されます

# Xを4で割ってから再度Xに代入
X /= 4  # これは X = X / 4 と同じ意味です
print("X /= 4 の結果:", X)  # 6.0が表示されます

# Xを3で割った余りをXに代入
X %= 3  # これは X = X % 3 と同じ意味です
print("X %= 3 の結果:", X)  # 0.0が表示されます

このように、複合代入演算子を使うと、計算と代入を同時に行うことができ、コードを簡潔に書くことができます。

is 演算子と is not 演算子

is 演算子is not 演算子は、Pythonでオブジェクトが同一であるかどうかを判定するために使われる演算子です。同一のオブジェクトとは、メモリ上の同じ場所に存在するデータを指します。

Pythonでは、2つのオブジェクトが「同じ値」を持っていたとしても、必ずしも「同じオブジェクト」であるとは限りません。リストや辞書のようなデータ型では、たとえ内容が同じでも、それらが異なる場所に保存されている場合、それぞれ別のオブジェクトとみなされます。これを理解するために具体的な例を使って説明します。

is 演算子

2つのオブジェクトが「同一かどうか」を調べるための演算子です。同一であるということは、オブジェクトがメモリ上で同じ場所に保存されており、同じ内容を参照していることを意味します。

たとえば、以下のようにリストを使った例を見てみましょう。

以下に具体例を示します。

# 変数L1にリスト[1, 2, 3]を代入
L1 = [1, 2, 3]

# 変数L2にも同じリストを代入
L2 = [1, 2, 3]

# 変数L3にL1を代入
L3 = L1

# L1とL2が同じオブジェクトかどうかを判定します
print("L1 is L2 の結果:", L1 is L2)  # False(L1とL2は同じ値を持つが、異なるオブジェクト)

# L1とL3が同じオブジェクトかどうかを判定します
print("L1 is L3 の結果:", L1 is L3)  # True(L1とL3は同じオブジェクト)

L1L2 はどちらも [1, 2, 3] という同じ値を持っていますが、それぞれ別々に作成されたリストです。そのため、メモリ上では異なる場所に保存されています。そのため L1 is L2 は False となります。つまり、値が同じでも異なる場所に保存されているため、異なるオブジェクトとみなされます。

一方で、L3L1代入されています。この代入は「L1 と同じものを指すようにする」という意味です。つまり、L3L1メモリ上で同じ場所を指しており、完全に同じオブジェクトです。そのため、L1 is L3 は True となります。

オブジェクトのIDを確認する方法

Pythonでは、オブジェクトごとに「ID」が割り振られています。このIDは、オブジェクトがメモリ上のどこに保存されているかを示す識別子です。id() 関数を使うと、そのオブジェクトのIDを確認できます。

# L1, L2, L3のIDを確認します
print("L1のID:", id(L1))
print("L2のID:", id(L2))
print("L3のID:", id(L3))

id() 関数について

id() 関数は、オブジェクトごとに割り振られた「ID」を返すための関数です。このIDは、オブジェクトがメモリ上のどこに保存されているかを示す識別子です。これにより、オブジェクトが同一かどうかを確認する際に役立ちます。

is not 演算子

is not 演算子は、2つのオブジェクトが異なる場合に「真(True)」を返します。つまり、オブジェクトが同じでないことを判定する演算子です。

# L1とL2が異なるオブジェクトかどうかを判定します
print("L1 is not L2 の結果:", L1 is not L2)  # True(L1とL2は異なるオブジェクト)

# L1とL3が異なるオブジェクトかどうかを判定します
print("L1 is not L3 の結果:", L1 is not L3)  # False(L1とL3は同じオブジェクト)

is 演算子is not 演算子を使うことで、オブジェクトが同一かどうかを判定することができます。これにより、リストや辞書などのオブジェクトの比較がより正確に行えます。

in 演算子と not in 演算子

in 演算子not in 演算子は、リストタプルなどの複数の要素を持つオブジェクトの中に、特定の要素が含まれているかどうかを確認するために使います。

in 演算子

in 演算子は、特定の要素がオブジェクトに含まれている場合に「真(True)」を返します。たとえば、リストや文字列に特定の値が存在するかどうかを確認する際に使われます。

# リストに山田さん、佐藤さん、高橋さんを要素として含む
names = ["山田さん", "佐藤さん", "高橋さん"]

# 山田さんがリストに含まれているかを判定
print("山田さん in names の結果:", "山田さん" in names)  # True(山田さんがリストに含まれている)

# 鈴木さんがリストに含まれているかを判定
print("鈴木さん in names の結果:", "鈴木さん" in names)  # False(鈴木さんはリストに含まれていない)

not in 演算子

not in 演算子は、特定の要素がオブジェクトに含まれていない場合に「真(True)」を返します。in 演算子とは逆の判定を行います。

# 山田さんがリストに含まれていないかを判定
print("山田さん not in names の結果:", "山田さん" not in names)  # False(山田さんはリストに含まれているのでFalse)

# 鈴木さんがリストに含まれていないかを判定
print("鈴木さん not in names の結果:", "鈴木さん" not in names)  # True(鈴木さんはリストに含まれていないのでTrue)

in 演算子not in 演算子を使うことで、リストタプルなどのオブジェクトに特定の要素が存在するかどうかを簡単に確認することができます。

ビット演算子

ビット演算子は、数値をビット単位(0と1)で操作するための演算子です。2進数で表現した数値に対して、論理演算を行う際に使用します。Pythonで使える主なビット演算子には、ビットごとのANDORXORNOTなどがあります。

まず、2進数の表記について説明します。2進数を表記する場合には、先頭に「0b」を付け、その後に0か1の数字を続けて記述します。これが2進数の表記であり、2進数での計算を行う際の基本となります。

2進数の表記と変換

2進数を使った数値の表現では、「0b」の後に0と1を続けることで数値を記述します。例えば、0b10102進数での表現で、10進数にすると「10」となります。また、bin() 関数を使うことで、10進数から2進数に変換することも可能です。

# 2進数で数値を表記し、その値を表示します
print("10進数の10を2進数で表すと:", bin(10))  # 0b1010 と表示されます

# 10進数の値を2進数に変換して表示します
number = 28
print("10進数の28を2進数で表すと:", bin(number))  # 0b11100 と表示されます

このように、bin() 関数を使うと、任意の10進数2進数に変換して表示することができます。

bin() 関数について

bin() 関数は、10進数の数値を2進数に変換して表示するための関数です。例えば、10進数の28を bin() 関数で変換すると、「0b11100」という2進数の形式になります。このように、bin() 関数を使うことで数値をビット単位で扱いやすくします。

ビット演算子の使い方

ビット演算子は、2進数の数値をビット単位で操作するための演算子です。それぞれのビット演算子について詳細に解説していきます。

ビットAND演算子(&)

ビットAND演算子は、両方のビットが1の場合に1を返します。それ以外の場合は0になります。たとえば、次のような例を見てみましょう。

# 変数Aに10進数の10を代入します(2進数で表すと1010)
A = 10

# 変数Bに10進数の4を代入します(2進数で表すと0100)
B = 4

# ビットAND演算を行い、その結果を表示します
print("A & B の結果:", A & B)  # 0b1010 & 0b0100 = 0b0000 → 結果は0

解説

  • 変数 A10進数で 10 です。2進数では 1010 となります。
  • 変数 B10進数で 4 です2進数では 0100 となります。
  • ビットごとにAND演算を行います。10100100 を比べると、すべてのビットで 1 と 0 の組み合わせとなるため、結果は 0000(つまり 0)です。

ビットOR演算子(|)

ビットOR演算子は、2つのビットのうち少なくとも1つが1であれば、1を返します。

# 変数Aに10進数の10を代入します(2進数で表すと1010)
A = 10

# 変数Bに10進数の4を代入します(2進数で表すと0100)
B = 4

# ビットOR演算を行い、その結果を表示します
print("A | B の結果:", A | B)  # 0b1010 | 0b0100 = 0b1110 → 結果は14

解説

  • 変数A1010変数B0100 です。
  • OR演算では、少なくとも一方のビットが1であれば、1を返します。
  • 10100100 を比較すると、1110 になります。これを10進数に直すと 14 です。

ビットXOR演算子(^)

ビットXOR演算子は、2つのビットが異なる場合に1を返し、同じ場合には0を返します。

# 変数Aに10進数の10を代入します(2進数で表すと1010)
A = 10

# 変数Bに10進数の4を代入します(2進数で表すと0100)
B = 4

# ビットXOR演算を行い、その結果を表示します
print("A ^ B の結果:", A ^ B)  # 0b1010 ^ 0b0100 = 0b1110 → 結果は14

解説

  • 変数A1010変数B0100 です。
  • XOR演算では、ビットが異なる場合に1を返します。
  • 10100100 を比較すると、結果は 1110 となり、これは10進数で 14 です。

ビットNOT演算子(~)

ビットNOT演算子は、ビットを反転させます。つまり、0 は 1 に、1 は 0 になります。ただし、Pythonでは符号付き数値として扱われるため、結果は「元の値のマイナスに1を足した値」として返されます。

# 変数Aに10進数の10を代入します(2進数で表すと1010)
A = 10

# ビットNOT演算を行い、その結果を表示します
print("~A の結果:", ~A)  # ~0b1010 = -(0b1010 + 1) → 結果は-11

解説

  • 変数A2進数では 1010 です。
  • NOT演算では、すべてのビットを反転させます。1010ビットを反転すると、0101 になりますが、Pythonでは符号付き数として扱われます。
  • 結果として、「-(元の数 + 1)」が返されます。つまり、-11 となります。

まとめ

この記事では、Python演算子について解説ました。

今回の記事では算術演算子を使った基本的な数値計算から、関係演算子を使った条件の判定、論理演算子を使った複数条件の組み合わせ、そしてビット演算子によるビット単位の操作までを解説しました。

それぞれの演算子の仕組みを理解することで、Pythonプログラミングにおける計算や判定をより正確かつ効率的に行うことが可能になります。

今回は以上とさせて頂きます。最後までお読みいただきありがとうございました。

MQL5システムトレーダーの為のPython講座:第9回「集合について」

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