Урок 004: циклы и повторение¶
Цель¶
Повторять действие контролируемое число раз и повторно запрашивать данные после ошибки без копирования одинакового кода.
Цикл for¶
for подходит, когда набор повторений известен заранее:
Ожидаемый вывод:
range(1, 4) создаёт числа 1, 2, 3; правая граница не включается.
Пример накопления суммы:
После трёх итераций total равен 6. Запишите значения переменных после каждого шага — это простой способ понять цикл.
Цикл while¶
while выполняется, пока условие истинно. Он подходит для повторного запроса:
price = -1
while price < 0:
price = float(input("Введите неотрицательную цену: "))
print(f"Цена принята: {price:.2f}")
Этот пример не обрабатывает буквенный ввод; добавим try и continue:
while True:
price_text = input("Цена: ").replace(",", ".")
try:
price = float(price_text)
except ValueError:
print("Ошибка: введите число")
continue
if price < 0:
print("Ошибка: цена не может быть отрицательной")
continue
break
print(f"Цена принята: {price:.2f}")
continueнемедленно начинает следующую итерацию.breakзавершает ближайший цикл.while Trueбезопасен только при понятном и достижимомbreak.
Защита от бесконечного цикла¶
Перед запуском ответьте:
- какое условие продолжает цикл;
- что меняется на каждой итерации;
- при каком вводе достигается завершение;
- что увидит пользователь после ошибки.
Если ни одно значение не приближает программу к завершению, цикл бесконечен. Остановить зависшую консольную программу обычно можно сочетанием Ctrl+C.
Упражнение¶
Создайте quantity_loop.py, который запрашивает целое неотрицательное количество до получения корректного значения. Проверьте ввод abc, -2, 0 и 5. После принятия значения программа должна один раз вывести сводку и завершиться.
Дополнительно используйте for, чтобы напечатать номера трёх контрольных сценариев: Сценарий 1, Сценарий 2, Сценарий 3.
Самопроверка¶
- Когда выбирать
for, а когдаwhile? - Чем
continueотличается отbreak? - Как доказать, что цикл может завершиться?
- Почему преобразование находится внутри
try?