Урок 4. Цикл for и функция range() в Python

Цикл for и функция range() в Python

Назад
Далее



Словарь Python-объектов

Ниже приведён справочник по основным конструкциям, операторам и встроенным функциям, рассмотренным в этом уроке. Каждый пункт содержит ссылку на соответствующий раздел теории, лабораторную работу или задание.

Как пользоваться: щёлкните по названию объекта — откроется соответствующий раздел теории, где этот объект подробно разобран с примерами.

Цикл for loop

Функция range() range

Типовые шаблоны patterns

Ввод и вывод I/O

  • input()
    Считывает строку от пользователя. Возвращает str.
  • int(input())
    Считывает целое число с клавиатуры.
  • print()
    Выводит данные на экран.
  • print(…, end=» «)
    Задаёт завершающий символ вместо перевода строки.

Лабораторные работы practice

Самостоятельные задания tasks



Теория

1. Зачем нужны циклы

Одно из главных преимуществ компьютеров перед человеком — способность многократно повторять однотипные действия быстро и без усталости.

Представьте, что вам нужно вывести на экран слово «Hello» 100 раз. Без циклов пришлось бы написать:

print("Hello")
print("Hello")
print("Hello")
# ... и так ещё 97 раз

Это утомительно, чревато ошибками и непрактично. Циклы решают эту проблему.

Типы циклов в Python

Тип цикла Назначение
for Повторяет код заданное количество раз или перебирает элементы последовательности
while Повторяет код, пока истинно условие

В этом уроке мы разбираем цикл for.

Интересный факт: первые языки программирования с циклами появились в 1950-х годах. До этого программистам приходилось записывать каждую инструкцию отдельно!

2. Синтаксис цикла for

Цикл for в Python имеет следующую структуру:

for имя_переменной in range(количество_повторений):
    # тело цикла — блок кода

Ключевые моменты:

  • После первой строки ставится двоеточие :.
  • Тело цикла выделяется отступом (4 пробела по PEP 8).
  • Блок кода выполняется один раз для каждого значения в последовательности.
Пример: выведем «Hello» 10 раз.
for i in range(10):
    print("Hello")

Вывод:

Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Внимание: цикл выполняется ровно 10 раз. Каждое выполнение называется итерацией.

Сравнение for и if

Структура цикла for похожа на условный оператор if — оба используют двоеточие и блок с отступом:

# if — выполняется один раз при истинности условия
if условие:
    # блок кода
 
# for — выполняется многократно
for переменная in range(n):
    # блок кода

Разница в том, что блок if выполняется максимум один раз, а блок for — многократно.

3. Переменная цикла

Переменная цикла принимает новое значение на каждой итерации.

Пример:
for i in range(5):
    print(i)

Вывод:

0
1
2
3
4

Что происходит:

  1. Итерация 1: i = 0
  2. Итерация 2: i = 1
  3. Итерация 3: i = 2
  4. Итерация 4: i = 3
  5. Итерация 5: i = 4
Важно: переменная цикла начинается с 0, а не с 1!

Использование переменной цикла

Переменную цикла можно использовать внутри тела цикла:

for i in range(5):
    print(i + 1, "- - Hello")

Вывод:

1 - - Hello
2 - - Hello
3 - - Hello
4 - - Hello
5 - - Hello

Здесь i + 1 даёт числа от 1 до 5.

Именование переменной цикла

Традиционно переменные цикла называют i, j, k (сокращение от «index» — индекс):

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

Однако можно использовать любое допустимое имя переменной:

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

Оба варианта дают одинаковый вывод: 0, 1, 2, 3, 4.

Когда переменная цикла не нужна

Иногда переменная цикла не нужна — требуется просто повторить действие:

for i in range(5):
    print("Python is awesome!")

Поскольку i не используется, по соглашению применяют подчёркивание _:

for _ in range(5):
    print("Python is awesome!")

Вывод:

Python is awesome!
Python is awesome!
Python is awesome!
Python is awesome!
Python is awesome!
Интересный факт: подчёркивание _ — это допустимое имя переменной в Python, которое часто используется как «выбрасываемая» переменная, когда её значение не важно.

4. range() с одним параметром

Функция range(n) генерирует последовательность чисел от 0 до n − 1:

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

Вывод:

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

Формула: range(n) → 0, 1, 2, …, n-1

  • Начинается с 0;
  • Заканчивается перед n;
  • Генерирует ровно n чисел.
Интересный факт: функция range() в Python 3 возвращает объект range, а не список. Это экономит память при работе с большими последовательностями.

5. range() с двумя параметрами

Функция range(start, stop) генерирует числа от start до stop − 1:

