Python における条件分岐

PythonBeginner
オンラインで実践に進む

はじめに

この実験(Lab)では、条件分岐文を使用して Python プログラムの流れを制御する方法を学びます。まず、逐次的なプログラム実行の概念を理解し、次にプログラムが意思決定を行えるようにする条件付きロジックを導入します。

if文とif-else文を使用して単一分岐および二重分岐のロジックを実装し、if-elif-elseを使用して複数分岐のロジックを探ります。また、この実験では、ネストされたif文、pass文についても扱い、Python 3.10 以降で利用可能なmatch-case文を紹介します。この実験を終えるまでに、特定の条件に基づいて異なる命令ブロックを実行する Python コードを書けるようになるでしょう。

これは Guided Lab です。学習と実践を支援するためのステップバイステップの指示を提供します。各ステップを完了し、実践的な経験を積むために、指示に注意深く従ってください。過去のデータによると、この 初級 レベルの実験の完了率は 100%です。学習者から 100% の好評価を得ています。

逐次処理の流れの理解と条件分岐ロジックの導入

このステップでは、プログラミングにおける逐次フローの概念を探り、プログラムが意思決定を行えるようにする条件付きロジックを導入します。

逐次フローは、プログラム実行の最も基本的なタイプです。命令は上から下へ、一つずつ実行されます。

実験(Lab)環境では、~/projectディレクトリ内にsequential.pyというファイルがすでに作成されています。WebIDE の左側のファイルエクスプローラーでこのファイルを見つけて開いてください。

sequential.pyに次のコードを追加します。

print("First instruction")
print("Second instruction")
print("Third instruction")

ファイルを保存します。スクリプトを実行するには、WebIDE で統合ターミナルを開き、次のコマンドを実行します。

python ~/project/sequential.py

スクリプトに記述されている順序とまったく同じ順序で出力が表示されます。

First instruction
Second instruction
Third instruction

これは逐次フローを示しています。しかし、プログラムは特定の条件に基づいて異なる動作をすることがしばしば必要になります。ここで条件付きロジックが登場します。Python で最も基本的な条件分岐文はif文であり、指定された条件が真(true)の場合にのみコードブロックを実行します。

if文の基本的な構文は次のとおりです。

if condition:
    ## condition が true の場合に実行されるコード
    ## このブロックはインデント(字下げ)する必要があります

それでは、if文を含めるためにsequential.pyの内容を次のコードに置き換えてください。

x = 10

print("Before the if statement")

if x > 5:
    print("x is greater than 5")

print("After the if statement")

ファイルを保存し、再度実行します。

python ~/project/sequential.py

出力は次のようになります。

Before the if statement
x is greater than 5
After the if statement

条件 x > 5 は真であるため、if文内のインデントされたコードブロックが実行されました。

次に、条件が偽(false)の場合に何が起こるかを見てみましょう。xの値を3に変更してsequential.pyを修正します。

x = 3

print("Before the if statement")

if x > 5:
    print("x is greater than 5")

print("After the if statement")

ファイルを保存して実行します。

python ~/project/sequential.py

出力は次のようになります。

Before the if statement
After the if statement

今回、条件 x > 5 は偽であるため、if文内のコードブロックはスキップされました。この簡単な例は、if文がどのようにして私たちのプログラムに意思決定を導入するかを示しています。

if および if-else を使用した単一分岐と二重分岐ロジックの実装

このステップでは、if文とif-else文を使用して、単一分岐および二重分岐のロジックの実装に焦点を当てます。

if文は単一分岐の実行を可能にします。用意されているbranching.pyファイルを使用しましょう。ファイルエクスプローラーからbranching.pyを開いてください。

単一分岐のif文を示すために、次のコードを追加します。

score = 85

if score >= 70:
    print("Congratulations! You passed.")

print("End of program.")

ファイルを保存し、ターミナルから実行します。

python ~/project/branching.py

出力は次のようになります。

Congratulations! You passed.
End of program.

scoreが 85 であるため、条件は真となり、合格メッセージが出力されます。

if文は便利ですが、条件が偽(false)の場合に別のコードブロックを実行する必要があることがよくあります。ここでif-else文が登場し、二重分岐ロジックを提供します。

if-else文の構文は次のとおりです。

if condition:
    ## condition が true の場合に実行されるコード
else:
    ## condition が false の場合に実行されるコード

if-else文を使用するようにbranching.pyを修正しましょう。現在の内容を次のものに置き換えてください。

score = 85

if score >= 70:
    print("Congratulations! You passed.")
