Циклы

Компьютеры обожают повторять. Заставлять их делать одно и то же руками — глупо: для повторения есть циклы. Сегодня разберём два цикла — for и while — научимся вести счёт и превратим угадайку в настоящую игру «пока не угадаешь».

Робот повторяет действие по кругу и играет в камень-ножницы-бумага со счётом

Цикл for: повторить N раз

Цикл for вместе с range повторяет тело нужное число раз. range(5) даёт числа от 0 до 4 (пять штук, начиная с нуля). Тело цикла — со сдвигом вправо (отступ), как у if.

for i in range(5):
    print("Шаг", i)
Шаг 0
Шаг 1
Шаг 2
Шаг 3
Шаг 4
  for i in range(5):     — повторить 5 раз
      print(i)

  i по очереди:  0  1  2  3  4
  range(5) даёт 5 чисел, начиная с 0 (пятёрку НЕ включает)
range(5) это 0,1,2,3,4 — пять чисел, но последнее 4, не 5. А range(1, 5) даёт 1,2,3,4 (с 1 до 5, пятёрку не включая).

Счётчик: накапливаем результат

Часто в цикле что-то накапливают — очки, сумму, количество. Заводят переменную до цикла, а внутри увеличивают её. Запись ochki = ochki + 1 значит «возьми старое значение и прибавь 1».

ochki = 0
for raund in range(3):
    ochki = ochki + 1
print("Очков:", ochki)
Очков: 3

Цикл while: пока условие верно

Когда заранее не знаешь, сколько раз повторять (например, пока игрок не угадает), берут while: он повторяет тело, ПОКА условие верно, и проверяет его перед каждым кругом.

x = 0
while x < 3:
    print("x равен", x)
    x = x + 1
print("Цикл закончился")
x равен 0
x равен 1
x равен 2
Цикл закончился
  while условие:  — повторять, ПОКА условие верно

    [проверить условие]
         | верно              | неверно
         v                    v
    выполнить тело        выйти из цикла
         |
         +---> снова к проверке
Внутри while что-то должно менять условие (например, x = x + 1), иначе оно всегда будет верным и цикл никогда не остановится — это «бесконечный цикл». Команда break досрочно прерывает цикл в любой момент.

Упражнение: угадайка с попытками и КНБ со счётом

Первая программа — угадайка, но теперь с while: спрашивает, пока не угадаешь. Скопируй и сыграй.

import random

zagadka = random.randint(1, 100)
dogadka = 0
while dogadka != zagadka:
    dogadka = int(input("Твоя догадка (1-100): "))
    if dogadka < zagadka:
        print("Загадано больше")
    elif dogadka > zagadka:
        print("Загадано меньше")
print("Угадал! Это было", zagadka)
Твоя догадка (1-100): 50
Загадано меньше
Твоя догадка (1-100): 25
Загадано больше
Твоя догадка (1-100): 37
Угадал! Это было 37

Вторая — «Камень-ножницы-бумага» на 3 раунда со счётом: for крутит раунды, random ходит за бота, счётчики копят очки.

import random

ty_ochki = 0
bot_ochki = 0
for raund in range(3):
    ty = input("камень / ножницы / бумага: ")
    n = random.randint(1, 3)
    if n == 1:
        bot = "камень"
    elif n == 2:
        bot = "ножницы"
    else:
        bot = "бумага"
    print("Бот выбрал:", bot)
    if ty == bot:
        print("Ничья")
    elif (ty == "камень" and bot == "ножницы") or (ty == "ножницы" and bot == "бумага") or (ty == "бумага" and bot == "камень"):
        ty_ochki = ty_ochki + 1
        print("Раунд твой!")
    else:
        bot_ochki = bot_ochki + 1
        print("Раунд бота.")
print("Счёт — ты:", ty_ochki, "бот:", bot_ochki)
камень / ножницы / бумага: камень
Бот выбрал: ножницы
Раунд твой!
...
  • В угадайке посчитай попытки: заведи popytok = 0 до цикла и popytok = popytok + 1 внутри.
  • В КНБ поменяй число раундов в range(3) на 5.
  • Добавь после игры вывод победителя через if по счёту.
Заметь: в угадайке мы НЕ знаем заранее, сколько будет попыток — поэтому while. А в КНБ раундов ровно 3 — поэтому for range(3). Это и есть разница между двумя циклами.

