Условное управление в Python3

Условные операторы Python определяют, какой блок кода выполнять, исходя из результата выполнения (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

Общий вид оператора if в Python выглядит следующим образом:

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. Используйте отступы для разделения блоков инструкций. Инструкции с одинаковым числом отступов вместе образуют блок инструкций.
  • 3. В Python нет оператораswitch...case, но в версии 3.10 был добавлен операторmatch...caseс похожей функциональностью. Подробнее см. ниже.

Демонстрация GIF:

Пример

Ниже приведён простой пример с if:

Пример

#!/usr/bin/python3 var1 = 100 if var1: print ("1 - если условие выражения истинно") print (var1) var2 = 0 if var2: print ("2 - если условие выражения истинно") print (var2) print ("До свидания!")

После выполнения вышеуказанного кода вывод будет следующим:

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:

Operator Описание
< Меньше
<= Меньше или равно
> Больше
>= Больше или равно
== Равно, проверяет, равны ли два значения
!= Не равно

Пример

#!/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 box match subject Down arrow case <pattern_1> ? Match action_1 No match case <pattern_2> ? Match action_2 No match case <pattern_3> ? Match action_3 No match case _ (wildcard) Must match wildcard

Формат синтаксиса следующий:

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

case _:Похоже наdefault:в C и Java, когда другие 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 "Что-то не так с интернетом"
 
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

В одном case также можно задать несколько условий совпадения, разделённых|, например:

...
    case 401|403|404:
        return "Not allowed"
SVG: | схема сопоставления по нескольким условиям status 401 403 404 | symbol | | Three lines converge Result box "Not allowed"

Пример

def check_permission(status):
    match status:
        case 200:
            return "OK - запрос успешно выполнен"
        case 301 | 302:
            return "Перенаправление - перенаправление"
        case 401 | 403 | 404:
            return "Не разрешено - нет прав или не найдено"
        case 500 | 502 | 503:
            return "Ошибка сервера - ошибка сервера"
        case _:
            return "Неизвестный статус - неизвестный код состояния"
 
for code in [200, 301, 403, 500, 418]:
    print(f"Код состояния {code}: {check_permission(code)}")

match...caseДля получения дополнительной информации см.:Конструкция match-case в Python

Другие расширения