edubun
Русский

Повторение с for и while

range(5) даёт 0, 1, 2, 3 и 4: пять чисел, среди которых нет 5.

Запусти цикл из трёх строк и проследи рост total

Скопируй эту программу в IDLE и запусти до чтения объяснения. Затем замени список своими числами и запусти ещё раз.

total = 0
for n in [3, 5, 2]:
    total = total + n
    print(n, total)
print("done", total)
Вывод
3 3
5 8
2 10
done 10

Строка for берёт элементы списка по одному. На каждом проходе переменная n ссылается на очередной элемент, а строки с отступом выполняются один раз с этим значением. Один такой проход называют итерацией. После последнего элемента Python переходит к первой строке без отступа, поэтому "done" выводится один раз, в конце. Таблица трассировки помогает увидеть порядок действий.

Проходntotal после проходаВывод
(до)0
1333 3
2585 8
32102 10
(после)10done 10
На каждом проходе очередной элемент попадает в n и прибавляется к total. Накопление суммы — самый распространённый приём работы с циклами.

Переменную total называют накопителем: до цикла она равна 0, а на каждом проходе что-то накапливает. Строка total = total + n настолько распространена, что для неё есть сокращение total += n. Подсчёт количества работает так же с count += 1.

range() создаёт числа за тебя

Чтобы повторить действие заданное число раз, используй цикл по range(). range(5) даёт 0, 1, 2, 3, 4: начинается с 0 и заканчивается перед 5, как срез. range(1, 6) даёт числа от 1 до 5. Третье число задаёт шаг, поэтому range(0, 10, 2) даёт чётные числа от 0 до 8. Таблица умножения на 7, которую каждый корейский школьник учит во втором классе, записывается циклом в две строки.

for i in range(1, 10):
    print(7, "x", i, "=", 7 * i)
Вывод
7 x 1 = 7
7 x 2 = 14
7 x 3 = 21
7 x 4 = 28
7 x 5 = 35
7 x 6 = 42
7 x 7 = 49
7 x 8 = 56
7 x 9 = 63

Цикл for может обходить и символы строки, поэтому с ним легко считать буквы.

count = 0
for ch in "banana":
    if ch == "a":
        count += 1
print(count)
Вывод
3

while повторяется, пока условие равно True

У цикла while нет списка для обхода. Он проверяет условие, выполняет строки с отступом, если оно равно True, и снова проверяет, раз за разом. Это удобно, когда число проходов заранее неизвестно, например «продолжай копить до 50 000 вон». Что-то внутри цикла должно менять условие, иначе цикл не закончится. Если это произошло, останови программу клавишами Ctrl+C.

saved = 0
weeks = 0
while saved < 50000:
    saved += 12000
    weeks += 1
print(weeks, saved)
Вывод
5 60000

break немедленно выходит из цикла, даже посередине. Это удобно при поиске: можно остановиться, как только найдено нужное. Цикл ниже останавливается на первой оценке меньше 60 и даже не проверяет 88.

for s in [72, 91, 55, 88]:
    if s < 60:
        print("first below 60:", s)
        break
    print("ok", s)
Вывод
ok 72
ok 91
first below 60: 55
for x in ...Выполняет строки с отступом один раз для каждого элемента
range(a, b)Целые числа от a до b, не включая b
whileПовторяется, пока условие равно True
накопительПеременная, накапливающая сумму за несколько проходов
+=total += n — сокращённая запись total = total + n
breakНемедленно выходит из цикла
  1. Что выведет этот код?
    for i in range(3):
        print(i)
    • 0
      1
      2
    • 1
      2
      3
    • 0
      1
      2
      3
    • 3
  2. Что выведет этот код?
    total = 0
    for n in range(1, 5):
        total += n
    print(total)
  3. Что выведет этот код?
    print(list(range(0, 10, 3)))
  4. Что выведет этот код?
    total = 0
    for n in [1, 2, 3]:
        total += n
        print(total)
    • 6
    • 1
      3
      6
    • 1
      2
      3
    • 0
      1
      3
  5. Что выведет этот код?
    count = 0
    for ch in "seoul":
        if ch in "aeiou":
            count += 1
    print(count)
  6. Что выведет этот код?
    n = 1
    while n < 20:
        n = n * 2
    print(n)
  7. Что выведет этот код?
    for s in [5, 8, 3, 9]:
        if s > 6:
            print(s)
            break
  8. Сколько раз этот код выведет hi?
    for i in range(2, 8):
        print("hi")
  9. Что выведет этот код?
    word = ""
    for ch in "abc":
        word = ch + word
    print(word)
  10. Расположи строки по порядку, чтобы программа вывела сумму чисел от 1 до 100.
    Вывод
    5050
