JavaScriptを有効にしてください

Pythonのif文の基本から複合条件と3項演算子まで解説

 · 

Pythonでプログラミングを始めたばかりの方へ、条件分岐の基本であるif文についてわかりやすく解説します。
if文は、プログラム内で条件に基づいた決定を行う際に使用されます。
この記事を通じて、if文の基本的な使い方と、いくつかの実例を学びましょう。
また、複合条件と3項演算子についても解説していますのでぜひ最後までお読みください。

Pythonのif文の基本

Pythonにおけるif文は、指定された条件がTrue(真)であるかどうかを評価します。
条件がTrueであれば、if文に続くブロックのコードが実行されます。
基本的な構文は以下の通りです:

1
2
if 条件式:
    # 条件式がTrueの場合に実行されるコード

ここで、条件式は真偽値(TrueまたはFalse)を返す式でなければなりません。

基本的なif文

1
2
3
age = 20
if age >= 18:
    print("あなたは成人です。")

この例では、age18以上の場合にのみ、“あなたは成人です。“と出力されます。

elseを使った条件分岐

if文だけでも条件に基づく処理は可能ですが、条件がFalseの場合に別の処理を行いたい場合はelseを使用します。

1
2
3
4
if 条件式:
    # 条件式がTrueの場合に実行されるコード
else:
    # 条件式がFalseの場合に実行されるコード

if-else文の使用

1
2
3
4
5
age = 16
if age >= 18:
    print("あなたは成人です。")
else:
    print("あなたは未成年です。")

この例では、age18未満の場合に"あなたは未成年です。“と出力されます。

elifを使った複数の条件

2つ以上の条件を評価したい場合は、elif(else ifの略)を使用します。

1
2
3
4
5
6
if 条件式1:
    # 条件式1がTrueの場合に実行されるコード
elif 条件式2:
    # 条件式1がFalseかつ条件式2がTrueの場合に実行されるコード
else:
    # すべての条件式がFalseの場合に実行されるコード

if-elif-else文の使用

1
2
3
4
5
6
7
8
score = 75

if score >= 80:
    print("優秀です!")
elif score >= 60:
    print("合格です。")
else:
    print("残念ですが、不合格です。")

この例では、score80以上、60以上、60未満に応じて異なるメッセージを出力します。

or演算子

or演算子は、複数の条件のうち少なくとも1つがTrueであれば、全体の条件式をTrueと評価します。
すなわち、条件A or 条件BがTrueであれば、条件式全体がTrueになります。

下記コードはユーザーが成人または会員である場合に割引を適用する例です。

1
2
3
4
5
6
7
age = 20
is_member = False

if age >= 18 or is_member:
    print("割引が適用されます。")
else:
    print("割引は適用されません。")

この例では、年齢が18歳以上、または会員であれば割引が適用されます。
or演算子により、いずれかの条件が満たされていればTrueとなります。

and演算子

and演算子は、複数の条件がすべてTrueである場合に、全体の条件式をTrueと評価します。
条件A and 条件Bが両方ともTrueであれば、条件式全体がTrueになります。

下記コードはユーザーが成人かつ会員である場合にのみ割引を適用する例です。

1
2
3
4
5
6
7
age = 20
is_member = True

if age >= 18 and is_member:
    print("割引が適用されます。")
else:
    print("割引は適用されません。")

この例では、年齢が18歳以上かつ会員である場合にのみ割引が適用されます。
and演算子により、両方の条件が満たされた場合にのみTrueとなります。

複合条件の使用(orとandの組み合わせ)

orandを組み合わせて、より複雑な条件式を作成することも可能です。
ただし、複数の論理演算子を組み合わせる場合は、条件の評価順序を明確にするために括弧()を使用することが推奨されます。

下記コードは春休みまたは夏休み期間中で、かつ学生または年齢が18歳未満の場合に割引を適用する例です。

1
2
3
4
5
6
7
8
9
is_spring_break = False
is_summer_break = True
is_student = True
age = 17

if (is_spring_break or is_summer_break) and (is_student or age < 18):
    print("特別割引が適用されます。")
else:
    print("特別割引は適用されません。")

この例では、orandを組み合わせて、休暇期間中かつ対象者である場合に割引を適用しています。
条件式を括弧で囲むことで、評価の優先順位を明確にしています。

複合条件の使用(括弧を付けない場合)

括弧を付けない場合、Pythonでは論理演算子andorの優先順位に従って条件が評価されます。
andorよりも優先順位が高いため、andの条件が先に評価され、その後でorの条件が評価されます。
この挙動は、特に複合条件を使用する際に意図しない結果を引き起こす可能性があります。
以下に、括弧を付けない場合の事例を示します。

春休みまたは夏休み期間中で、かつ学生または年齢が18歳未満の場合に割引を適用する条件を、括弧なしで記述した例です。

