【Python or】論理演算子orの使い方を初心者向けにわかりやすく解説
はじめに
皆さんは Python で条件分岐を書くときに、複数の条件をまとめたい場面に出会うことはないでしょうか。
たとえば「ある変数が A か B のどちらかであれば処理を進めたい」といった状況です。
そんなときに役立つのが or演算子 です。
Pythonにおける or演算子 は、条件式の組み合わせや、デフォルト値の設定など、さまざまな使い方があります。
特に初心者の方にとっては、書き方のルールを覚えたり、他の論理演算子(and, not)との違いを理解したりするのが最初の壁になることがあるかもしれません。
本記事では、Pythonの or演算子 に関する基礎知識から実務で使う際のポイントまでを、丁寧かつ具体的なコード例を示しながらまとめていきます。
初心者の方でもなるべくわかりやすく理解できるように文章を工夫していますので、ぜひ最後まで読んでみてください。
この記事を読むとわかること
- Pythonの or演算子 の基本的な書き方と動作
- if文などでの使い方と、他の論理演算子(and, not)との違い
- 実務でどんな場面で使えるのかをイメージできるようになる
- エラーを防ぐための注意点や、短絡評価(ショートサーキット)の仕組み
- or演算子を活用した具体的なコード例
ここから順番に話を進め、初心者の方にもやさしく解説していきます。
or演算子とは
or演算子 は、複数の条件式が「どれかひとつでも True であれば True にする」ために用いられる論理演算子です。
Pythonでは「or」というキーワードを使います。
基本的な構文は以下のとおりです。
condition1 or condition2
ここで condition1
や condition2
が真(True)かどうかを確認し、いずれか一方でも True であれば結果は True になります。
両方が False の場合にのみ結果は False です。
or演算子の基本的な例
実際にサンプルコードで確認してみましょう。
複数の条件をまとめるときに使う例を示します。
user_input = "yes" if user_input == "yes" or user_input == "y": print("処理を続行します。") else: print("処理を中断します。")
このコードでは user_input
が "yes"
か "y"
のどちらかであれば if
の中が実行されるようになっています。
それぞれの条件を「or」でつなぐだけで簡潔に書けるのが特徴です。
他の論理演算子(and, not)との対比
Pythonには or のほかにも and や not といった論理演算子があります。
以下のようにまとめられます。
- and : 両方の条件が True である場合に True を返す
- or : どちらか一方でも True であれば True を返す
- not : 条件が False であれば True を返し、True であれば False を返す
とくに and と or は条件式を組み立てるときに頻繁に使用するので、違いを押さえておきましょう。
or演算子の実務での利用シーン
初心者の方が想像しやすいように、実務ではどんな場面で or演算子 を使うことが多いか考えてみます。
代表的なパターンとしては以下のようなケースがあります。
-
ユーザー入力のチェック
- 入力が何種類かの文字列であれば同じ処理をしたい
- 例: 「y」「Y」「yes」「Yes」いずれでも「同意」とみなす
-
複数条件でのアクセス制御
- 登録ユーザー or 管理者 ならアクセスを許可
- 例:
if is_registered or is_admin:
…
-
デフォルト値の設定
- ある変数が None や空文字の場合に、別の値を返す
- 例:
value or "default"
実際のコードで具体的にどのように書くのか、ひとつずつ見ていきます。
ユーザー入力のチェックにおけるor演算子
ユーザー入力を扱うシーンでは、想定されるパターンが複数ある場合がよくあります。
下記のように書けば、複数の候補をまとめて判定できます。
user_input = "Y" if user_input == "yes" or user_input == "Yes" or user_input == "y" or user_input == "Y": print("同意として処理を続行します。") else: print("同意を得られなかったため中断します。")
or演算子を使うことで、読んだときに「いずれかに該当すればOK」という意図がはっきり伝わりますね。
もし条件が多くなりすぎる場合は、リストやタプルにまとめて 'in'
演算子を使う方法などもありますが、初心者のうちはまずこのように or を使った書き方から始めるとわかりやすいでしょう。
複数条件をまとめる場合の書き方のコツ
orを連続させると、条件式が横に長くなりがちです。
ここで少し工夫をするだけで可読性を高めることができます。
例えば、以下のように ( ) でグルーピングすると見やすくなります。
user_input = "Yes" if (user_input == "yes" or user_input == "Yes" or user_input == "y" or user_input == "Y"): print("同意として処理を続行します。") else: print("同意を得られなかったため中断します。")
Pythonのコードスタイルとして、カッコを使うと改行して書いてもエラーにならないという特徴を活かしています。
初心者が自分の書いたコードを後から見直す際にも、条件の一覧がわかりやすくなるでしょう。
デフォルト値の設定におけるor演算子
Pythonでは、or演算子 を利用して簡潔にデフォルト値を設定する書き方がよく使われます。
たとえば、ある変数が空文字列やNoneだったときに別の値を割り当てたい場合です。
以下の例をご覧ください。
username = "" display_name = username or "ゲスト" print(display_name) # "ゲスト" と表示される
username
が空文字列の場合、username or "ゲスト"
は "ゲスト"
を返します。
もし username
に何らかの値が入っていれば、そちらが優先されます。
このように、or の左側が「偽」と判定される場合にのみ右側の値を採用する、という挙動を覚えておくと便利です。
どんな値が「偽」とみなされるか
Pythonでは以下の値がFalse(偽)として扱われます。
None
False
0
(整数・浮動小数ともに0は偽)""
(空文字列)[]
(空リスト)()
(空タプル){}
(空ディクショナリ)- ほか空のコレクション各種
これらがorの左側に来ると、右側の値が返されることになります。
特に文字列の入力やリストの中身が空かどうかをチェックするときに、この特性は役立ちます。
or演算子でよくある間違い
初心者の方がやりがちな間違いをいくつか紹介します。
or演算子そのものを間違えるというよりは、「条件式の組み方」に関するトラブルが多いです。
条件式を書かずに文字列だけをorで繋いでしまう
以下は誤った書き方の例です。
# NG例 color = "red" if color == "red" or "blue" or "green": print("色が指定の範囲内です。")
いっけん見ると問題がなさそうですが、実際には常に True 判定となります。
なぜなら、"blue"
や "green"
は非空文字列なので Python では True とみなされるためです。
この場合は以下のように、それぞれの文字列に対して比較演算子を書かなければいけません。
# OK例 color = "red" if color == "red" or color == "blue" or color == "green": print("色が指定の範囲内です。")
もしくは if color in ("red", "blue", "green"):
の形で書く方法もあります。
ただ、or演算子のルールを理解しておけば、このような「つもり違い」を防げるようになるでしょう。
優先順位を誤解している
Pythonの論理演算子には「優先順位」があります。
「not」が一番優先され、次に「and」、最後に「or」という順序です。
演算子が混在する場合は混乱しがちなので、カッコを使って優先順位を明示すると安全です。
たとえば以下のような式を見てみましょう。
flag1 = True flag2 = False flag3 = True if flag1 and flag2 or flag3: print("判定はTrueです。") else: print("判定はFalseです。")
一見すると「flag1 と flag2 が両方 True か、flag3 が True か」の判定をしているように見えます。
しかし実際には
(flag1 and flag2) or flag3
と解釈されます。
このとき flag1 and flag2
は True and False
なので結果は False ですが、その後の or flag3
で flag3
が True のため全体としては True になります。
意図を明確にしたい場合はカッコを入れて記述するのがベストです。
if文などでのor演算子の活用
ここでは具体的なコード例をさらに見ていきます。
or演算子はif文と組み合わせて使うことがとても多いです。
例えば、以下のようなユースケースがあります。
例1:数値の範囲外をチェック
age = 25 if age < 18 or age > 65: print("対象年齢外です。") else: print("対象年齢です。")
年齢を指定して、18歳より小さいか65歳より大きい場合を「対象外」とする例です。
複数の範囲判定をまとめたいときに便利です。
例2:正規表現と組み合わせる
import re text = "sample@example.com" if re.match(r".+@example\.com", text) or re.match(r".+@example\.jp", text): print("ドメインがexample.comまたはexample.jpです。") else: print("上記以外のドメインです。")
メールアドレスのドメインが .com
か .jp
なのかを判断したいケースです。
正規表現と「or」を使えば、一度のif文で複数パターンを簡潔にカバーできます。
or演算子のショートサーキット(短絡評価)
Pythonの or演算子 には ショートサーキット と呼ばれる特性があります。
簡単に言うと「左辺が True と判定されれば、右辺は評価しないで終わりにする」という動きです。
def is_true(): print("右側が評価されました。") return True result = True or is_true() print(result)
上記のコードでは、True or is_true()
の部分で左辺の True
が先に見つかるため、is_true()
は呼び出されず、その関数内の print
は実行されません。
結果として result
は True
となります。
一方で、左辺が False
や「偽」の値である場合は、右辺を評価することになります。
これにより、必要のない処理を飛ばしてパフォーマンスをやや向上させることもできるため、大規模な処理になるほど役に立ちます。
ショートサーキット特性
or演算子を使うと、左辺がTrueであれば右辺の評価をスキップする。
or演算子とエラー回避のアイデア
実務では、ある変数が None かどうかをチェックしつつ代替の処理を行いたいことがよくあります。
その際に or演算子で簡潔に書く方法は先ほど紹介しましたが、もう一歩踏み込むと以下のようにエラー回避に使う応用例も存在します。
def get_name(data): return data.get("name") # 存在しないキーのときはNoneになる想定 user_data = {} name = get_name(user_data) or "名無し" print(name) # "名無し"
get_name(user_data)
が None
を返した場合には、or演算子により "名無し"
が返ってくるので、エラーを防ぎつつ動作を継続できます。
こうした書き方は実務でもわりとよく見かけます。
or演算子を用いた条件式の短縮形
Pythonには「条件式」を一行で書く三項演算子のような構文がありますが、or演算子 を使うと、ある種「疑似三項演算子」のような働きをさせることもできます。
ただし、あまり複雑になりすぎると可読性が落ちるので注意が必要です。
x = 10 y = 0 message = (x / y) if y != 0 else "0除算エラー" print(message)
上記は三項演算子を使った例ですが、やや回りくどいと感じるなら、or演算子で対処する方法もあります。
一概にどちらが良いとは言えないので、チームで書くときはコーディング規約に従ったり、可読性を優先したりするとよいでしょう。
or演算子を使う上での注意点
or演算子は手軽に書ける反面、いくつか注意すべき点があります。
以下に挙げるポイントを押さえておくと、予想外の挙動を回避しやすくなります。
1. 「orで繋いだ」だけでは比較にならないケースに注意
先ほども紹介しましたが、以下のように書くと意図せず常に True になってしまいます。
if color == "red" or "blue": print("常に実行される可能性あり。")
比較演算子をつけ忘れないように注意しましょう。
2. 変数の型を確認する
or
演算子はブール型だけではなく、任意の型の値をそのまま返すという動作をすることがあります。
そのため、想定外の型が返ってこないように、あらかじめ変数の型を確認しておくと安全です。
3. 可読性を保つ
単純に何でもかんでも or で繋ぐと、長い条件式が読みにくくなる可能性があります。
特に if (cond1 or cond2 or cond3) and not cond4:
のように複雑化した場合は、カッコを入れて整理したり、if文を分割したりすると良いでしょう。
if文や代替処理を1行で書きたいがために、or演算子を多用しすぎると可読性が下がります。
読み手が意図をくみ取りやすい書き方を心がけましょう。
実務と紐づけた具体例:Webアプリでの権限チェック
最後に、Webアプリケーションの権限チェックを想定した例を紹介します。
実務でもよくあるケースなので、ある程度イメージが湧きやすいでしょう。
def check_access(user): # userは {"role": "admin"} といった辞書を想定 role = user.get("role") if role == "admin" or role == "editor": return True else: return False current_user = {"role": "editor"} if check_access(current_user): print("このユーザーには編集権限があります。") else: print("権限がありません。")
役割(role)が "admin"
か "editor"
のいずれかであれば True
を返すようにしています。
ユーザーがどの権限を持っているのかを1つずつチェックするとコードが長くなりがちですが、or を利用することでスッキリまとめられます。
まとめ
ここまで、Python or演算子 の特徴や使い方を初心者向けに解説してきました。
if文と組み合わせて複数の条件をまとめたり、デフォルト値を設定したり、エラー回避のテクニックとして活用するなど、さまざまなシーンで役立ちます。
- or演算子 は「いずれかの条件がTrueならTrue」となる論理演算子
- if文との組み合わせでよく使われる
- ショートサーキットにより、左辺がTrueなら右辺を評価しない
value or "default"
の形でデフォルト値を設定できる- 複雑な式や多数の条件を繋ぐときは、可読性を保つように工夫が必要
初心者のうちはまず、if 条件1 or 条件2:
の形で分かりやすく複数条件を扱う書き方から練習してみるとよいでしょう。
慣れてきたら、デフォルト値の設定や短絡評価の使い方にも挑戦してみてください。
皆さんがPythonでの開発を進めるうえで、or演算子 は必ずと言っていいほど活躍する要素のひとつになるはずです。