Частые ошибки
  • «range(1, 10) доходит до 10». Он заканчивается перед 10, поэтому последнее значение 9. Для чисел от 1 до 10 напиши range(1, 11).
  • «С моим циклом while всё в порядке, просто он долго работает». Если внутри цикла ничто не меняет условие, он не остановится. Проверь, что переменная из условия обновляется на каждом проходе, и нажми Ctrl+C, чтобы прервать бесконечный цикл.
  • «Нет разницы, поставить print внутри цикла или снаружи». С отступом внутри for он выполняется на каждом проходе; у левого края один раз после цикла. Реши, нужны ли тебе все шаги или только итоговый ответ.
Заметка для учителяПусть ученики запустят цикл до объяснений, затем вместе заполните таблицу трассировки на доске. По таблице становится понятно, что значит «строки с отступом выполняются один раз для каждого элемента». Чаще всего ошибаются в конечной границе range() и отступе итогового print. Перед запуском while попроси показать строку, благодаря которой условие в итоге станет False. Таблица умножения на 7 помогает корейским ученикам быстро освоиться: они знают вывод наизусть и могут проверить его с первого взгляда.
Главное
  • for x in list: выполняет строки с отступом один раз для каждого элемента.
  • range(a, b) заканчивается перед b; range(n) даёт от 0 до n - 1.
  • Накопитель создаётся до цикла и растёт внутри него.
  • while повторяется, пока условие равно True; что-то должно менять его.
  • break сразу выходит из цикла.
Источники курса (6)
  • Python Software Foundation, The Python Tutorial for Python 3.12 (docs.python.org/3.12/tutorial: 2 Using the Python Interpreter, 3 An Informal Introduction to Python (numbers, text, lists), 4 More Control Flow Tools (if, for, range, break and continue, defining functions, default argument values, 4.10 coding style: 4-space indentation), 5 Data Structures (list methods, 5.5 dictionaries, insertion order), 8 Errors and Exceptions (syntax errors, exceptions, reading the traceback, handling exceptions), 15 Floating-Point Arithmetic (0.1 + 0.2))
  • Built-in Functions (docs.python.org/3.12/library/functions.html: print, input, len, int, float, str, type, round (round half to even: round(0.5) and round(-0.5) are 0, round(1.5) is 2), range, sum, min, max, sorted)
  • Built-in Types (str methods upper, lower, replace, strip; dict.get; list.append, pop, remove, sort returning None)
  • General Python FAQ (docs.python.org/3.12/faq/general.html: Guido van Rossum began Python in the 1989 Christmas holidays, posted it to USENET in February 1991, named it after Monty Python's Flying Circus)
  • Curriculum for the Korean pages: 교육부 고시 제2022-33호 [별책 10] 정보과 교육과정 (PDF read 2026-10-19: 중학교 정보 [9정03-05] 리스트 등 데이터를 순차적으로 저장하는 구조, [9정03-06] 논리 연산과 중첩 제어 구조, [9정03-07] 함수 활용과 디버거로 오류 수정, [9정03-08] 실생활 문제를 프로그래밍으로 해결, 적용 시 고려 사항 「학생의 수준을 고려하여 적합한 프로그래밍 언어를 선정」; 고등학교 정보 [12정03-04] 자료형, [12정03-05] 표준입출력, [12정03-07] 제어 구조)
  • Bug story only: Smithsonian National Museum of American History, Log Book With Computer Bug, 1947, Harvard Mark II, "first actual case of bug being found", probably not Hopper's log book (americanhistory.si.edu/collections/object/nmah_334663, read 2026-10-19)

Проверено: 2026-10-19