1
2
3
4
5
6
7
8
9
is_spring_break = False
is_summer_break = True
is_student = True
age = 17

if is_spring_break or is_summer_break and is_student or age < 18:
    print("特別割引が適用されます。")
else:
    print("特別割引は適用されません。")

この条件式では、andがorよりも優先されるため、実際の評価順序は以下のようになります。

  • 1.is_summer_break and is_studentが最初に評価されます。
  • 2.その結果がTrueであれば、is_spring_break or Trueの評価は常にTrueになります。
  • 3.age < 18はこの場合、orによって前の条件と結合されるため、この条件単独でTrueであっても全体の条件式に影響します。

上記例では、意図した通りに動作していますが、複雑な条件では意図しない結果を引き起こす可能性があります。
例えば、is_spring_breakTrueで、他の条件がすべてFalseの場合でも、割引が適用されてしまいます。
この場合、休暇期間かつ(学生または18歳未満)という条件を満たさないため、この評価順序では正確な条件判定ができていません。

括弧を使用した正確な制御

上記のように括弧を付けないと優先順位が分かりにくくなりますし、期待通りに動かなくなる可能性があります。
複合条件を正確に制御するためには、括弧を使用して評価の順序を明示的に指定することが重要です。

以下のように括弧を追加することで、期待通りの評価順序となります。

1
2
if (is_spring_break or is_summer_break) and (is_student or age < 18):
    print("特別割引が適用されます。")

このように、括弧を適切に使用することで、複数の論理演算子を含む複雑な条件式でも、意図した通りの評価順序と結果を確実に得ることができます。

3項演算子の基本

続いてif文が1行で書ける3項演算子について解説します。
Pythonにおける3項演算子の基本形式は以下の通りです:

1
値1 if 条件式 else 値2

条件式がTrueの場合は値1が、Falseの場合は値2が結果として返されます。

3項演算子の使用例

例えば、年齢に基づいて成人か未成年かを判定する場合、以下のように書くことができます:

1
2
3
age = 20
status = "成人" if age >= 18 else "未成年"
print(status)

このコードは、ageが18以上の場合は"成人"を、そうでない場合は"未成年"statusに代入し、それを出力します。

3項演算子の利点

  • 簡潔性:条件に基づく簡単な値の代入を一行で記述できます。
  • 可読性:条件と結果が一目でわかるため、コードの意図を理解しやすくなります。

3項演算子の注意点

3項演算子は便利ですが、複雑な条件や多くの操作を含む場合には、可読性が低下することがあります。
その例を以下に示します。

この例では、3項演算子をネストして使用し、複数の条件を1行に詰め込んでいます。
これは一見すると簡潔に見えますが、実際にはコードの意図を迅速に理解することが難しくなります。

1
2
3
4
5
age = 20
location = "東京"
status = "成人" if age >= 18 else "未成年"
permission = "許可" if location == "東京" and status == "成人" else "不許可" if location == "東京" else "確認必要"
print(permission)

このコードは、年齢と地域に基づいて特定の条件を満たすかどうかを判断し、その結果に基づいてpermission変数に値を代入しています。
しかし、このように複数の条件を一つの行で評価し、さらにネストした3項演算子を使用すると、コードの読み手が各条件の関係を正確に理解するのが難しくなります。

この例では、地域が"東京"であり、かつ年齢が18歳以上の場合は"許可”、東京であるが成人ではない場合は"不許可”、東京以外である場合は"確認必要"という判断をしています。
しかし、このロジックを追うのは一見して簡単ではなく、特に複雑な条件が絡む場合、コードの可読性を犠牲にしてしまいます。

このような場合、通常のif-else文を使用して各条件を明確に分岐させたほうが、コードの意図を理解しやすくなります。

if文の使用例

ここからは色々なif文の使用例を紹介していきます。

例1:ユーザー入力に基づく条件分岐

ユーザーからの入力に応じて異なるメッセージを表示します。

1
2
3
4
5
6
7
8
user_input = input("好きな果物は何ですか? ")

if user_input == "りんご":
    print("りんごは健康に良いですね!")
elif user_input == "バナナ":
    print("バナナはエネルギーの素晴らしい源です!")
else:
    print(user_input + "も美味しいですね!")

例2: 複数の条件の組み合わせ

年齢と学生ステータスを基に、映画の割引資格があるかを判断します。

1
2
3
4
5
6
7
age = 22
is_student = True

if age < 18 or is_student:
    print("割引が適用されます!")
else:
    print("通常料金です。")

繰り返しになりますが優先順位について確認しておきましょう。
Pythonでは、and演算子はor演算子よりも優先順位が高いですが、この例にはand演算子は含まれていません。
したがって、優先順位の観点から特に注意すべき点はありません。条件式は左から右へと評価されます。
この場合特に問題ありませんが、常に優先順位は意識しておくようにしましょう。

