ТЕОРИЯ И ПРАКТИКА
-
Ввод и вывод данных
- Задачи
-
Условия
- Задачи
-
Цикл for
- Задачи
-
Строки
- Задачи
-
Цикл while
- Задачи
-
Списки
- Задачи
-
Двумерные массивы
- Задачи
-
Словари
- Задачи
-
Множества
- Задачи
-
Функции и рекурсия
- Задачи
Занятие 5. Цикл while в питоне
Введение в цикл while в Python
Цикл while Python что такое повторение
В программировании цикл — это конструкция, которая позволяет многократно выполнять один и тот же блок кода. Цикл while (в переводе с английского "пока") выполняет код снова и снова, пока указанное условие остаётся истинным (True). Это как сказать компьютеру: "Продолжай делать это, пока я не скажу остановиться" или "Продолжай, пока счёт не достигнет десяти".
Отличие от цикла for
Главное отличие цикла while от цикла for заключается в условии выполнения.
- Цикл
forиспользуется, когда вы заранее знаете, сколько раз нужно выполнить цикл. Он идеально подходит для перебора элементов в последовательности (например, в списке, строке или диапазоне чиселrange()). - Цикл
whileиспользуется, когда количество повторений (итераций) заранее неизвестно. Цикл продолжается не определённое число раз, а до тех пор, пока выполняется некое условие.
Основные сценарии использования цикла while
Цикл while незаменим в ситуациях, когда нужно ждать какого-то события:
- Ожидание ввода от пользователя (например, пока он не введёт слово "выход").
- Работа программы до тех пор, пока не будет достигнут нужный результат (например, в играх или симуляциях).
- Чтение данных из файла или сетевого подключения, пока данные не закончатся.
Основная структура и синтаксис
Синтаксис цикла while очень прост. Он состоит из ключевого слова while, за которым следует условие, двоеточие и блок кода с отступом.
while условие:
# Этот код будет выполняться,
# пока "условие" истинно (True)
Цикл while Python простое использование
Рассмотрим простой пример, который печатает числа от 0 до 4.
Инициализация переменной счетчика
Перед началом цикла нам нужна переменная, которая будет контролировать его выполнение. Обычно её называют счетчиком. Давайте инициализируем её значением 0.
counter = 0 # Начальное значение
Проверка условия продолжения цикла
Наше условие — counter < 5. Перед каждым выполнением тела цикла Python будет проверять: "Переменная counter всё ещё меньше 5?". Если да (True), код внутри цикла выполняется. Если нет (False), цикл завершается.
Тело цикла: действия и изменение переменных
Внутри цикла мы сначала выполняем полезное действие (печатаем значение счетчика), а затем обязательно изменяем переменную счетчика. Если этого не сделать, условие counter < 5 будет истинным всегда, и цикл станет бесконечным!
Завершение цикла при изменении условия
Когда counter станет равным 5, условие 5 < 5 вернёт False. В этот момент Python пропустит тело цикла и перейдёт к выполнению кода, который следует после него.
Вот полный код:
# 2.1. Инициализация переменной счетчика
counter = 0
# 2.2. Проверка условия продолжения цикла
while counter < 5:
# 2.3. Тело цикла: действия и изменение переменных
print(f"Текущее значение счетчика: {counter}")
counter = counter + 1 # или более коротко: counter += 1
# 2.4. Завершение цикла при изменении условия
print("Цикл завершен, так как counter стал равен 5.")
Операторы управления циклом while
Иногда нужно управлять ходом цикла более гибко: выйти из него досрочно или пропустить текущий шаг. Для этого существуют операторы break и continue.
Оператор break в циклах Python
Принцип работы и назначение
Оператор break немедленно и полностью прекращает выполнение цикла, в котором он находится.
Использование для досрочного выхода из цикла
Он используется, когда внутри цикла достигается некое критическое условие, после которого дальнейшее выполнение цикла бессмысленно или нежелательно.
Пример применения в цикле while
Представим, что мы ищем первое число больше 5, которое делится на 3.
number = 1
while number < 20:
print(f"Проверяем число: {number}")
if number > 5 and number % 3 == 0:
print(f"Найдено! Это число {number}. Выходим из цикла.")
break # Досрочный выход из цикла
number += 1
print("Код после цикла.")
Оператор continue Python логика цикла
Принцип работы и назначение
Оператор continue прерывает только текущую итерацию (текущий шаг) цикла и немедленно переходит к проверке условия для следующей итерации.
Пропуск оставшегося кода текущей итерации
Весь код, который находится в теле цикла после continue, будет пропущен.
Переход к следующей итерации цикла
Выполнение "перепрыгивает" обратно к строке while условие:.
Пример использования continue
Давайте напечатаем только нечётные числа от 1 до 10.
num = 0
while num < 10:
num += 1
# Если число четное...
if num % 2 == 0:
continue # ...пропускаем оставшуюся часть кода и идем к следующему числу
# Этот код выполнится только для нечетных чисел
print(f"Нечетное число: {num}")
Блок else в цикле while с условием
Что такое блок else после цикла
В Python цикл while может иметь необязательный блок else. Код в этом блоке выполняется один раз, когда цикл завершается естественным образом (то есть, когда его условие становится ложным).
Условия выполнения блока else
Блок else выполняется только в том случае, если цикл завершил все свои итерации и не был прерван оператором break.
Поведение блока else при использовании break
Если цикл был прерван с помощью break, блок else не выполняется. Это его ключевая особенность.
Пример применения блока else
Давайте найдем в списке число. Если нашли — выйдем через break. Если прошли весь список и не нашли — сообщит об этом блок else.
# Сценарий 1: число найдено
items = [1, 5, 9, 12, 23]
search_value = 12
index = 0
found = False
while index < len(items):
if items[index] == search_value:
print(f"Значение {search_value} найдено на позиции {index}.")
break # Выходим, так как нашли
index += 1
else:
# Этот блок не выполнится, потому что цикл был прерван break
print(f"Значение {search_value} не найдено в списке.")
print("-" * 20)
# Сценарий 2: число не найдено
search_value = 10
index = 0
while index < len(items):
if items[index] == search_value:
print(f"Значение {search_value} найдено на позиции {index}.")
break
index += 1
else:
# Этот блок выполнится, так как цикл завершился естественно
print(f"Значение {search_value} не найдено в списке.")
Вложенные циклы while python примеры
Вложенные циклы Python повторение выполнение
Вложенный цикл — это цикл, который находится внутри другого цикла. Внутренний цикл будет выполняться полностью для каждой итерации внешнего цикла.
Пример вложенного цикла с двумя счетчиками
Давайте выведем таблицу умножения. Внешний цикл будет отвечать за первый множитель, а внутренний — за второй.
i = 1 # Счетчик внешнего цикла
while i <= 5:
j = 1 # Счетчик внутреннего цикла, сбрасывается на каждой итерации внешнего
while j <= 5:
print(f"{i} * {j} = {i * j}")
j += 1
print("--- Внутренний цикл завершен ---")
i += 1
Практическое применение вложенных циклов
Вложенные циклы используются для работы с двумерными структурами данных (матрицами, таблицами), для перебора комбинаций или для создания сложных игровых полей.
Обработка пользовательского ввода с циклом while
Использование цикла для повторного запроса данных
Это один из самых частых и полезных сценариев для while. Мы можем запрашивать у пользователя ввод до тех пор, пока он не введёт корректные данные или команду для выхода.
Пример цикла, работающего до успешного завершения
Простая программа, которая будет "слушать" пользователя, пока он не напишет "выход".
user_input = ""
while user_input.lower() != "выход":
user_input = input("Введите что-нибудь (или 'выход' для завершения): ")
if user_input.lower() != "выход":
print(f"Вы ввели: {user_input}")
print("Программа завершена.")
Обработка некорректного ввода и повторный запрос
Часто нужно не просто ждать команду, а проверять, соответствует ли ввод определённым критериям.
Пример с проверкой корректности ввода числа
Попросим пользователя ввести число от 1 до 10. Будем повторять запрос, пока не получим правильный ввод.
while True: # Используем "бесконечный" цикл, выйдем из него через break
try:
age_str = input("Введите ваш возраст (число): ")
age = int(age_str) # Пытаемся преобразовать строку в число
if 1 <= age <= 120:
print("Спасибо! Возраст корректен.")
break # Ввод корректен, выходим из цикла
else:
print("Ошибка: возраст должен быть в диапазоне от 1 до 120.")
except ValueError:
# Эта ошибка произойдет, если пользователь введет не число (например, "abc")
print("Ошибка: пожалуйста, введите целое число.")
Бесконечные циклы в Python while
Определение бесконечного цикла
Бесконечный цикл — это цикл, условие которого никогда не становится ложным (False). Это может быть как ошибкой в коде, так и намеренным приёмом.
Создание цикла с условием True
Самый простой способ создать намеренный бесконечный цикл — использовать while True:.
Как избежать зависания программы — выход из бесконечного цикла
Такой цикл обязательно должен содержать внутри себя условие с оператором break для выхода. Иначе ваша программа "зависнет" и будет выполняться вечно.
Пример бесконечного цикла с условием выхода по команде пользователя
Это улучшенная версия примера с пользовательским вводом.
while True: # Намеренный бесконечный цикл
command = input("Введите команду ('старт', 'стоп', 'выход'): ")
if command == 'старт':
print("Система запускается...")
elif command == 'стоп':
print("Система остановлена.")
elif command == 'выход':
print("Выход из программы.")
break # Единственный способ завершить этот цикл
else:
print("Неизвестная команда.")
Избегание ошибок и бесконечных циклов
Значение изменения переменных в теле цикла
Самая частая ошибка новичков — забыть изменить переменную, которая проверяется в условии цикла. Всегда следите за тем, чтобы внутри цикла был код, который рано или поздно сделает условие ложным.
Контроль условий завершения цикла
Перед запуском кода мысленно прокрутите несколько итераций. Убедитесь, что ваша переменная-счетчик движется в правильном направлении (увеличивается к пределу, если условие < или уменьшается, если >).
Советы по предотвращению бесконечных циклов
- Всегда проверяйте, что переменная в условии
whileизменяется внутри цикла. - Если вы используете
while True, убедитесь, что внутри есть хотя бы одинbreak. - Тщательно проверяйте логику условий (
<,>,==,!=).
Пример безопасного цикла с изменением условия
# Неправильно: бесконечный цикл, так как i никогда не изменится
# i = 0
# while i < 5:
# print("Это ошибка!")
# Правильно: i изменяется на каждой итерации
i = 5
while i > 0:
print(f"Обратный отсчет: {i}")
i -= 1 # Уменьшаем i, приближая завершение цикла
print("Пуск!")
Отладка и тестирование циклов while
Использование print для проверки значений внутри цикла
Самый простой способ отладки — вставить print() в разные части цикла, чтобы видеть, как меняются значения переменных на каждом шаге.
Пошаговое отслеживание изменения переменных
В современных средах разработки (IDE), таких как PyCharm или VS Code, есть отладчики, которые позволяют выполнять код пошагово и наблюдать за всеми переменными в реальном времени.
Практические советы по отладке циклов
- Выводите значение переменной-счетчика прямо перед проверкой условия (вне цикла) и в конце каждой итерации.
- Если цикл ведёт себя не так, как ожидалось, временно упростите условие до
Trueи управляйте выходом только черезbreakсprint'ами, чтобы понять, в какой момент логика ломается.
Пример вывода состояния перед и после изменения переменной счетчика
count = 0
limit = 4
while count < limit:
print(f"--- Начало итерации ---")
print(f"Состояние ПЕРЕД: count = {count}. Условие (count < limit) -> ({count} < {4}) это {count < limit}.")
print(f"Выполняем полезную работу для count = {count}")
count += 1 # Изменяем счетчик
print(f"Состояние ПОСЛЕ: count = {count}.")
print(f"--- Конец итерации ---\n")
print("Цикл завершен.")