for i in range(3, 10):
    print(i)

Вывод:

3
4
5
6
7
8
9

Общее правило: range(start, stop) → start, start+1, start+2, …, stop-1

Примеры:
range(1, 6)    # 1, 2, 3, 4, 5
range(10, 20)  # 10, 11, 12, ..., 19
range(7, 3)    # пустая последовательность!

6. range() с тремя параметрами

Функция range(start, stop, step) генерирует числа с пользовательским шагом:

for i in range(3, 10, 2):
    print(i)

Вывод:

3
5
7
9

Формула: range(start, stop, step) → start, start+step, start+2*step, …

Примеры:
range(1, 10, 2)   # 1, 3, 5, 7, 9
range(2, 15, 3)   # 2, 5, 8, 11, 14
range(5, 30, 5)   # 5, 10, 15, 20, 25

Шаг может быть любым положительным целым числом. Значение по умолчанию — 1.

7. Отрицательный шаг

С помощью отрицательного шага можно вести отсчёт в обратную сторону:

for i in range(10, 3, -1):
    print(i)

Вывод:

10
9
8
7
6
5
4
Важно: при отрицательном шаге начальное значение должно быть больше конечного:

range(10, 0, -1)   # 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 — правильно
range(1, 10, -1)   # пустая последовательность!
Пример: обратный отсчёт.
for i in range(5, 0, -1):
    print(i, end=" ")
print("Пуск!")

Вывод:

5 4 3 2 1 Пуск!

Сводная таблица использования range()

Вызов Последовательность
range(5) 0, 1, 2, 3, 4
range(1, 5) 1, 2, 3, 4
range(3, 7) 3, 4, 5, 6
range(7, 3) (пусто)
range(2, 15, 3) 2, 5, 8, 11, 14
range(9, 2, -1) 9, 8, 7, 6, 5, 4, 3
range(3, 10, -2) (пусто)

8. Типовые шаблоны: счётчик, сумма, произведение

Счётчик

Часто нужно посчитать, сколько раз произошло некоторое событие.

Алгоритм:

  1. Создать переменную-счётчик и установить её в 0.
  2. Увеличивать её на 1 при каждом совпадении с условием.
counter = 0  # инициализируем счётчик
 
for _ in range(10):
    num = int(input())
    if num > 10:
        counter = counter + 1  # увеличиваем счётчик
 
print("Количество чисел больше 10:", counter)
Пример: посчитаем количество положительных чисел, оканчивающихся на 7, в диапазоне от −100 до 100.
count = 0
for num in range(-100, 100 + 1):
    if num > 0 and num % 10 == 7:
        count += 1
print(count)

Вывод:

10
Обратите внимание: для включения правой границы в перебор мы увеличиваем конечное значение на 1 — range(-100, 100 + 1).

Аккумулятор суммы

Алгоритм:

  1. Создать переменную-сумму и установить её в 0.
  2. Добавлять каждое значение к сумме.
total = 0
 
for i in range(1, 101):
    total = total + i
 
print(total)  # 5050

Версия с условием отбора:

s = 0
for num in range(50, 151):
    if num % 12 == 5:
        s += num
print(s)

Находит сумму чисел из отрезка [50; 150], остаток от деления на 12 которых равен 5.

Аккумулятор произведения

p = 1
for num in range(2, 11):
    if num % 2 == 0:
        p *= num
print(p)

Находит произведение чётных чисел из отрезка [2; 10].

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

Таким образом можно вычислить факториал числа n:

n = int(input())
factorial = 1
for num in range(1, n + 1):
    factorial *= num
print(factorial)

При вводе 5 программа выведет 120.

Примечание: факториал числа n — это произведение всех чисел от 1 до n.

Среднее арифметическое

s = count = 0
for num in range(103, 217):
    if num % 5 == 0:
        s += num
        count += 1
average_value = s / count
print(average_value)

Перебирает числа из отрезка [103; 216] и находит среднее арифметическое всех чисел, удовлетворяющих условию. Для этого сумма подходящих чисел делится на их количество.

9. Поиск максимума и минимума

С помощью цикла можно обработать введённые с клавиатуры числа и найти максимальное и минимальное из них.

Пример: пусть на вход подаётся n неотрицательных целых чисел, не превышающих 10 000.
n = int(input())
max_num = -1
min_num = 10001
 
for _ in range(n):
    num = int(input())
    if num > max_num:
        max_num = num
    if num < min_num:
        min_num = num
 
print(min_num, max_num)