例3: リスト内の要素の確認

特定のアイテムがリスト内に存在するかどうかをチェックします。

1
2
3
4
5
6
fruits = ["りんご", "バナナ", "チェリー"]

if "バナナ" in fruits:
    print("バナナがリストに含まれています!")
else:
    print("バナナはリストに含まれていません。")

新しくfruits = ["りんご", "バナナ", "チェリー"]という記述と、inという演算子が記述されていますのでそれぞれ解説します。

リストの基本

リストは角括弧[]で囲まれ、その中にコンマ,で区切られた要素が含まれます。
この例では、fruitsという名前のリストが作成され、3つの文字列"りんご”, “バナナ”, “チェリー"が要素として含まれています。

リストの要素へのアクセス

リストの要素にアクセスするには、要素のインデックス(位置)を角括弧内に指定します。
インデックスは0から始まります。
例えば、fruitsリストの最初の要素にアクセスするには、以下のように記述します。

1
2
first_fruit = fruits[0]
print(first_fruit)  # りんご

in演算子の基本

in演算子は、指定された要素があるコレクション(リスト、タプル、辞書など)内に含まれているかどうかをチェックするために使用されます。
もし要素がコレクション内に存在すれば、Trueを返し、存在しなければFalseを返します。

このコードでは、fruitsという名前のリストがあり、3つの果物の名前が含まれています。
if文とin演算子を使用して、“バナナ"という文字列がfruitsリスト内に存在するかどうかをチェックしています。

if "バナナ" in fruits: この行は、「もし"バナナ"がfruitsリスト内にあれば」という条件を表しています。
条件がTrue(つまり、“バナナ"がリスト内に存在する)場合、print("バナナがリストに含まれています!")が実行されます。
もしFalse(“バナナ"がリスト内に存在しない)場合、elseブロックが実行され、print("バナナはリストに含まれていません。")が出力されます。

例4: 範囲内の数値のチェック

数値が特定の範囲内にあるかどうかを判断します。

1
2
3
4
5
6
number = 15

if 10 <= number <= 20:
    print("数値は10から20の範囲内です。")
else:
    print("数値は範囲外です。")

例5: 文字列の長さに基づく条件分岐

ユーザー名の長さに基づいて、有効かどうかをチェックします。

1
2
3
4
5
6
7
8
username = "user123"

if len(username) < 6:
    print("ユーザー名は6文字以上である必要があります。")
elif len(username) > 12:
    print("ユーザー名は12文字以下である必要があります。")
else:
    print("ユーザー名は適切な長さです。")

例6: パスワードの強度チェック

ユーザーから入力されたパスワードの強度をチェックし、条件に基づいてフィードバックを提供します。

1
2
3
4
5
6
7
8
password = input("新しいパスワードを入力してください: ")

if len(password) < 8:
    print("パスワードは8文字以上である必要があります。")
elif " " in password:
    print("パスワードにスペースを含めることはできません。")
else:
    print("パスワードが設定されました。")

この例では、パスワードの最小長さとスペースの有無をチェックしています。
これにより、基本的なパスワードポリシーを実装することができます。

例7: 季節に応じた活動の提案

現在の月に基づいて、適切な季節の活動を提案します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
month = input("現在の月を入力してください(例:1月): ")

if month in ["12月", "1月", "2月"]:
    print("冬ですね。スキーやスノーボードを楽しんでみてはいかがでしょうか?")
elif month in ["3月", "4月", "5月"]:
    print("春が来ました。お花見やハイキングがおすすめです!")
elif month in ["6月", "7月", "8月"]:
    print("夏の季節です!ビーチやキャンプを楽しんでください。")
elif month in ["9月", "10月", "11月"]:
    print("秋が到来しました。紅葉狩りや読書がぴったりです。")
else:
    print("入力された月が正しくありません。")

この例では、ユーザーが入力した月に応じて、季節に合った活動を提案しています。
季節ごとに配列(リスト)を使用して、特定の月がどの季節に属するかを判断しています。

まとめ

if文は、Pythonにおける最も基本的な制御構造の一つです。
この記事を通じて、if文の基本的な使い方を理解し、実際のコードで条件分岐を行う方法を学びました。
プログラミングにおいて条件分岐は非常に重要な概念なので、ぜひこの知識を活用してください。


Pythonを本格的に勉強したい方は、初心者に優しく分かりやすいPyQで学ぶのが最適です。
価格もリーズナブルなのでオススメです。



スポンサーリンク

共有

もふもふ
著者
もふもふ
プログラマ。汎用系→ゲームエンジニア→Webエンジニア→QAエンジニア