Конструкция `else` в циклах — это одна из уникальных и не самых очевидных особенностей Python. В отличие от `if-else`, где `else` выполняется при ложном условии, в циклах `for` и `while` блок `else` срабатывает только в одном случае: если цикл завершил все свои итерации естественным образом. Эта возможность оказывается очень полезной, например, в задачах поиска, когда нужно выполнить одно действие, если элемент найден (и цикл прерван), и совсем другое, если перебор закончился, а элемент так и не встретился. В этом тренажере мы подробно разберем, как и когда использовать `for-else` и `while-else`, чем они отличаются от обычных условных конструкций и как они помогают писать более чистый и выразительный код. Вы научитесь предсказывать поведение таких циклов, находить ошибки в их структуре и собирать рабочие программы, используя эту мощную конструкцию.
- Модуль 1: Основы синтаксиса Python
- Модуль 2: Переменные и типы данных
- Модуль 3: Операторы
- Арифметические операторы (+, -, *, /).
- Целочисленное деление и остаток (// и %).
- Возведение в степень (**).
- Операторы сравнения.
- Логические операторы (and, or, not).
- Операторы присваивания (=, +=, -=).
- Операторы принадлежности (in, not in).
- Операторы идентичности (is, is not).
- Битовые операторы.
- Тернарный оператор.
- Модуль 4: Ввод и вывод данных
- Модуль 5: Условные конструкции
- Модуль 6: Циклы
- Цикл for.
- Функция range().
- Цикл while.
- Операторы break и continue.
- Конструкция else в циклах.
- Вложенные циклы.
- Функция enumerate().
- Модуль 7: Строки
- Модуль 8: Списки
- Модуль 9: Кортежи
- Модуль 10: Словари
- Модуль 11: Множества
- Модуль 12: Функции
- Модуль 13: Встроенные функции
- Модуль 14: Работа с файлами
- Модуль 15: Обработка исключений
- Модуль 16: Модули и пакеты
- Модуль 17: ООП - Основы
- Модуль 18: ООП - Продвинутый уровень
- Модуль 19: Декораторы
- Модуль 20: Генераторы и итераторы
- Модуль 21: Регулярные выражения
- Модуль 22: Дата и время
- Модуль 23: Математические операции
- Модуль 24: Работа с сетью
- Модуль 25: Асинхронное программирование
- Модуль 26: Многопоточность
- Модуль 27: Тестирование
- Модуль 28: Базы данных
- Модуль 29: Алгоритмы и структуры данных
- Модуль 30: Продвинутые возможности
Синтаксис for...else
Дополните код, чтобы создать цикл `for` с блоком `else`. Цикл должен перебрать все числа и, после своего естественного завершения, выполнить код в блоке `else`, который выведет сообщение об окончании работы.
input1S i in range(3):
print(f"Итерация {i}")
input2S:
print("Цикл завершен.")Когда else выполняется
Внимательно изучите код. Цикл `for` перебирает список чисел. Сработает ли в данном случае блок `else`? Выберите вариант, который точно отражает вывод программы.
for number in [1, 2, 3]:
print(f"Число: {number}")
else:
print("Все числа обработаны.")Когда else НЕ выполняется
Теперь посмотрим на противоположный случай. Этот код ищет число в списке. Как только он находит число больше 5, цикл прерывается. Что будет выведено в результате работы этого кода?
numbers = [1, 3, 7, 4]
for num in numbers:
print(f"Проверяем {num}")
if num > 5:
print("Найдено число больше 5!")
break
else:
print("Цикл завершился без break.")Поиск элемента
Этот код ищет имя 'Bob' в списке. Если имя найдено, выводится одно сообщение, а если цикл прошел до конца и имя не найдено — другое. Проанализируйте код и напишите, что он выведет на экран.
names = ['Alice', 'John', 'Anna']
for name in names:
if name == 'Bob':
print("Bob найден!")
break
else:
print("Bob не найден.")Ошибка в отступе else
В этом коде допущена распространенная синтаксическая ошибка, связанная с отступом блока `else`. Найдите и исправьте строку с ошибкой, чтобы код стал синтаксически верным.
count = 5while count > 0: count -= 1 else: print("Цикл завершен.")Сборка while...else
Расставьте строки кода в правильном порядке, чтобы создать программу обратного отсчета. Цикл `while` должен считать от 3 до 1, а после его завершения блок `else` должен вывести "Старт!".
else: print("Старт!")i = 3while i > 0: print(i) i -= 1Сработает ли else?
Распределите фрагменты кода по двум категориям в зависимости от того, будет ли выполнен блок `else` в каждом из них. Это поможет закрепить ключевое правило работы этой конструкции.
# Цикл по пустому спискуfor i in []: print(i)# Поиск с break (элемент есть)for x in [2,4,6]: if x==4: break# Простой счетчик до 5i=0; while i<5: i+=1# Цикл с continuefor c in "hi": if c=='h': continue# Бесконечный цикл с выходомwhile True: break# Поиск с break (элемента нет)for x in [1,3,5]: if x==4: breakПроверка на простое число
Соберите из фрагментов классический алгоритм проверки, является ли число простым, используя конструкцию `for-else`. Программа ищет делители числа. Если находит хоть один, число не простое. Если цикл проходит до конца, и делителей не найдено — число простое.
num = 13
for i in input1S(2, num):
if num % i == 0:
print(f"Найден делитель: {i}")
input2S
input3S:
print(f"{num} — простое число.")