Переменные max_num и min_num будут использованы для сохранения максимального и минимального из введённых значений. Изначально max_num принимает строго меньшее значение, чем минимальное из допустимых чисел. Это нужно, чтобы условие перезаписи максимума выполнилось независимо от величины первого введённого числа. Аналогично min_num на старте принимает значение, большее максимально допустимого.

Пример трассировки: пусть n = 5, введены числа 8, 0, 1056, 8192, 517.

Итерация Введено min_num max_num
1 8 8 8
2 0 0 8
3 1056 0 1056
4 8192 0 8192
5 517 0 8192

В конце цикла min_num = 0, max_num = 8192.

10. Вложенные циклы

Цикл может содержать внутри себя другой цикл. Такой цикл называется вложенным.

for i in range(3):
    for j in range(5):
        print("*", end="")
    print()  # перевод строки после каждого ряда

Вывод:

*****
*****
*****

Как это работает:

  • Внешний цикл (i) выполняется 3 раза — это строки;
  • Внутренний цикл (j) выполняется 5 раз для каждой строки — это столбцы;
  • Всего итераций: 3 × 5 = 15.

Треугольник из звёздочек

n = int(input())
 
for i in range(1, n + 1):
    for j in range(i):
        print("*", end="")
    print()

Пример работы при n = 5:

*
**
***
****
*****
Ключевая идея: диапазон внутреннего цикла может зависеть от переменной внешнего цикла. Это позволяет создавать треугольные узоры.

11. Типичные ошибки и рекомендации

Типичные ошибки

1. Забытое двоеточие

# НЕПРАВИЛЬНО
for i in range(5)     # Нет двоеточия!
    print(i)
 
# ПРАВИЛЬНО
for i in range(5):
    print(i)

2. Неправильный отступ

# НЕПРАВИЛЬНО — print("World") вне цикла
for i in range(5):
    print("Hello")
print("World")  # выполнится только один раз!
 
# ПРАВИЛЬНО — обе строки внутри цикла
for i in range(5):
    print("Hello")
    print("World")

3. Ошибка на единицу

# Выводит 0..4, а НЕ 1..5
for i in range(5):
    print(i)
 
# Правильно — использовать range(1, 6)
for i in range(1, 6):
    print(i)

4. Забытая инициализация счётчиков/сумм

# НЕПРАВИЛЬНО — counter не инициализирован
for _ in range(5):
    counter = counter + 1  # NameError!
 
# ПРАВИЛЬНО
counter = 0
for _ in range(5):
    counter = counter + 1

Рекомендации

  1. Используйте описательные имена переменных для ясности:
    for student_id in range(1, 31):
        print("Студент", student_id)
  2. Используйте _, если переменная цикла не нужна:
    for _ in range(10):
        print("Hello")
  3. Держите тело цикла коротким и сфокусированным.
  4. Помните, что верхняя граница в range() не включается.



Лабораторные работы

В этом разделе представлены лабораторные работы с решениями. Попробуйте сначала решить задачу самостоятельно, а затем откройте решение для проверки.

Лабораторная работа 1. Вывод строки 10 раз
Задача: напишите программу, которая выводит строку «Python — это круто!» 10 раз.
Показать решение
for _ in range(10):
    print("Python — это круто!")

Пример вывода:

Python — это круто!
Python — это круто!
Python — это круто!
Python — это круто!
Python — это круто!
Python — это круто!
Python — это круто!
Python — это круто!
Python — это круто!
Python — это круто!

Пошаговое объяснение:

  1. range(10) генерирует числа от 0 до 9.
  2. Цикл выполняется 10 раз.
  3. На каждой итерации выводится строка.
  4. Используем _, так как переменная цикла не нужна.

Лабораторная работа 2. Числа от 0 до 9
Задача: выведите все числа от 0 до 9, каждое на новой строке.
Показать решение
for i in range(10):
    print(i)

Пример вывода:

0
1
2
3
4
5
6
7
8
9

Пошаговое объяснение:

  1. range(10) генерирует числа от 0 до 9.
  2. На каждой итерации i принимает очередное значение.
  3. print(i) выводит текущее значение.

Лабораторная работа 3. Числа от 1 до 10
Задача: выведите все числа от 1 до 10, каждое на новой строке.
Показать решение
for i in range(1, 11):
    print(i)

Пример вывода:

1
2
3
4
5
6
7
8
9
10

Пошаговое объяснение:

  1. range(1, 11) генерирует числа от 1 до 10.
  2. Верхняя граница (11) не включается.
  3. На каждой итерации выводится i.

Лабораторная работа 4. Чётные числа от 2 до 20
Задача: выведите все чётные числа от 2 до 20.
Показать решение
for i in range(2, 21, 2):
    print(i)

