まえがき
Pythonでプログラミングを始めたばかりの方へ、条件分岐の基本であるif文についてわかりやすく解説します。if文は、プログラム内で条件に基づいた決定を行う際に使用されます。
この記事を通じて、if文の基本的な使い方と、いくつかの実例を学びましょう。
また、複合条件と3項演算子についても解説していますのでぜひ最後までお読みください。
ifやelseで空の処理(何もしない処理)の記述方法については下記記事をご参照ください。
Pythonのif/else文で何もしないコードを書く方法
Pythonのif文の基本
Pythonにおけるif文は、指定された条件がTrue(真)であるかどうかを評価します。
条件がTrueであれば、if文に続くブロックのコードが実行されます。
基本的な構文は以下の通りです:
| |
ここで、条件式は真偽値(TrueまたはFalse)を返す式でなければなりません。
基本的なif文
| |
この例では、ageが18以上の場合にのみ、“あなたは成人です。“と出力されます。
elseを使った条件分岐
if文だけでも条件に基づく処理は可能ですが、条件がFalseの場合に別の処理を行いたい場合はelseを使用します。
| |
if-else文の使用
| |
この例では、ageが18未満の場合に"あなたは未成年です。“と出力されます。
elifを使った複数の条件
2つ以上の条件を評価したい場合は、elif(else ifの略)を使用します。
| |
if-elif-else文の使用
| |
この例では、scoreが80以上、60以上、60未満に応じて異なるメッセージを出力します。
or演算子
or演算子は、複数の条件のうち少なくとも1つがTrueであれば、全体の条件式をTrueと評価します。
すなわち、条件A or 条件BがTrueであれば、条件式全体がTrueになります。
下記コードはユーザーが成人または会員である場合に割引を適用する例です。
| |
この例では、年齢が18歳以上、または会員であれば割引が適用されます。or演算子により、いずれかの条件が満たされていればTrueとなります。
and演算子
and演算子は、複数の条件がすべてTrueである場合に、全体の条件式をTrueと評価します。
条件A and 条件Bが両方ともTrueであれば、条件式全体がTrueになります。
下記コードはユーザーが成人かつ会員である場合にのみ割引を適用する例です。
| |
この例では、年齢が18歳以上かつ会員である場合にのみ割引が適用されます。and演算子により、両方の条件が満たされた場合にのみTrueとなります。
複合条件の使用(orとandの組み合わせ)
orとandを組み合わせて、より複雑な条件式を作成することも可能です。
ただし、複数の論理演算子を組み合わせる場合は、条件の評価順序を明確にするために括弧()を使用することが推奨されます。
下記コードは春休みまたは夏休み期間中で、かつ学生または年齢が18歳未満の場合に割引を適用する例です。
| |
この例では、orとandを組み合わせて、休暇期間中かつ対象者である場合に割引を適用しています。
条件式を括弧で囲むことで、評価の優先順位を明確にしています。
複合条件の使用(括弧を付けない場合)
括弧を付けない場合、Pythonでは論理演算子andとorの優先順位に従って条件が評価されます。andはorよりも優先順位が高いため、andの条件が先に評価され、その後でorの条件が評価されます。
この挙動は、特に複合条件を使用する際に意図しない結果を引き起こす可能性があります。
以下に、括弧を付けない場合の事例を示します。
春休みまたは夏休み期間中で、かつ学生または年齢が18歳未満の場合に割引を適用する条件を、括弧なしで記述した例です。
| |
この条件式では、andがorよりも優先されるため、実際の評価順序は以下のようになります。
- 1.
is_summer_break and is_studentが最初に評価されます。 - 2.その結果が
Trueであれば、is_spring_break or Trueの評価は常にTrueになります。 - 3.
age < 18はこの場合、orによって前の条件と結合されるため、この条件単独でTrueであっても全体の条件式に影響します。
上記例では、意図した通りに動作していますが、複雑な条件では意図しない結果を引き起こす可能性があります。
例えば、is_spring_breakがTrueで、他の条件がすべてFalseの場合でも、割引が適用されてしまいます。
この場合、休暇期間かつ(学生または18歳未満)という条件を満たさないため、この評価順序では正確な条件判定ができていません。
括弧を使用した正確な制御
上記のように括弧を付けないと優先順位が分かりにくくなりますし、期待通りに動かなくなる可能性があります。
複合条件を正確に制御するためには、括弧を使用して評価の順序を明示的に指定することが重要です。
以下のように括弧を追加することで、期待通りの評価順序となります。
| |
このように、括弧を適切に使用することで、複数の論理演算子を含む複雑な条件式でも、意図した通りの評価順序と結果を確実に得ることができます。
3項演算子の基本
続いてif文が1行で書ける3項演算子について解説します。
Pythonにおける3項演算子の基本形式は以下の通りです:
| |
条件式がTrueの場合は値1が、Falseの場合は値2が結果として返されます。
3項演算子の使用例
例えば、年齢に基づいて成人か未成年かを判定する場合、以下のように書くことができます:
| |
このコードは、ageが18以上の場合は"成人"を、そうでない場合は"未成年"をstatusに代入し、それを出力します。
3項演算子の利点
- 簡潔性:条件に基づく簡単な値の代入を一行で記述できます。
- 可読性:条件と結果が一目でわかるため、コードの意図を理解しやすくなります。
3項演算子の注意点
3項演算子は便利ですが、複雑な条件や多くの操作を含む場合には、可読性が低下することがあります。
その例を以下に示します。
この例では、3項演算子をネストして使用し、複数の条件を1行に詰め込んでいます。
これは一見すると簡潔に見えますが、実際にはコードの意図を迅速に理解することが難しくなります。
| |
このコードは、年齢と地域に基づいて特定の条件を満たすかどうかを判断し、その結果に基づいてpermission変数に値を代入しています。
しかし、このように複数の条件を一つの行で評価し、さらにネストした3項演算子を使用すると、コードの読み手が各条件の関係を正確に理解するのが難しくなります。
この例では、地域が"東京"であり、かつ年齢が18歳以上の場合は"許可”、東京であるが成人ではない場合は"不許可”、東京以外である場合は"確認必要"という判断をしています。
しかし、このロジックを追うのは一見して簡単ではなく、特に複雑な条件が絡む場合、コードの可読性を犠牲にしてしまいます。
このような場合、通常のif-else文を使用して各条件を明確に分岐させたほうが、コードの意図を理解しやすくなります。
if文の使用例
ここからは色々なif文の使用例を紹介していきます。
例1:ユーザー入力に基づく条件分岐
ユーザーからの入力に応じて異なるメッセージを表示します。
| |
例2: 複数の条件の組み合わせ
年齢と学生ステータスを基に、映画の割引資格があるかを判断します。
| |
繰り返しになりますが優先順位について確認しておきましょう。
Pythonでは、and演算子はor演算子よりも優先順位が高いですが、この例にはand演算子は含まれていません。
したがって、優先順位の観点から特に注意すべき点はありません。条件式は左から右へと評価されます。
この場合特に問題ありませんが、常に優先順位は意識しておくようにしましょう。
例3: リスト内の要素の確認
特定のアイテムがリスト内に存在するかどうかをチェックします。
| |
新しくfruits = ["りんご", "バナナ", "チェリー"]という記述と、inという演算子が記述されていますのでそれぞれ解説します。
リストの基本
リストは角括弧[]で囲まれ、その中にコンマ,で区切られた要素が含まれます。
この例では、fruitsという名前のリストが作成され、3つの文字列"りんご”, “バナナ”, “チェリー"が要素として含まれています。
リストの要素へのアクセス
リストの要素にアクセスするには、要素のインデックス(位置)を角括弧内に指定します。
インデックスは0から始まります。
例えば、fruitsリストの最初の要素にアクセスするには、以下のように記述します。
| |
in演算子の基本
in演算子は、指定された要素があるコレクション(リスト、タプル、辞書など)内に含まれているかどうかをチェックするために使用されます。
もし要素がコレクション内に存在すれば、Trueを返し、存在しなければFalseを返します。
このコードでは、fruitsという名前のリストがあり、3つの果物の名前が含まれています。if文とin演算子を使用して、“バナナ"という文字列がfruitsリスト内に存在するかどうかをチェックしています。
if "バナナ" in fruits: この行は、「もし"バナナ"がfruitsリスト内にあれば」という条件を表しています。
条件がTrue(つまり、“バナナ"がリスト内に存在する)場合、print("バナナがリストに含まれています!")が実行されます。
もしFalse(“バナナ"がリスト内に存在しない)場合、elseブロックが実行され、print("バナナはリストに含まれていません。")が出力されます。
例4: 範囲内の数値のチェック
数値が特定の範囲内にあるかどうかを判断します。
| |
例5: 文字列の長さに基づく条件分岐
ユーザー名の長さに基づいて、有効かどうかをチェックします。
| |
例6: パスワードの強度チェック
ユーザーから入力されたパスワードの強度をチェックし、条件に基づいてフィードバックを提供します。
| |
この例では、パスワードの最小長さとスペースの有無をチェックしています。
これにより、基本的なパスワードポリシーを実装することができます。
例7: 季節に応じた活動の提案
現在の月に基づいて、適切な季節の活動を提案します。
| |
この例では、ユーザーが入力した月に応じて、季節に合った活動を提案しています。
季節ごとに配列(リスト)を使用して、特定の月がどの季節に属するかを判断しています。
まとめ
if文は、Pythonにおける最も基本的な制御構造の一つです。
この記事を通じて、if文の基本的な使い方を理解し、実際のコードで条件分岐を行う方法を学びました。
プログラミングにおいて条件分岐は非常に重要な概念なので、ぜひこの知識を活用してください。