📖 Теория: Цикл while

⚡ Кратко

Цикл while повторяет блок кода, пока его условие истинно. Каждый проход тела цикла называется итерацией. Оператор break немедленно завершает цикл, а continue пропускает оставшуюся часть текущей итерации и возвращается к проверке условия.

  • Структура: инициализация переменной → условие → тело → обновление переменной.
  • while/else: блок else выполняется, если цикл завершился без break.
  • while True: создаёт бесконечный цикл; выходят из него через break по условию.
  • Модуль random генерирует псевдослучайные числа: random(), randint(), randrange().

Что такое цикл

Цикл — это конструкция, которая позволяет повторять выполнение блока кода несколько раз. Циклы нужны там, где однотипные действия должны выполняться многократно: обработка чисел, чтение пользовательского ввода, поиск значения, игровые раунды.

Итерация — это одно выполнение тела цикла. Цикл while выполняет итерации до тех пор, пока условие цикла истинно.

Цикл while

while — это цикл с предусловием: Python сначала проверяет условие, и только если оно истинно, выполняет тело. После каждой итерации интерпретатор снова возвращается к проверке условия.

📄 examples/counter.py
i = 1
while i <= 5:
    print(i)
    i += 1
# Output: 1 2 3 4 5 (each on a new line)

Как работает пример:

  1. Переменная i инициализируется значением 1.
  2. Проверяется условие i <= 5. Оно истинно, поэтому выполняется тело цикла.
  3. В теле выводится текущее значение i, затем i увеличивается на 1.
  4. Интерпретатор снова проверяет условие. Цикл повторяется, пока i не станет больше 5.
💡 На заметку: если забыть изменить переменную цикла внутри тела, условие никогда не станет ложным и цикл будет выполняться бесконечно.

Оператор break

Оператор break немедленно прерывает выполнение цикла, даже если условие цикла всё ещё истинно. Его часто используют, когда нужно выйти из цикла по дополнительному условию.

📄 examples/break_demo.py
i = 1
while i <= 10:
    print(i)
    if i == 5:
        break  # exit the loop when i reaches 5
    i += 1
# Output: 1 2 3 4 5

Частый паттерн — бесконечный цикл, который прерывается по команде пользователя:

📄 examples/break_input.py
while True:
    user_input = input("Type 'exit' to stop: ")
    if user_input == "exit":
        break
    print(f"You typed: {user_input}")

Оператор continue

Оператор continue пропускает оставшуюся часть текущей итерации и переходит к следующей проверке условия. В отличие от break, цикл не завершается.

📄 examples/continue_demo.py
i = 0
while i < 5:
    i += 1
    if i % 2 == 0:
        continue  # skip even numbers
    print(i)
# Output: 1 3 5
⚠️ Важно: в примере выше инкремент i += 1 стоит до continue. Если бы он был после continue, при чётном i переменная не менялась бы, и цикл зациклился бы.

Бесконечный цикл

Бесконечный цикл — это цикл, условие которого всегда остаётся истинным. Явный бесконечный цикл while True: полезен, когда заранее неизвестно количество итераций, например при чтении пользовательского ввода или работе сервера.

📄 examples/infinite_controlled.py
while True:
    user_input = input("Enter 'stop' to finish: ")
    if user_input == "stop":
        print("Loop finished.")
        break
    print(f"Echo: {user_input}")

Бесконечные циклы могут возникать и случайно, если условие завершения никогда не выполняется:

📄 examples/infinite_accidental.py
# WARNING: this is an infinite loop
i = 0
while i < 10:
    print(i)
    # forgot to increment i

Или когда переменная меняется в противоположную сторону:

📄 examples/infinite_reverse.py
# WARNING: this is also an infinite loop
i = 0
while i < 10:
    print(i)
    i -= 1  # moves away from the exit condition

Конструкция while/else

У цикла while может быть блок else. Он выполняется только при естественном завершении цикла, то есть когда условие стало ложным. Если цикл был прерван оператором break, блок else пропускается.

📄 examples/while_else.py
i = 1
while i <= 5:
    print(i)
    i += 1
else:
    print("Loop completed without break.")
# Output: 1 2 3 4 5
#         Loop completed without break.

Пример с break:

📄 examples/while_else_break.py
i = 1
while i <= 5:
    if i == 3:
        print("Break at 3")
        break
    print(i)
    i += 1
else:
    print("This line will NOT be printed.")
# Output: 1 2 Break at 3
💡 На заметку: continue не прерывает цикл, а только пропускает часть итерации, поэтому блок else после continue всё равно выполнится, если цикл доработает до конца.

Модуль random

Модуль random входит в стандартную библиотеку Python и предоставляет функции для генерации псевдослучайных чисел и случайного выбора элементов.

📄 examples/random_basics.py
import random

print(random.random())        # float in [0.0, 1.0)
print(random.randint(1, 10))  # integer from 1 to 10 inclusive
print(random.randrange(1, 10))       # integer from 1 to 9
print(random.randrange(1, 10, 2))    # 1, 3, 5, 7 or 9

Где применяется random:

  • Генерация тестовых данных.
  • Игры и симуляции случайных событий.
  • Перемешивание последовательностей.
  • Лотереи, случайное распределение задач.
Проверить по документации: современный способ читать ввод в цикле — оператор «морж» := (Python 3.8+). Он позволяет присвоить значение и сразу проверить условие внутри while. Подробнее в разделе Python Documentation — Assignment Expressions.