Конструкция else в циклах

Тренажер по Python для пользователей с начальным уровнем подготовки.

Тренажер по Python

Конструкция `else` в циклах — это одна из уникальных и не самых очевидных особенностей Python. В отличие от `if-else`, где `else` выполняется при ложном условии, в циклах `for` и `while` блок `else` срабатывает только в одном случае: если цикл завершил все свои итерации естественным образом. Эта возможность оказывается очень полезной, например, в задачах поиска, когда нужно выполнить одно действие, если элемент найден (и цикл прерван), и совсем другое, если перебор закончился, а элемент так и не встретился. В этом тренажере мы подробно разберем, как и когда использовать `for-else` и `while-else`, чем они отличаются от обычных условных конструкций и как они помогают писать более чистый и выразительный код. Вы научитесь предсказывать поведение таких циклов, находить ошибки в их структуре и собирать рабочие программы, используя эту мощную конструкцию.

Список тем

Синтаксис for...else

id: 39987_task_else_1

Дополните код, чтобы создать цикл `for` с блоком `else`. Цикл должен перебрать все числа и, после своего естественного завершения, выполнить код в блоке `else`, который выведет сообщение об окончании работы.

Заполните пропуски
input1S i in range(3):
    print(f"Итерация {i}")
input2S:
    print("Цикл завершен.")
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Когда else выполняется

id: 39987_task_else_2

Внимательно изучите код. Цикл `for` перебирает список чисел. Сработает ли в данном случае блок `else`? Выберите вариант, который точно отражает вывод программы.

Выберите правильный вариант ответа
for number in [1, 2, 3]:
    print(f"Число: {number}")
else:
    print("Все числа обработаны.")
Сообщения
Проверить
Показать подсказку

Когда else НЕ выполняется

id: 39987_task_else_3

Теперь посмотрим на противоположный случай. Этот код ищет число в списке. Как только он находит число больше 5, цикл прерывается. Что будет выведено в результате работы этого кода?

Выберите правильный вариант ответа
numbers = [1, 3, 7, 4]
for num in numbers:
    print(f"Проверяем {num}")
    if num > 5:
        print("Найдено число больше 5!")
        break
else:
    print("Цикл завершился без break.")
Сообщения
Проверить
Показать подсказку

Поиск элемента

id: 39987_task_else_4

Этот код ищет имя 'Bob' в списке. Если имя найдено, выводится одно сообщение, а если цикл прошел до конца и имя не найдено — другое. Проанализируйте код и напишите, что он выведет на экран.

Что должно получиться?
names = ['Alice', 'John', 'Anna']
for name in names:
    if name == 'Bob':
        print("Bob найден!")
        break
else:
    print("Bob не найден.")
Сообщения
Проверить
Показать подсказку

Ошибка в отступе else

id: 39987_task_else_5

В этом коде допущена распространенная синтаксическая ошибка, связанная с отступом блока `else`. Найдите и исправьте строку с ошибкой, чтобы код стал синтаксически верным.

Найдите ошибку и исправьте
count = 5
while count > 0:
    count -= 1
    else:
        print("Цикл завершен.")
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Сборка while...else

id: 39987_task_else_6

Расставьте строки кода в правильном порядке, чтобы создать программу обратного отсчета. Цикл `while` должен считать от 3 до 1, а после его завершения блок `else` должен вывести "Старт!".

Расставьте строки в правильном порядке
else:
    print("Старт!")
i = 3
while i > 0:
    print(i)
    i -= 1
Сообщения
Проверить
Показать подсказку

Сработает ли else?

id: 39987_task_else_7

Распределите фрагменты кода по двум категориям в зависимости от того, будет ли выполнен блок `else` в каждом из них. Это поможет закрепить ключевое правило работы этой конструкции.

Перетяните элементы в соответствующие блоки
Блок else выполнится
Блок else НЕ выполнится
# Цикл по пустому списку
for i in []: print(i)
# Поиск с break (элемент есть)
for x in [2,4,6]: if x==4: break
# Простой счетчик до 5
i=0; while i<5: i+=1
# Цикл с continue
for c in "hi": if c=='h': continue
# Бесконечный цикл с выходом
while True: break
# Поиск с break (элемента нет)
for x in [1,3,5]: if x==4: break
Сообщения
Проверить
Показать подсказку

Проверка на простое число

id: 39987_task_else_8

Соберите из фрагментов классический алгоритм проверки, является ли число простым, используя конструкцию `for-else`. Программа ищет делители числа. Если находит хоть один, число не простое. Если цикл проходит до конца, и делителей не найдено — число простое.

Нужно правильно расставить в пропуски предложенные варианты
num = 13

for i in input1S(2, num):
    if num % i == 0:
        print(f"Найден делитель: {i}")
        input2S
input3S:
    print(f"{num} — простое число.")
break
continue
else:
range
if:
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку
НайтиКурс.Ру