Пример вывода:

2
4
6
8
10
12
14
16
18
20

Пошаговое объяснение:

  1. range(2, 21, 2) генерирует 2, 4, 6, …, 20.
  2. Начинаем с 2, останавливаемся перед 21, шаг равен 2.
  3. Каждое значение выводится на новой строке.

Альтернативное решение (с if):

for i in range(2, 21):
    if i % 2 == 0:
        print(i)

Лабораторная работа 5. Обратный отсчёт
Задача: выведите обратный отсчёт от 5 до 1, а затем строку «Пуск!».
Показать решение
for i in range(5, 0, -1):
    print(i)
print("Пуск!")

Пример вывода:

5
4
3
2
1
Пуск!

Пошаговое объяснение:

  1. range(5, 0, -1) генерирует 5, 4, 3, 2, 1.
  2. Каждое число выводится на новой строке.
  3. После цикла выводится «Пуск!».

Лабораторная работа 6. Сумма чисел от 1 до n
Задача: считайте число n и вычислите сумму всех чисел от 1 до n.
Показать решение
n = int(input("Введите n: "))
total = 0
 
for i in range(1, n + 1):
    total = total + i
 
print("Сумма чисел от 1 до", n, ":", total)

Пример работы:

Введите n: 10
Сумма чисел от 1 до 10 : 55

Пошаговое объяснение:

  1. Считываем n.
  2. Инициализируем total = 0.
  3. Перебираем i от 1 до n.
  4. Добавляем i к total на каждой итерации.
  5. Выводим итоговую сумму.

Лабораторная работа 7. Факториал числа
Задача: считайте число n и вычислите n! (факториал).
Показать решение
n = int(input("Введите n: "))
factorial = 1
 
for i in range(1, n + 1):
    factorial = factorial * i
 
print(n, "! =", factorial)

Пример работы:

Введите n: 5
5 ! = 120

Пошаговое объяснение:

  1. Считываем n.
  2. Инициализируем factorial = 1 — нейтральный элемент умножения.
  3. Перебираем i от 1 до n.
  4. Умножаем factorial на i на каждой итерации.
  5. Выводим результат.

Проверка: для n = 5: 1 × 2 × 3 × 4 × 5 = 120.

Лабораторная работа 8. Подсчёт чисел больше 10
Задача: считайте 10 чисел и подсчитайте, сколько из них больше 10.
Показать решение
counter = 0
 
for i in range(10):
    num = int(input("Введите число " + str(i + 1) + ": "))
    if num > 10:
        counter = counter + 1
 
print("Количество чисел больше 10:", counter)

Пример работы:

Введите число 1: 5
Введите число 2: 12
Введите число 3: 8
Введите число 4: 15
Введите число 5: 3
Введите число 6: 20
Введите число 7: 7
Введите число 8: 11
Введите число 9: 9
Введите число 10: 14
Количество чисел больше 10: 5

Пошаговое объяснение:

  1. Инициализируем counter = 0.
  2. Повторяем цикл 10 раз.
  3. Считываем число на каждой итерации.
  4. Если число больше 10, увеличиваем counter.
  5. Выводим итоговое значение счётчика.

Лабораторная работа 9. Прямоугольник из звёздочек
Задача: считайте n и выведите прямоугольник из звёздочек из n строк по 19 столбцов.
Показать решение
n = int(input("Введите n: "))
 
for _ in range(n):
    print("*" * 19)

Пример работы при n = 3:

Введите n: 3
*******************
*******************
*******************

Пошаговое объяснение:

  1. Считываем n.
  2. Повторяем цикл n раз.
  3. На каждой итерации выводим 19 звёздочек (оператор * повторяет строку).

Альтернатива (с вложенным циклом):

n = int(input("Введите n: "))
 
for _ in range(n):
    for _ in range(19):
        print("*", end="")
    print()

Лабораторная работа 10. Треугольник из звёздочек
Задача: считайте n и выведите прямоугольный треугольник из звёздочек с n строками.
Показать решение
n = int(input("Введите n: "))
 
for i in range(1, n + 1):
    for j in range(i):
        print("*", end="")
    print()

Пример работы при n = 5:

Введите n: 5
*
**
***
****
*****

Пошаговое объяснение:

  1. Считываем n.
  2. Внешний цикл: i от 1 до n — количество строк.
  3. Внутренний цикл: j от 0 до i − 1 — количество звёздочек в строке.
  4. Каждая строка содержит i звёздочек.
  5. После внутреннего цикла print() переводит строку.



Самостоятельные задания

Решите следующие задачи самостоятельно. Для проверки используйте примеры вывода.