Контрольный вопрос. Что делает цикл for i in range(3)?

АПовторяет тело 3 раза, i принимает значения 0, 1, 2
БПовторяет тело 3 раза, i принимает значения 1, 2, 3
ВВыполняет тело один раз со значением 3

Подсказка: range(3) даёт числа, начиная с 0: 0, 1, 2 — всего три.

Онлайн-проверка ответа появится позже

Контрольный вопрос. Сколько раз выполнится тело цикла for i in range(7)? Впиши число.

Исходный код для этого задания:

for i in range(7):
    print("привет")

Подсказка: range(7) даёт 7 чисел (от 0 до 6) — столько раз и повторится тело.

Онлайн-проверка ответа появится позже

Контрольный вопрос. Какое САМОЕ БОЛЬШОЕ значение примет i в цикле for i in range(5)? Впиши число.

Исходный код для этого задания:

for i in range(5):
    print(i)

Подсказка: range(5) это 0, 1, 2, 3, 4. Пятёрка не включается.

Онлайн-проверка ответа появится позже

Контрольный вопрос. Что выведет программа из этого задания? Впиши число.

Исходный код для этого задания:

ochki = 0
for raund in range(4):
    ochki = ochki + 1
print(ochki)

Подсказка: ochki стартует с 0 и увеличивается на 1 за каждый из 4 кругов цикла.

Онлайн-проверка ответа появится позже

Контрольный вопрос. Что выведет программа из этого задания? Впиши число.

Исходный код для этого задания:

x = 0
while x < 3:
    x = x + 1
print(x)

Подсказка: Цикл крутится, пока x меньше 3, и каждый раз увеличивает x на 1. На каком x он остановится?

Онлайн-проверка ответа появится позже

Контрольный вопрос. Что означает заголовок цикла while ochki < 3:?

АПовторять тело, ПОКА ochki меньше 3
БВыполнить тело ровно 3 раза
ВСравнить ochki и 3 один раз и закончить

Подсказка: while по-английски «пока». Цикл повторяется, пока условие верно.

Онлайн-проверка ответа появится позже

Контрольный вопрос. Что делает команда break внутри цикла?

АДосрочно прерывает цикл и выходит из него
БПропускает один круг и идёт дальше
ВПерезапускает цикл с начала

Подсказка: break по-английски «прервать». Она немедленно завершает цикл.

Онлайн-проверка ответа появится позже

Задание. Напиши код сам. Напиши строку-заголовок цикла for, который повторит тело 10 раз, используя переменную i и range. (Только строку с for и двоеточием.)

Исходный код для этого задания:

# напиши ниже строку-заголовок цикла, который повторит тело 10 раз
    print("Повтор")

Подсказка: Шаблон: for i in range(сколько раз):. Не забудь двоеточие в конце.

✅ Готово, если: ты ввёл(а) верный ответ, и онлайн-проверка его приняла.

Онлайн-проверка ответа появится позже

Задание. Напиши код сам. Внутри цикла нужно вывести текущее значение счётчика i. Напиши эту команду print.

Исходный код для этого задания:

for i in range(5):
    # напиши тут команду, которая выведет значение i

Подсказка: Просто выведи переменную i. Шаблон: print(i).

✅ Готово, если: ты ввёл(а) верный ответ, и онлайн-проверка его приняла.

Онлайн-проверка ответа появится позже

Контрольный вопрос. Программа из этого задания зависает и печатает «привет» без конца. Почему?

Исходный код для этого задания:

x = 0
while x < 5:
    print("привет")
АВнутри while ничего не меняет x — условие всегда верно, цикл бесконечный
Бrange слишком большой
ВНе хватает команды import

Подсказка: Чтобы while однажды остановился, что-то в теле должно приближать условие к неверному (например, менять x).

Онлайн-проверка ответа появится позже

Что дальше

Теперь ты умеешь повторять действия — циклами for и while, вести счёт и прерывать цикл. Твои игры стали настоящими. В следующем разделе научимся хранить много данных сразу — списки — и соберём викторину.

Назад  ·  ↑ В начало урока  ·  ⌂ В начало курса  ·  Вперёд →

Школа Виктора Комлева