else:
    print("Keep trying. You can do better.")

print("End of program.")

スクリプトを保存して実行します。scoreが 85 の場合、ifブロックが実行されます。

Congratulations! You passed.
End of program.

次に、elseブロックをテストするために、branching.py内のscore65に変更します。

score = 65

if score >= 70:
    print("Congratulations! You passed.")
else:
    print("Keep trying. You can do better.")

print("End of program.")

ファイルを保存し、再度実行します。

python ~/project/branching.py

出力は次のようになります。

Keep trying. You can do better.
End of program.

scoreが 65 であるため、if条件は偽となり、elseブロック内のコードが実行されます。if-else文は、2 つの可能な結果を処理するために不可欠です。

if-elif-else を使用した複数分岐ロジックの実装

このステップでは、if-elif-else文を使用して、2 つ以上の結果の可能性がある状況を処理する方法を学びます。これは複数分岐ロジックを提供します。

if-elif-else構造は条件を逐次的にチェックします。if条件が偽(false)の場合、最初のelif("else if"の略)条件をチェックし、以下同様です。どの条件も真でない場合、elseブロックが実行されます。

基本的な構文は次のとおりです。

if condition1:
    ## condition1 が true の場合に実行される
elif condition2:
    ## condition1 が false で、かつ condition2 が true の場合に実行される
else:
    ## すべての先行する条件が false の場合に実行される

WebIDE でmultibranch.pyファイルを開いてください。数値スコアに基づいてアルファベットの成績を決定するスクリプトを作成します。次のコードを追加します。

score = 88

if score >= 90:
    print("Grade: A")
elif score >= 80:
    print("Grade: B")
elif score >= 70:
    print("Grade: C")
elif score >= 60:
    print("Grade: D")
else:
    print("Grade: F")

print("Grading complete.")

ファイルを保存し、ターミナルから実行します。

python ~/project/multibranch.py

出力は次のようになります。

Grade: B
Grading complete.

プログラムはscore >= 90(偽)をチェックし、次にscore >= 80(真)をチェックし、"Grade: B"を出力した後、チェーンの残りをスキップします。

次に、elseブロックをテストしましょう。multibranch.pyを修正して、スコアを55に設定します。

score = 55

if score >= 90:
    print("Grade: A")
elif score >= 80:
    print("Grade: B")
elif score >= 70:
    print("Grade: C")
elif score >= 60:
    print("Grade: D")
else:
    print("Grade: F")

print("Grading complete.")

スクリプトを保存して実行します。

python ~/project/multibranch.py

出力は次のようになります。

Grade: F
Grading complete.

最後に、検証の準備のために、multibranch.pyのスコアを75に変更します。

score = 75

if score >= 90:
    print("Grade: A")
elif score >= 80:
    print("Grade: B")
elif score >= 70:
    print("Grade: C")
elif score >= 60:
    print("Grade: D")
else:
    print("Grade: F")

print("Grading complete.")

ファイルを保存し、最後に一度スクリプトを実行します。

python ~/project/multibranch.py

出力は次のようになります。

Grade: C
Grading complete.

if-elif-else構造は、複数の異なるケースを処理するのに強力です。最初の真の条件に対応するコードブロックのみが実行されることを覚えておいてください。

ネストされた if 文と pass 文の調査

このステップでは、ネストされたif文(あるif文の中に別のif文が配置される構造)と、pass文について探求します。

ネストされたif文は、ある条件をチェックし、それが真であった場合に、さらに別の副次的な条件をチェックする必要がある場合に役立ちます。

WebIDE でnested_if.pyファイルを開きます。年齢と市民権に基づいて投票資格をチェックする以下のコードを追加します。

age = 20
is_citizen = True

if age >= 18:
    print("You are old enough to vote.")
    if is_citizen:
        print("You are also a citizen.")
        print("You are eligible to vote.")
    else:
        print("You are not a citizen.")
        print("You are not eligible to vote.")
else:
    print("You are not old enough to vote.")
    print("You are not eligible to vote.")

print("Voting eligibility check complete.")

ファイルを保存して実行します。

python ~/project/nested_if.py

出力は次のようになります。

You are old enough to vote.
You are also a citizen.
You are eligible to vote.
Voting eligibility check complete.

外部条件(age >= 18)と内部条件(is_citizen)の両方が真です。

次に、pass文を見てみましょう。pass文はヌル操作(null operation)であり、実行されても何も起こりません。構文上は文が必要だが、まだコードを記述していない場合にプレースホルダーとして役立ちます。

