【Python】「or」と「|」の違いと使い分けについて【論理演算,ビット演算子】

プログラム
スポンサーリンク

はじめに

今回は、Pythonの演算子「or」と「 | 」の使い分けについて解説します。
Pythonの導入や基本操作が行えることを前提で進めます。

↓前提知識はこちらをご覧ください↓

【Python】導入方法から基本操作について
Pythonは無料で使えるプログラミング言語でA「I開発や作業の自動化」に強いとされてます。導入は公式サイトからダウンロード。DLしたら「IDLE」を起動して動かします。2行以上のブログラムの場合は「.py」ファイルを作成する必要があります。

「or」と「 | 」の違い

「or」と「 | 」は下記

・「or」 → 論理演算子
・「 | 」 → ビット演算子

この2つが違いです。

結論だけ言うと…

・if文の条件分岐には「or」か「|」を使う
・ビット関係の処理には「|」を使う


です。

論理演算子の「or」について

論理演算子は “通常” の情報が2つある場合の処理です。
主に「2つ以上の条件があるif文」で使われます。

下図のような形で、2つ以上の条件分岐を繋ぐのが主な用途です。

「or」単体であれば、左右に置いた要素のどちらかが、False以外のとき…
「Ture」や「どちらかの値」を返す処理になります。

↓「Ture」と「False」だけで書いた場合…
 2つの値が「False」の時だけ「False」になります。

ちなみにTure/Falseは整数(int)に変換すると下記のようになります。
・Ture → 1
・False → 0

「or」は整数や小数でも設定が可能です。
そして、「or」は片方のが「0」以外なら、どちらか一方の値を返す。
両方のが「0」以外の時だけFalse(0)を返す処理になります。

片方の値が「0」でもう片方が「0」以外なら…
「0」以外の方で設定した値を返す。

・両方の数字が「0」以外なら…
どちらかの数字を返す処理のようです。

(何が帰るかまでの条件は特定できませんでした)

ちなみに、整数や小数の値が返されは場合…
0以外であれば、bool型では「Ture」という扱いになります。
なので、-0.01を返す処理でif文を組むと、値がTureになります。

↑if文は()の中身がTureだと実行する処理なので…
if文が実行されました。

以上が、論理演算子の「and」についての解説です。

ビット演算の「 | 」について

ビット演算子は “ビット型” の情報が2つある場合の処理です。
ビットについて、凄く大雑把に解説すると… 「2進数データ」になります。

そして、ビット演算子を使うと…
用意した2つの2進数データを組み合わせて別の2進数データが作れます。

「0b」は、これ以降に書く数字が2進数ですとパソコンに伝えるための記号です。

「|」はそのビット演算子の1つ。
ORの論理回路を元にした演算子で…
2つのビットのうち、片側が立ってる所を「1」にする処理になります。

イメージとしては下図の通り。
これが、ビット演算子「 | 」の効果です。

↓ビットの詳細や他のビット演算子はこちらで解説。

【Python】ビット演算の使い方【演算子,活用方法,ゲーム属性】
ビット = PC内部の「0」と「1」を計算する装置1つの単位で、ビット演算を使うと、複数の条件があるモノを手軽に管理できます。これはゲームなどの属性を作る際に役立ちます。さらに、ビット演算子を使うと、入力したビットに変化を加える事ができます。

条件分岐では「or」を使う

演算子単体でif文に使うような場合、「or」を使う方が安定します。
下図のような単体の演算子で条件分岐を行う場合は「or」を使った方が良いです。

理由は下記の通り。

・「|」は小数と文字型が使えない

こちらについて解説します。

「|」は小数と文字型が使えない

単体で演算子を使う場合「or」だと小数や文字型が使えます。

「|」だと小数と文字型が使えません。
↓整数(int)と整数(int)なら動きますが…
 整数(int)小数(float)を合わせるとエラーが出ます。

小数(float)と小数(float)を合わせても、エラーが出ます。
つまり、小数が使えない事が分かります。

小数(float)と小数(float)を合わせても、エラーが出ます。
つまり、小数が使えない事が分かります。

あとTure/False(bool)と整数「int」の組み合わせも動きます。
が… 文字型は動きません。

以上が、「|」は小数と文字型が使えない事に解説です。

こんな謎処理、めったにやる事は無いですが…
小数と文字型は動かない。

なので、条件分岐などで使うなら「or」を使った方が安定する可能性が高い。
→ 「or」を使う
と覚えてください。

2つ以上の要素があるif文は「or」と「|」の両方で動く

2つ以上の条件があるif文は、数字の場合「or」と「|」の両方で動きます。
(0 == 0)のような条件は、その条件になると「Ture」を返す処理になります。

なので (条件1) or(条件2):のような形にした場合
2つの条件は「bool型」で比較する事になります。

「or」だと何一つ問題無く動きます。

そして「|」でも、(==)などで比較した条件の解は「Ture/False」で表示されます。
なので、正しく表示されます。

そして、文字型や小数なども「|」で動きます。
これは(==)や(<)の中で一度処理が行われて「Ture/False」に変換されたのが原因です

なので()で囲った場合…
高確率で、2つ以上の要素があるif文は「or」と「|」の両方で動きます。

以上が、2つ以上の要素があるif文は「or」と「|」の両方で動く事の解説です。

ビット演算では「 | 」を使う

下図のようなビット演算をしたい場合…
「 | 」を使わないと動きません。

「or」を使うと、どちらか一方の値が返されるだけになります。
つまり「or」だとビット演算が行われません。(左側の「0b0011」が返っただけ)

print(bin())は2進数で結果を表示する処理です。
print()は10進数で結果を表示する処理になります。

ちなみに、2進数の「11」は…
10進数に変換すると「3」になります。

なので、ビット演算を行うには「|」を行う必要があります。
ビット演算が行われたので出力結果が「0b1011」になりました。

「|」で処理が下図のように動いたので…
結果が「1011」になってます。

ちなみに、2進数の「1011」は…
10進数に変換すると「11」になります。

まとめ

今回は、Pythonの演算子「or」と「|」の使い分けについて解説しました。

・「or」は2つの値が「0」以外なら、「0」以外の値を返す処理
「or」は小数と文字型が扱える
・「|」はビット演算に使うための演算子
・「|」は小数と文字型が扱えない

・ビット演算に「or」を使っても、ビット演算の処理は行われないので注意

また、他にもプログラムについて解説してます。

【Python】__pycache__ファイルを作らない方法
__pycache__はモジュール読み込み時に作られるキャッシュファイルで、プログラムに特殊な処理を入れたり、コマンドプロンプトでpython -Bや「set PYTHONDONTWRITEBYTECODE=1」を使うと作られなくなります。
【Python】コマンドプロンプトでPythonを動かす方法【環境変数,Pathを通す】
Windows OSの場合.pyプログラムはコマンドプロンプトで動かすと「python -」のコマンドが使えます。出力結果がPythonしか出ない場合は、アプリ実行エイリアスをオフにしたり、環境変数を調整してPathを通すなどの調整をします。

ぜひ、こちらもご覧ください。

コメント

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