Задание 1. Вывод «Hello» 5 раз
Условие: напишите программу, которая выводит «Hello» 5 раз.

Пример вывода:

Hello
Hello
Hello
Hello
Hello

Задание 2. Числа от 10 до 19
Условие: выведите все числа от 10 до 19, каждое на новой строке.

Пример вывода:

10
11
12
13
14
15
16
17
18
19

Задание 3. Нечётные числа от 1 до 19
Условие: выведите все нечётные числа от 1 до 19.

Пример вывода:

1
3
5
7
9
11
13
15
17
19

Задание 4. Числа от m до n
Условие: считайте два числа m и n (причём m ≤ n) и выведите все числа от m до n включительно.

Пример вывода:

Введите m: 3
Введите n: 7
3
4
5
6
7

Задание 5. Сумма чётных чисел
Условие: считайте n и вычислите сумму всех чётных чисел от 1 до n.

Пример вывода:

Введите n: 10
Сумма чётных чисел от 1 до 10: 30

Задание 6. Произведение нечётных чисел
Условие: считайте n и вычислите произведение всех нечётных чисел от 1 до n.

Пример вывода:

Введите n: 7
Произведение нечётных чисел от 1 до 7: 105

Задание 7. Среднее арифметическое 10 чисел
Условие: считайте 10 чисел и вычислите их среднее арифметическое.

Пример вывода:

Введите число 1: 5
Введите число 2: 7
Введите число 3: 3
Введите число 4: 8
Введите число 5: 6
Введите число 6: 9
Введите число 7: 4
Введите число 8: 2
Введите число 9: 10
Введите число 10: 6
Среднее: 6.0

Задание 8. Наибольшее из 5 чисел
Условие: считайте 5 чисел и найдите среди них наибольшее.

Пример вывода:

Введите число 1: 12
Введите число 2: 7
Введите число 3: 23
Введите число 4: 9
Введите число 5: 15
Наибольшее: 23

Задание 9. Обратный отсчёт со звёздочками
Условие: считайте n и выведите обратный отсчёт от n до 1, причём в каждой строке должно быть столько звёздочек, каково текущее число.

Пример вывода при n = 5:

Введите n: 5
5 *****
4 ****
3 ***
2 **
1 *

Задание 10. Таблица умножения
Условие: считайте n и выведите таблицу умножения для n (от 1 до 10).

Пример вывода:

Введите n: 5
5 x 1 = 5
5 x 2 = 10
5 x 3 = 15
5 x 4 = 20
5 x 5 = 25
5 x 6 = 30
5 x 7 = 35
5 x 8 = 40
5 x 9 = 45
5 x 10 = 50

Задание 11. Сумма цифр числа
Условие: считайте число n и вычислите сумму его цифр.

Пример вывода:

Введите число: 1234
Сумма цифр: 10

Подсказка: можно преобразовать число в строку и перебрать её символы, либо использовать % и // для извлечения цифр.

Задание 12. Последовательность Фибоначчи
Условие: считайте n и выведите первые n чисел последовательности Фибоначчи: 1, 1, 2, 3, 5, 8, 13, …

Пример вывода:

Введите n: 10
1
1
2
3
5
8
13
21
34
55

Подсказка: начните с a = 1, b = 1. Каждое следующее число — это a + b.

Задание 13. Сумма последовательности с обменом границ
Условие: напишите программу, которая суммирует все целые числа от значения start до значения end включительно. Если пользователь задаст первое число больше второго, просто поменяйте их местами.

Пример вывода:

Введите start: 10
Введите end: 3
Сумма чисел от 3 до 10: 52

Задание 14. Счётчик положительных чисел, оканчивающихся на 7
Условие: подсчитайте количество положительных чисел, оканчивающихся на 7, в диапазоне от −100 до 100.

Пример вывода:

10

Задание 15. Минимум и максимум из n чисел
Условие: считайте n, а затем n неотрицательных целых чисел, не превышающих 10 000. Выведите минимальное и максимальное из введённых чисел.

Пример вывода:

Введите n: 5
8
0
1056
8192
517
Минимум: 0
Максимум: 8192

Задание 16. Номер и значение элемента
Условие: считайте 5 чисел. После считывания каждого числа выводите его порядковый номер и значение.

Пример вывода:

Номер элемента — 1 Значение элемента — 10
Номер элемента — 2 Значение элемента — 20
Номер элемента — 3 Значение элемента — -15
Номер элемента — 4 Значение элемента — 17
Номер элемента — 5 Значение элемента — -4

Подсказка: используйте переменную цикла как номер текущего элемента.



Назад
Далее