Введение
В этой лабораторной работе вы научитесь управлять потоком выполнения ваших программ на Python с помощью условных операторов. Мы начнем с понимания концепции последовательного выполнения программы, а затем введем условную логику, которая позволяет программам принимать решения.
Вы реализуете одно- и двухветвевую логику с использованием операторов if и if-else, а также рассмотрите многоветвевую логику с помощью if-elif-else. Лабораторная работа также охватит вложенные операторы if, оператор pass и представит оператор match-case, доступный в Python 3.10 и более поздних версиях. К концу этой лабораторной работы вы сможете писать код на Python, который выполняет различные блоки инструкций на основе определенных условий.
Понимание последовательного потока и введение условной логики
На этом шаге мы рассмотрим концепцию последовательного потока (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, которые могут принимать решения и выполнять различные пути кода на основе определенных условий.



