Отредактировано
Разбираемся в основных управляющих конструкциях в Python: if, else, switch, for и while — синтаксис, примеры использования, а также лучшие практики написания кода.
3140 открытий140 показов
Программы состоят из последовательности команд. Но часто вам нужно выполнять различные действия или повторять операции. Для этого есть управляющие конструкции — if, else, switch, for, while — они помогают написать гибкую программу с алгоритмом любой сложности. Управляющие конструкции в целом похожи в разных языках, но мы рассмотрим их работу в языке Python. Ниже рассмотрим разные типы конструкций.
Условные конструкции
В Python это
, if…els
eelif
и case/match
(аналог switch, появился только в Python 3.10).
Синтаксис
Суть конструкции примерно такая:
- Пишем блок if с условным выражением — он будет возвращать истину или ложь.
- Здесь может быть опциональная часть c elif.
- Завершаем условие опциональным блоком с else.
В кодовой записи это будет выглядеть так:
if условие1: # выполняется, если условие1 истинно elif условие2: # выполняется, если условие1 ложно, а условие2 истинно elif условие3: # выполняется, если условие1 и условие2 ложны, а условие3 истинно else: # выполняется, если все предыдущие условия ложны
if else
Это оператор, который управляет условным ветвлением. if используется, когда нужно выполнить блок кода при истинном условии. А если условие ложно, то выполняется блок else. Это одна из самых базовых и часто используемых конструкций в принципе.
Вот самый простой пример:
x = 5 if x == 5: print ("true") > true
В этом примере программа проверяет, больше ли переменная x числа 5. Если условие истинно, выводится сообщение “x больше 5”. В противном случае выполняется блок else
:
x = 10 if x > 5: print("x больше 5") else: print("x меньше или равно 5") > x больше 5
Про elif
Elif — if + else. Оператор позволяет создавать многоуровневые условия, которые выполняются только в том случае, если все предыдущие оказались ложными. Это делает код более читаемым и структурированным, плюс не нужно использовать if по сто раз. Elif особенно спасает в тех случаях, когда нужно сравнить одну переменную с разными величинами.
Вот наш кредитный пример:
character = 'Дарт Вейдер' if character == 'Дарт Вейдер': print('Люк, я твой отец... (тяжелое дыхание)') elif character == 'Йода': print('Да пребудет с тобой сила!') elif character == 'Хан Соло': print('Потрясающая барышня. Или я убью ее или я в нее влюблюсь!') elif character == 'Чубакка': print('ААААРРРРРРРР! (переводить не будем)') elif character == 'R2-D2': print('*бип-бип-бип* (что-то важное, но непонятное)') else: print('Этот персонаж не из нашей галактики...')
Конструкция может включать сколько угодно условий, которые проверяются по порядку. Но первое условие всегда задается через if.
Важно помнить: как только одно из условий оказывается истинным, выполняется соответствующий блок кода, а остальные условия игнорируются. Это значит, что даже если несколько условий верны, сработает только первый подходящий блок.
Если ни одно из условий if или elif не выполняется, программа переходит к блоку else(если он есть).
Примеры вложенных конструкций
Конструкции if и else могут быть вложенными, то есть одна конструкция может содержать внутри другую. Это нужно, когда требуется проверить несколько условий.
x = 10 if x > 5: if x < 15: print("x находится между 5 и 15") else: print("x больше или равно 15") else: print("x меньше или равно 5")
Здесь сначала проверяется, больше ли x числа 5. Если это так, программа проверяет, меньше ли x числа 15. В зависимости от результата запускается соответствующий блок кода.
switch, или match/case
В Python нет классической конструкции switch, как, например, в Java или C#. Однако в Python 3.10 появилась возможность использовать конструкцию match case, которая выполняет похожие функции.
Суть ее в том, что она упрощает проверку переменной на соответствие нескольким величинам. Это более удобная и читабельная альтернатива куче if-elif-else, особенно когда нужно сравнить одну переменную с несколькими значениями.
Как начать карьеру веб-разработчикаtproger.ru
Структура примерно такая:
x = 2 match x: case 1: print("x равно 1") case 2: print("x равно 2") case _: print("x не равно 1 или 2")
Здесь переменная x сравнивается с различными значениями. Если x совпадает с одним из значений, выполняется соответствующий блок кода. Конструкция case используется как аналог default в других языках.
Простой код будет выглядеть так:
day = "понедельник" match day: case "понедельник" | "вторник" | "среда" | "четверг" | "пятница": print("Рабочий день") case "суббота" | "воскресенье": print("Выходной день") case _: print("Неизвестный день")
Здесь программа проверяет, является ли день недели рабочим или выходным.
Циклы
В Питоне два цикла — while
и for
. While
— универсальный, а for
нужен, чтобы поэлементно обойти последовательность. Посмотрим, как они работают.
while
while
позволяет повторять выполнение блока кода до тех пор, пока выполняется определенное условие. Он больше подходит для тех случаев, когда количество итераций изначально неизвестно.
while условие: # блок кода, который выполняется, пока условие истинно
Вот простой пример:
count = 0 while count < 5: print(f"Счетчик: {count}") count += 1
Вывод будет такой:
Счетчик: 0 Счетчик: 1 Счетчик: 2 Счетчик: 3 Счетчик: 4
Какие есть особенности
- Бесконечный цикл. Если условие всегда истинно,
while
будет выполняться бесконечно. Это полезно лишь в некоторых случаях, например, в простых играх, но обычно это ошибка.
while True: print("Б=бесконечность")
Чтобы остановить бесконечный цикл, можно использовать break
или сочетание клавиш Ctrl+C в терминале.
break
. Этот оператор break позволяет досрочно выйти из цикла, даже если условие еще истинно.
count = 0 while True: print(f"Счетчик: {count}") count += 1 if count >= 5: break
Вывод:
Счетчик: 0 Счетчик: 1 Счетчик: 2 Счетчик: 3 Счетчик: 4
continue
. Этот continue позволяет пропустить оставшуюся часть цикла и начать следующую проверку условия.
count = 0 while count < 5: count += 1 if count == 3: continue print(f"Счетчик: {count}")
Вывод:
Счетчик: 1 Счетчик: 2 Счетчик: 4 Счетчик: 5
- Цикл с
else
. В Питоне циклwhile
может иметь блокelse
, который выполняется, если цикл завершился естественным образом (то есть условие стало ложным, и не написали break).
count = 0 while count < 3: print(f"Счетчик: {count}") count += 1 else: print("На этом наши полномочия все!")
Вывод:
Счетчик: 0 Счетчик: 1 Счетчик: 2 На этом наши полномочия все
В целом цикл while можно использовать практически для чего угодно, но обычно учатся на простеньких играх. Например — «Угадай число».
import random number = random.randint(1, 100) attempts = 0 while True: guess = int(input("Угадай число от 1 до 100: ")) attempts += 1 if guess < number: print("Загаданное число больше.") elif guess > number: print("Загаданное число меньше.") else: print(f"Кайф! Ты угадал число за {attempts} попыток.") break
Примеры, когда использовать while:
- Когда количество итераций неизвестно — при обработке пользовательского ввода или чтении данных из файла до конца.
- Для бесконечных процессов — в играх или серверных приложениях.
- Когда условие зависит от изменяющихся данных — при моделировании или симуляциях.
for
Цикл for позволяет повторять выполнение блока кода для каждого элемента в последовательности (например, списке, строке, диапазоне или другом итерируемом объекте). В отличие от while, здесь количество итераций известно.
Синтаксис такой:
for переменная in последовательность: # блок кода, который выполняется для каждого элемента
Вот простой пример:
hogwarts = ["Гриффиндор", "Пуффендуй", "Когтевран", "Слизерин"] for faculty in hogwarts: print(faculty)
Вывод:
Гриффиндор Пуффендуй Когтевран Слизерин
Что еще умеет for
range()
. Функция часто используется с циклом for, чтобы повторить какое-то действие конкретное количество раз.
for i in range(5): print(i) > 0 1 2 3 4
- break и continue работают по той же схеме.
Пример с break:
for i in range(10): if i == 5: break print(i) > 0 1 2 3
И с continue:
for i in range(5): if i == 2: continue print(i) > 0 1 3 4
- Вложенные циклы. Например:
for i in range(3): for j in range(2): print(f"i = {i}, j = {j}") > i = 0, j = 0 i = 0, j = 1 i = 1, j = 0 i = 1, j = 1 i = 2, j = 0 i = 2, j = 1
Один из самых банальных примеров с циклом for — таблица умножения. Выглядеть код будет вот так:
for i in range(1, 11): for x in range(1, 11): print(f"{i} * {x} = {i * x}") print() # пустая строка для разделения > 1 * 1 = 1 1 * 2 = 2 1 * 3 = 3 1 * 4 = 4 1 * 5 = 5
Еще раз: когда используем for
- Когда количество итераций известно, особенно в последовательностях — списки, строки, диапазоны.
- Для обработки каждого элемента, например, для фильтрации или поиска данных.
- Для выполнения действий определенное количество раз, например, чтобы сгенерировать таблицу.
Важно: цикл for не может быть бесконечным, так как он работает с последовательностями. Однако можно написать бесконечный итератор с помощью itertools.cycle.
Типичные ошибки
При использовании управляющих конструкций новички (и даже продвинутые юзеры) могут допускать некоторые ошибки. Ниже — об основных из них.
Отступы
Кажется, это боль каждого питониста. Начинающие прогеры часто забывают о том, что блоки нужно выделять отступами, и получают ошибки IndentationError или unexpected indent.
Неправильно:
if True: print("Ошибка!")
Правильно:
if True: print("Гуд!")
Пропуск двоеточия
Двоеточие нужно ставить после условий if, elif, else, циклов for, while и определений функций.
Так не надо:
x = 5 if x > 3 print("Больше 3") elif x > 0 print("Положительное число")
Так надо:
x = 5 if x > 3: print("Больше 3") elif x > 0: print("Положительное число")
is вместо == для сравнения значений
is проверяет, являются ли переменные одним и тем же объектом в памяти, а == сравнивает их значения.
Неправильно:
a = 1000 b = 1000 if a is b: print("Ошибка!") #а и b разные объекты в памяти
Правильно:
if a == b: print("Правильно!")
Использование else с for или while
В Питоне else у циклов выполняется только если цикл завершился без break
. Так делать не нужно:
for i in range(3): print(i) else: print("Цикл завершён") # может показаться, что else связан с if
А вот так нужно:
for i in range(3): print(i) if i == 1: break else: print("Цикл завершён")
Управляющие конструкции, такие как if, else, switch (match/case), for и while — основа любого языка программирования. Они позволяют контролировать поток выполнения программы и делать код более гибким и мощным. Это действительно база, которая нужна любому разработчику на любом языке — будь то Python, Java, C++ или другой.