Цикл for отлично работает когда знаешь сколько раз нужно повторить действие. Но что если неизвестно?
Примеры:
- Игра идет пока игрок жив
- Запрашивай пароль пока не введут правильный
- Атакуй врага пока у него есть здоровье
Для таких ситуаций есть цикл while (пока).
🎯 Как работает while?
Схема:
while условие:
# Выполняй код
# пока условие истинно (True)
Цикл проверяет условие. Если True — выполняет код. Потом снова проверяет. И так пока условие не станет False.
🔢 Простой пример: счетчик
count = 0
while count < 5:
print(f"Счет: {count}")
count += 1
print("Готово!")
Выведет:
Счет: 0
Счет: 1
Счет: 2
Счет: 3
Счет: 4
Готово!
Как это работает:
1. count = 0 — начальное значение
2. Проверка: 0 < 5? Да → выполняем код
3. Выводим 0, увеличиваем count до 1
4. Проверка: 1 < 5? Да → еще раз
5. …
6. Проверка: 5 < 5? Нет → выходим из цикла
⚠️ Важно: Не забывай изменять переменную внутри цикла! Иначе будет бесконечный цикл.
⚔️ Практический пример: битва
player_health = 100
enemy_health = 80
round_number = 1
while player_health > 0 and enemy_health > 0:
print(f"\n=== Раунд {round_number} ===")
# Игрок атакует
damage = 15
enemy_health -= damage
print(f"Ты атакуешь! Враг получает {damage} урона")
print(f"Здоровье врага: {enemy_health}")
# Проверка победы
if enemy_health <= 0:
print("\n🎉 ТЫ ПОБЕДИЛ!")
break
# Враг атакует
enemy_damage = 10
player_health -= enemy_damage
print(f"Враг атакует! Ты получаешь {enemy_damage} урона")
print(f"Твое здоровье: {player_health}")
# Проверка поражения
if player_health <= 0:
print("\n💀 ТЫ ПРОИГРАЛ!")
break
round_number += 1
🛑 Команды управления циклом
break - выход из цикла
break немедленно прерывает цикл:
count = 0
while count < 100:
print(count)
count += 1
if count == 5:
print("Хватит!")
break # Выходим из цикла
print("Цикл завершен")
Выведет:
0
1
2
3
4
Хватит!
Цикл завершен
continue - пропустить итерацию
continue переходит к следующей итерации, пропуская код ниже:
count = 0
while count < 5:
count += 1
if count == 3:
continue # Пропускаем тройку
print(count)
Выведет:
1
2
4
5
(Тройка пропущена!)
🎮 Игровой цикл
Классический паттерн игры — основной цикл пока игрок не проиграет:
game_over = False
score = 0
while not game_over:
print(f"\n💰 Счет: {score}")
action = input("Действие (атака/защита/выход): ")
if action == "атака":
score += 10
print("⚔️ Успешная атака! +10 очков")
elif action == "защита":
score += 5
print("🛡️ Защита! +5 очков")
elif action == "выход":
print("Выход из игры...")
game_over = True
else:
print("❌ Неизвестное действие!")
print(f"\nИгра окончена! Финальный счет: {score}")
🔄 while True - бесконечный цикл
Иногда нужен цикл который работает вечно (пока не встретит break):
while True:
user_input = input("Введи команду (или 'выход'): ")
if user_input == "выход":
print("До свидания!")
break
print(f"Ты ввел: {user_input}")
Полезно для:
- Меню программы
- Ожидание правильного ввода
- Игровые циклы
⚠️ Опасность бесконечного цикла
ОШИБКА: Забыли изменить условие
# ❌ НЕ ДЕЛАЙ ТАК!
count = 0
while count < 5:
print(count)
# Забыли count += 1
# Цикл будет выводить 0 бесконечно!
Если попал в бесконечный цикл:
- В CodeHS: нажми кнопку Stop
- В терминале: нажми Ctrl+C
🎲 Пример: угадай число
import random
secret_number = random.randint(1, 10)
attempts = 0
print("Я загадал число от 1 до 10")
while True:
guess = int(input("Твоя попытка: "))
attempts += 1
if guess == secret_number:
print(f"🎉 Правильно! Попыток: {attempts}")
break
elif guess < secret_number:
print("⬆️ Мое число больше")
else:
print("⬇️ Мое число меньше")
📊 for vs while
for |
while |
|---|---|
| Знаем количество повторений | Повторяем пока условие истинно |
for i in range(10): |
while health > 0: |
| Перебор списков | Игровые циклы |
| Счетчик автоматически | Счетчик вручную |
| Конец известен заранее | Конец зависит от условия |
Когда использовать for:
- ✅ Перебор списка
- ✅ Повтор N раз
- ✅ Фиксированное количество итераций
Когда использовать while:
- ✅ Неизвестно сколько повторений
- ✅ Зависит от условия (игрок жив, враг жив)
- ✅ Ожидание ввода пользователя
💪 Практические примеры
Пример 1: Повтор игры
play_again = "да"
while play_again == "да":
print("\n🎮 Начинаем игру!")
# Игра здесь...
print("Игра закончена!")
play_again = input("Играть еще? (да/нет): ")
print("Спасибо за игру!")
Пример 2: Здоровье не ноль
player_hp = 100
while player_hp > 0:
print(f"\n❤️ Здоровье: {player_hp}")
damage = random.randint(10, 20)
player_hp -= damage
print(f"💥 Получен урон: {damage}")
if player_hp <= 0:
print("\n💀 Игрок повержен!")
Пример 3: Проверка ввода
while True:
age = input("Сколько тебе лет? ")
if age.isdigit(): # Проверка что введено число
age = int(age)
if age > 0 and age < 150:
print(f"Тебе {age} лет!")
break
else:
print("❌ Возраст должен быть от 1 до 150")
else:
print("❌ Введи число!")
🎯 Итог
| Конструкция | Применение |
|---|---|
while условие: |
Повторять пока условие True |
while True: |
Бесконечный цикл (используй break) |
break |
Выйти из цикла немедленно |
continue |
Пропустить текущую итерацию |
not game_over |
Пока НЕ game_over |
Запомни:
- ✅ while повторяет пока условие True
- ✅ Обязательно изменяй условие внутри цикла!
- ✅ Используй break для выхода
- ✅ Используй continue для пропуска
- ✅ Не забывай двоеточие : и отступы
- ✅ while True + break для меню и ожидания ввода
💬 Комментарии (0)
Комментариев пока нет
Станьте первым, кто поделится мнением об этой статье!