nested_if.pyの内容を、passを使用したこの例に置き換えます。

age = 18

if age >= 18:
    pass ## Placeholder for future code
else:
    print("You are not old enough to vote.")

print("Check complete.")

スクリプトを保存して実行します。

python ~/project/nested_if.py

出力は次のようになります。

Check complete.

if条件が真であるため、pass文が実行され(何もせず)、elseブロックはスキップされます。

最後に、検証の準備のために、nested_if.pyを修正し、最初のチェックに失敗する年齢を使用して元のロジックを使用します。

age = 16
is_citizen = True

if age >= 18:
    print("You are old enough to vote.")
    if is_citizen:
        print("You are eligible to vote.")
    else:
        print("You are not eligible to vote.")
else:
    print("You are not old enough to vote.")
    print("You are not eligible to vote.")

print("Voting eligibility check complete.")

スクリプトを保存して実行します。

python ~/project/nested_if.py

出力は次のようになります。

You are not old enough to vote.
You are not eligible to vote.
Voting eligibility check complete.

ここでは、外部のif条件(age >= 18)が偽であるため、外部のelseブロックが実行され、内部のif-else構造全体がスキップされます。

match-case ステートメントの紹介 (Python 3.10+)

このステップでは、Python 3.10 で導入された構造的パターンマッチングのための機能であるmatch-case文を探求します。これは、特定のシナリオにおいてif-elif-elseチェーンの読みやすい代替手段を提供します。

match-case文は、値を一連のパターンと比較し、最初に一致したパターンのコードブロックを実行します。

基本的な構文は次のとおりです。

match value:
    case pattern1:
        ## pattern1 のコード
    case pattern2:
        ## pattern2 のコード
    case _:
        ## マッチしない場合のコード (ワイルドカード)

WebIDE でmatch_case.pyファイルを開きます。数に基づいて曜日を出力する以下のコードを追加します。

day_number = 3

match day_number:
    case 1:
        print("Monday")
    case 2:
        print("Tuesday")
    case 3:
        print("Wednesday")
    case 4:
        print("Thursday")
    case 5:
        print("Friday")
    case 6:
        print("Saturday")
    case 7:
        print("Sunday")
    case _:
        print("Invalid day number")

print("Day check complete.")

ファイルを保存して実行します。この環境のpythonコマンドは、互換性のあるバージョンがデフォルトで設定されています。

python ~/project/match_case.py

出力は次のようになります。

Wednesday
Day check complete.

3case 3:に一致するため、"Wednesday"が出力されます。

次に、ワイルドカードケースをテストします。match_case.pyを修正し、無効な数値を使用します。

day_number = 10

match day_number:
    case 1:
        print("Monday")
    case 2:
        print("Tuesday")
    case 3:
        print("Wednesday")
    case 4:
        print("Thursday")
    case 5:
        print("Friday")
    case 6:
        print("Saturday")
    case 7:
        print("Sunday")
    case _:
        print("Invalid day number")

print("Day check complete.")

スクリプトを保存して実行します。

python ~/project/match_case.py

出力は次のようになります。

Invalid day number
Day check complete.

10はいずれの特定のケースにも一致しないため、ワイルドカードのcase _:が一致します。

最後に、検証の準備のために、match_case.pyday_number6に変更します。

day_number = 6

match day_number:
    case 1:
        print("Monday")
    case 2:
        print("Tuesday")
    case 3:
        print("Wednesday")
    case 4:
        print("Thursday")
    case 5:
        print("Friday")
    case 6:
        print("Saturday")
    case 7:
        print("Sunday")
    case _:
        print("Invalid day number")

print("Day check complete.")

スクリプトを保存して実行します。

python ~/project/match_case.py

出力は次のようになります。

Saturday
Day check complete.

match-case文は、長いif-elif-elseチェーンと比較して、複数の特定の値を処理するためのよりクリーンな方法となり得ます。

まとめ

この実験(Lab)では、Python プログラムの流れを制御する方法を学びました。まず逐次的なプログラムの流れから始め、次に条件付きロジックに進みました。単一分岐ロジックをifで、二分岐ロジックをif-elseで、複数分岐ロジックをif-elif-elseで実装しました。また、ネストされたif文を使用してより複雑な決定構造を作成する方法や、コードのプレースホルダーとしてpass文を使用する方法を探求しました。最後に、パターンベースの分岐のための最新の代替手段としてmatch-case文が紹介されました。これで、特定の条件に基づいて決定を下し、異なるコードパスを実行できる Python プログラムを作成する準備が整いました。