Python3 条件制御

Python の条件文は、1つまたは複数のステートメントの実行結果(True または False)によって、実行するコードブロックを決定します。

下の図で条件文の実行プロセスを簡単に理解できます:

コード実行プロセス:

条件判定キーワード

キーワード / 関数 説明 例
if 条件判定文。条件が True の場合にコードブロックを実行します if x > 0:
elif 複数条件の判定分岐(else if) elif x == 0:
else すべての条件を満たさない場合に実行 else:
pass 空文。プレースホルダー用で、構文の完全性を保証します if x > 0: pass
match 構造的パターンマッチング(Python 3.10+、switch に類似) match x: case 1: ...

if 文

Python の if 文の一般的な形式は次のとおりです:

if condition_1: statement_block_1 elif condition_2: statement_block_2 else: statement_block_3
  • "condition_1" が True の場合、"statement_block_1" ブロック文を実行します
  • "condition_1" が False の場合、"condition_2" を判定します
  • "condition_2" が True の場合、"statement_block_2" ブロック文を実行します
  • "condition_2" が False の場合、"statement_block_3" ブロック文を実行します

Python ではelifの代わりにelse ifを使用します。したがって、if 文のキーワードは次のとおりです:if – elif – else。

注意:

  • 1、各条件の後にはコロンを使用します:、これは条件を満たした後に実行するステートメントブロックであることを示します。
  • 2、インデントを使用してステートメントブロックを区切ります。同じインデント数のステートメントが集まって1つのステートメントブロックになります。
  • 3、Python にはswitch...case文はありませんが、Python 3.10 バージョンでmatch...caseが追加されました。機能も類似しているため、詳しくは下文を参照してください。

Gif デモ:

例

以下は簡単な if の例です:

例

#!/usr/bin/python3 var1 = 100 if var1: print ("1 - if 式の条件が true") print (var1) var2 = 0 if var2: print ("2 - if 式の条件が true") print (var2) print ("Good bye!")

上記のコードを実行すると、出力結果は次のとおりです:

1 - if 表达式条件为 true
100
Good bye!

結果からわかるように、変数 var2 が 0 のため、対応する if 内のステートメントは実行されませんでした。

以下の例では、犬の年齢計算の判定を示しています:

例

#!/usr/bin/python3 age = int(input("あなたの犬の年齢を入力してください:")) print("") if age <= 0: print("冗談でしょう!") elif age == 1: print("14歳の人間に相当します。") elif age == 2: print("22歳の人間に相当します。") elif age > 2: human = 22 + (age -2)*5 print("人間の年齢に換算:", human) ### 終了プロンプト input("Enter キーを押して終了")

上記のスクリプトを dog.py ファイルに保存し、そのスクリプトを実行します:

$ python3 dog.py 
请输入你家狗狗的年龄: 1

相当于 14 岁的人。
点击 enter 键退出

以下は if でよく使われる操作演算子です:

演算子 説明
< より小さい
<= より小さいか等しい
> より大きい
>= より大きいか等しい
== 等しい、2つの値が等しいかどうかを比較します
!= 等しくない

例

#!/usr/bin/python3 # プログラムは == 演算子を示しています # 数値を使用 print(5 == 6) # 変数を使用 x = 5 y = 8 print(x == y)

上記の例の出力結果:

False
False

high_low.py ファイルは数値の比較演算を示しています:

例

#!/usr/bin/python3 # この例は数字当てゲームを示しています number = 7 guess = -1 print("数字当てゲーム!") while guess != number: guess = int(input("あなたが予想する数字を入力してください:")) if guess == number: print("おめでとうございます、正解です!") elif guess < number: print("予想した数字が小さいです...") elif guess > number: print("予想した数字が大きいです...")

上記のスクリプトを実行すると、例の出力結果は次のとおりです:

$ python3 high_low.py 
数字猜谜游戏!
请输入你猜的数字:1
猜的数字小了...
请输入你猜的数字:9
猜的数字大了...
请输入你猜的数字:7
恭喜,你猜对了!

if のネスト

ネストされた if 文では、if...elif...else 構造を別の if...elif...else 構造の中に配置できます。

if 表达式1:
    语句
    if 表达式2:
        语句
    elif 表达式3:
        语句
    else:
        语句
elif 表达式4:
    语句
else:
    语句

例

# !/usr/bin/python3 num=int(input("数字を入力してください:")) if num%2==0: if num%3==0: print ("入力した数字は 2 と 3 で割り切れます") else: print ("入力した数字は 2 で割り切れますが、3 では割り切れません") else: if num%3==0: print ("入力した数字は 3 で割り切れますが、2 では割り切れません") else: print ("入力した数字は 2 と 3 で割り切れません")

上記のプログラムを test_if.py ファイルに保存し、実行後の出力結果は次のとおりです:

$ python3 test.py 
输入一个数字:6
你输入的数字可以整除 2 和 3

match...case

Python 3.10 では match...caseの条件判定が追加され、一連のif-elseを使用して判定する必要がなくなりました。

match の後のオブジェクトは順に case の後の内容とマッチングされます。マッチングが成功した場合は、マッチした式を実行し、そうでない場合は直接スキップします。_すべてにマッチできます。

SVG:match...case 実行フローチャート subject ボックス match subject 下向き矢印 case <pattern_1> ? マッチ action_1 マッチしない case <pattern_2> ? マッチ action_2 マッチしない case <pattern_3> ? マッチ action_3 マッチしない case _(ワイルドカード) 必ずマッチ wildcard

構文形式は次のとおりです:

match subject:
    case <pattern_1>:
        <action_1>
    case <pattern_2>:
        <action_2>
    case <pattern_3>:
        <action_3>
    case _:
        <action_wildcard>

case _:C や Java のdefault:に似ており、他の case がすべてマッチできない場合に、この case にマッチし、常にマッチが成功することを保証します。

例

def http_error(status):
    match status:
        case 400:
            return "Bad request"
        case 404:
            return "Not found"
        case 418:
            return "I'm a teapot"
        case _:
            return "Something's wrong with the internet"
 
print(http_error(400))
print(http_error(404))
print(http_error(418))
print(http_error(500))

上記は HTTP ステータスコードを出力する例です。複数のステータスコードの出力結果は次のとおりです:

Bad request
Not found
I'm a teapot
Something's wrong with the internet

1つの case に複数のマッチ条件を設定することもできます。条件は|で区切ります。例:

...
    case 401|403|404:
        return "Not allowed"
SVG:| 複数条件マッチの図 status 401 403 404 | 記号 | | 三本の線が集まる 結果ボックス "Not allowed"

例

def check_permission(status):
    match status:
        case 200:
            return "OK - リクエスト成功"
        case 301 | 302:
            return "Redirect - リダイレクト"
        case 401 | 403 | 404:
            return "Not allowed - 権限なしまたは見つかりません"
        case 500 | 502 | 503:
            return "Server Error - サーバーエラー"
        case _:
            return "Unknown status - 不明なステータスコード"
 
for code in [200, 301, 403, 500, 418]:
    print(f"ステータスコード {code}: {check_permission(code)}")

match...case詳細は以下を参照してください:Python match-case 文

その他の拡張