Условные операторы в Python

PythonBeginner
Практиковаться сейчас

Введение

В этой лабораторной работе вы научитесь управлять потоком выполнения ваших программ на Python с помощью условных операторов. Мы начнем с понимания концепции последовательного выполнения программы, а затем введем условную логику, которая позволяет программам принимать решения.

Вы реализуете одно- и двухветвевую логику с использованием операторов if и if-else, а также рассмотрите многоветвевую логику с помощью if-elif-else. Лабораторная работа также охватит вложенные операторы if, оператор pass и представит оператор match-case, доступный в Python 3.10 и более поздних версиях. К концу этой лабораторной работы вы сможете писать код на Python, который выполняет различные блоки инструкций на основе определенных условий.

Это Guided Lab, который предоставляет пошаговые инструкции, чтобы помочь вам учиться и практиковаться. Внимательно следуйте инструкциям, чтобы выполнить каждый шаг и получить практический опыт. Исторические данные показывают, что это лабораторная работа уровня начальный с процентом завершения 100%. Он получил 100% положительных отзывов от учащихся.

Понимание последовательного потока и введение условной логики

На этом шаге мы рассмотрим концепцию последовательного потока (sequential flow) в программировании и введем условную логику, которая позволяет программам принимать решения.

Последовательный поток — это самый базовый тип выполнения программы. Инструкции выполняются одна за другой, сверху вниз.

В рабочей среде (lab environment) для вас уже создан файл с именем sequential.py в директории ~/project. Найдите этот файл в проводнике файлов WebIDE на левой панели и откройте его.

Добавьте следующий код в sequential.py:

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

Сохраните файл. Чтобы запустить скрипт, откройте интегрированный терминал в WebIDE и выполните следующую команду:

python ~/project/sequential.py

Вы увидите вывод, напечатанный в том же порядке, в котором операторы print появляются в скрипте:

First instruction
Second instruction
Third instruction

Это демонстрирует последовательный поток. Однако программам часто требуется вести себя по-разному в зависимости от определенных условий. Здесь и вступает в игру условная логика. Самым фундаментальным условным оператором в Python является оператор if, который выполняет блок кода только в том случае, если указанное условие истинно (true).

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

if condition:
    ## Код для выполнения, если условие истинно
    ## Этот блок должен иметь отступ

Теперь замените содержимое sequential.py следующим кодом, чтобы включить оператор if:

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). Измените sequential.py, присвоив переменной x значение 3:

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 полезен, нам часто требуется выполнить другой блок кода, когда условие ложно. Здесь на помощь приходит оператор if-else, который обеспечивает двухветвевую логику.

Синтаксис оператора if-else следующий:

if condition:
    ## Код для выполнения, если условие истинно
else:
    ## Код для выполнения, если условие ложно

Давайте модифицируем branching.py для использования оператора if-else. Замените текущее содержимое следующим:

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, измените score на 65 в branching.py:

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 необходим для обработки двух возможных результатов.

Реализация многоветвной логики с помощью if-elif-else

На этом шаге мы узнаем, как обрабатывать ситуации с более чем двумя возможными результатами, используя оператор if-elif-else, который обеспечивает многоветвевую логику.

Структура if-elif-else последовательно проверяет условия. Если условие if ложно, она проверяет первое условие elif (сокращение от "else if"), и так далее. Если ни одно из условий не истинно, выполняется блок else.

Базовый синтаксис следующий:

if condition1:
    ## Выполняется, если condition1 истинно
elif condition2:
    ## Выполняется, если condition1 ложно и condition2 истинно
else:
    ## Выполняется, если все предыдущие условия ложны

Откройте файл multibranch.py в WebIDE. Мы напишем скрипт для определения буквенной оценки на основе числового балла. Добавьте следующий код:

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.

Наконец, чтобы подготовиться к проверке, измените балл на 75 в multibranch.py:

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 помещен внутрь другого, а также узнаем об операторе pass.

Вложенные операторы if полезны, когда вам нужно проверить одно условие, и если оно истинно, проверить другое под-условие.

Откройте файл nested_if.py в WebIDE. Добавьте следующий код, который проверяет право на голосование на основе возраста и гражданства.

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 является нулевой операцией; ничего не происходит при его выполнении. Он служит полезным заполнителем (placeholder), когда синтаксически требуется оператор, но вы еще не написали для него код.

Замените содержимое 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+)

На этом шаге мы рассмотрим оператор match-case, функцию, представленную в Python 3.10 для структурного сопоставления с образцом (structural pattern matching). Он предоставляет более читаемую альтернативу цепочкам if-elif-else для определенных сценариев.

Оператор match-case сравнивает значение с серией шаблонов (patterns) и выполняет блок кода для первого совпавшего шаблона.

Базовый синтаксис следующий:

match value:
    case pattern1:
        ## Код для pattern1
    case pattern2:
        ## Код для pattern2
    case _:
        ## Код для отсутствия совпадения (шаблон-заглушка/wildcard)

Откройте файл match_case.py в WebIDE. Добавьте следующий код для вывода дня недели на основе числа.

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.

Значение 3 совпадает с case 3:, поэтому выводится "Wednesday".

Теперь протестируем случай с шаблоном-заглушкой (wildcard). Измените 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), совпадает шаблон-заглушка case _:.

Наконец, чтобы подготовиться к проверке, измените day_number на 6 в match_case.py:

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.

Резюме

В этой лабораторной работе вы узнали, как управлять потоком выполнения ваших программ на Python. Вы начали с последовательного потока выполнения программы, а затем перешли к условной логике. Вы реализовали однопоточную логику с помощью if, двухпоточную логику с помощью if-else и многопоточную логику с помощью if-elif-else. Вы также изучили, как создавать более сложные структуры принятия решений с помощью вложенных операторов if и как использовать оператор pass в качестве заполнителя кода. Наконец, вы познакомились с оператором match-case как с современной альтернативой для ветвления на основе шаблонов. Теперь вы готовы писать программы на Python, которые могут принимать решения и выполнять различные пути кода на основе определенных условий.