Содержание:
- Словарь Python-объектов
- Теория
- 1. Зачем нужны циклы
- 2. Синтаксис цикла for
- 3. Переменная цикла
- 4. range() с одним параметром
- 5. range() с двумя параметрами
- 6. range() с тремя параметрами
- 7. Отрицательный шаг
- 8. Типовые шаблоны: счётчик, сумма, произведение
- 9. Поиск максимума и минимума
- 10. Вложенные циклы
- 11. Типичные ошибки и рекомендации
- Лабораторные работы
- Самостоятельные задания
Словарь Python-объектов
Ниже приведён справочник по основным конструкциям, операторам и встроенным функциям, рассмотренным в этом уроке. Каждый пункт содержит ссылку на соответствующий раздел теории, лабораторную работу или задание.
Цикл for loop
-
for переменная in range(n):
Повторяет блок кода заданное число раз. -
Переменная цикла
Принимает новое значение на каждой итерации. -
Итерация
Одно выполнение тела цикла. -
Символ подчёркивания _
Используется, когда переменная цикла не нужна.
Функция range() range
-
range(n)
Генерирует числа от 0 до n − 1. -
range(start, stop)
Генерирует числа от start до stop − 1. -
range(start, stop, step)
Генерирует числа с заданным шагом step. -
Отрицательный шаг
Создаёт убывающую последовательность.
Типовые шаблоны patterns
-
Счётчик
Переменная для подсчёта количества совпадений. Стартует с 0. -
Аккумулятор суммы
Переменная для накопления суммы. Стартует с 0. -
Аккумулятор произведения
Переменная для накопления произведения. Стартует с 1. -
Максимум / минимум
Сохранение наибольшего / наименьшего значения. -
Среднее арифметическое
Сумма, делённая на количество. -
Вложенные циклы
Цикл внутри цикла — для создания таблиц, узоров, перебора пар.
Ввод и вывод I/O
-
input()
Считывает строку от пользователя. Возвращаетstr. -
int(input())
Считывает целое число с клавиатуры. -
print()
Выводит данные на экран. -
print(…, end=» «)
Задаёт завершающий символ вместо перевода строки.
Лабораторные работы practice
- Лабораторная 1Вывод строки 10 раз.
- Лабораторная 2Числа от 0 до 9.
- Лабораторная 3Числа от 1 до 10.
- Лабораторная 4Чётные числа от 2 до 20.
- Лабораторная 5Обратный отсчёт от 5 до 1.
- Лабораторная 6Сумма чисел от 1 до n.
- Лабораторная 7Факториал числа.
- Лабораторная 8Подсчёт чисел больше 10.
- Лабораторная 9Прямоугольник из звёздочек.
- Лабораторная 10Треугольник из звёздочек.
Самостоятельные задания tasks
- Задание 1Вывод «Hello» 5 раз.
- Задание 2Числа от 10 до 19.
- Задание 3Нечётные числа от 1 до 19.
- Задание 4Числа от m до n.
- Задание 5Сумма чётных чисел.
- Задание 6Произведение нечётных чисел.
- Задание 7Среднее арифметическое 10 чисел.
- Задание 8Наибольшее из 5 чисел.
- Задание 9Обратный отсчёт со звёздочками.
- Задание 10Таблица умножения.
- Задание 11Сумма цифр числа.
- Задание 12Последовательность Фибоначчи.
- Задание 13Сумма последовательности с обменом границ.
- Задание 14Счётчик положительных чисел, оканчивающихся на 7.
- Задание 15Минимум и максимум из n чисел.
- Задание 16Номер и значение элемента.
Теория
1. Зачем нужны циклы
Одно из главных преимуществ компьютеров перед человеком — способность многократно повторять однотипные действия быстро и без усталости.
Представьте, что вам нужно вывести на экран слово «Hello» 100 раз. Без циклов пришлось бы написать:
print("Hello") print("Hello") print("Hello") # ... и так ещё 97 раз |
Это утомительно, чревато ошибками и непрактично. Циклы решают эту проблему.
Типы циклов в Python
| Тип цикла | Назначение |
|---|---|
for |
Повторяет код заданное количество раз или перебирает элементы последовательности |
while |
Повторяет код, пока истинно условие |
В этом уроке мы разбираем цикл for.
2. Синтаксис цикла for
Цикл for в Python имеет следующую структуру:
for имя_переменной in range(количество_повторений): # тело цикла — блок кода |
Ключевые моменты:
- После первой строки ставится двоеточие
:. - Тело цикла выделяется отступом (4 пробела по PEP 8).
- Блок кода выполняется один раз для каждого значения в последовательности.
for i in range(10): print("Hello") |
Вывод:
Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello
Сравнение 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:
i = 0 - Итерация 2:
i = 1 - Итерация 3:
i = 2 - Итерация 4:
i = 3 - Итерация 5:
i = 4
Использование переменной цикла
Переменную цикла можно использовать внутри тела цикла:
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. Типовые шаблоны: счётчик, сумма, произведение
Счётчик
Часто нужно посчитать, сколько раз произошло некоторое событие.
Алгоритм:
- Создать переменную-счётчик и установить её в 0.
- Увеличивать её на 1 при каждом совпадении с условием.
counter = 0 # инициализируем счётчик for _ in range(10): num = int(input()) if num > 10: counter = counter + 1 # увеличиваем счётчик print("Количество чисел больше 10:", counter) |
count = 0 for num in range(-100, 100 + 1): if num > 0 and num % 10 == 7: count += 1 print(count) |
Вывод:
10
range(-100, 100 + 1).
Аккумулятор суммы
Алгоритм:
- Создать переменную-сумму и установить её в 0.
- Добавлять каждое значение к сумме.
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.
Среднее арифметическое
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 = 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 |
Рекомендации
- Используйте описательные имена переменных для ясности:
for student_id in range(1, 31): print("Студент", student_id)
- Используйте
_, если переменная цикла не нужна:for _ in range(10): print("Hello")
- Держите тело цикла коротким и сфокусированным.
- Помните, что верхняя граница в
range()не включается.
Лабораторные работы
В этом разделе представлены лабораторные работы с решениями. Попробуйте сначала решить задачу самостоятельно, а затем откройте решение для проверки.
Показать решение
for _ in range(10): print("Python — это круто!") |
Пример вывода:
Python — это круто! Python — это круто! Python — это круто! Python — это круто! Python — это круто! Python — это круто! Python — это круто! Python — это круто! Python — это круто! Python — это круто!
Пошаговое объяснение:
range(10)генерирует числа от 0 до 9.- Цикл выполняется 10 раз.
- На каждой итерации выводится строка.
- Используем
_, так как переменная цикла не нужна.
Показать решение
for i in range(10): print(i) |
Пример вывода:
0 1 2 3 4 5 6 7 8 9
Пошаговое объяснение:
range(10)генерирует числа от 0 до 9.- На каждой итерации
iпринимает очередное значение. print(i)выводит текущее значение.
Показать решение
for i in range(1, 11): print(i) |
Пример вывода:
1 2 3 4 5 6 7 8 9 10
Пошаговое объяснение:
range(1, 11)генерирует числа от 1 до 10.- Верхняя граница (11) не включается.
- На каждой итерации выводится
i.
Показать решение
for i in range(2, 21, 2): print(i) |
Пример вывода:
2 4 6 8 10 12 14 16 18 20
Пошаговое объяснение:
range(2, 21, 2)генерирует 2, 4, 6, …, 20.- Начинаем с 2, останавливаемся перед 21, шаг равен 2.
- Каждое значение выводится на новой строке.
Альтернативное решение (с if):
for i in range(2, 21): if i % 2 == 0: print(i) |
Показать решение
for i in range(5, 0, -1): print(i) print("Пуск!") |
Пример вывода:
5 4 3 2 1 Пуск!
Пошаговое объяснение:
range(5, 0, -1)генерирует 5, 4, 3, 2, 1.- Каждое число выводится на новой строке.
- После цикла выводится «Пуск!».
Показать решение
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
Пошаговое объяснение:
- Считываем n.
- Инициализируем
total = 0. - Перебираем i от 1 до n.
- Добавляем i к total на каждой итерации.
- Выводим итоговую сумму.
Показать решение
n = int(input("Введите n: ")) factorial = 1 for i in range(1, n + 1): factorial = factorial * i print(n, "! =", factorial) |
Пример работы:
Введите n: 5 5 ! = 120
Пошаговое объяснение:
- Считываем n.
- Инициализируем
factorial = 1— нейтральный элемент умножения. - Перебираем i от 1 до n.
- Умножаем factorial на i на каждой итерации.
- Выводим результат.
Проверка: для n = 5: 1 × 2 × 3 × 4 × 5 = 120.
Показать решение
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
Пошаговое объяснение:
- Инициализируем
counter = 0. - Повторяем цикл 10 раз.
- Считываем число на каждой итерации.
- Если число больше 10, увеличиваем counter.
- Выводим итоговое значение счётчика.
Показать решение
n = int(input("Введите n: ")) for _ in range(n): print("*" * 19) |
Пример работы при n = 3:
Введите n: 3 ******************* ******************* *******************
Пошаговое объяснение:
- Считываем n.
- Повторяем цикл n раз.
- На каждой итерации выводим 19 звёздочек (оператор
*повторяет строку).
Альтернатива (с вложенным циклом):
n = int(input("Введите n: ")) for _ in range(n): for _ in range(19): print("*", end="") print() |
Показать решение
n = int(input("Введите n: ")) for i in range(1, n + 1): for j in range(i): print("*", end="") print() |
Пример работы при n = 5:
Введите n: 5 * ** *** **** *****
Пошаговое объяснение:
- Считываем n.
- Внешний цикл: i от 1 до n — количество строк.
- Внутренний цикл: j от 0 до i − 1 — количество звёздочек в строке.
- Каждая строка содержит i звёздочек.
- После внутреннего цикла
print()переводит строку.
Самостоятельные задания
Решите следующие задачи самостоятельно. Для проверки используйте примеры вывода.
Пример вывода:
Hello Hello Hello Hello Hello
Пример вывода:
10 11 12 13 14 15 16 17 18 19
Пример вывода:
1 3 5 7 9 11 13 15 17 19
Пример вывода:
Введите m: 3 Введите n: 7 3 4 5 6 7
Пример вывода:
Введите n: 10 Сумма чётных чисел от 1 до 10: 30
Пример вывода:
Введите n: 7 Произведение нечётных чисел от 1 до 7: 105
Пример вывода:
Введите число 1: 5 Введите число 2: 7 Введите число 3: 3 Введите число 4: 8 Введите число 5: 6 Введите число 6: 9 Введите число 7: 4 Введите число 8: 2 Введите число 9: 10 Введите число 10: 6 Среднее: 6.0
Пример вывода:
Введите число 1: 12 Введите число 2: 7 Введите число 3: 23 Введите число 4: 9 Введите число 5: 15 Наибольшее: 23
Пример вывода при n = 5:
Введите n: 5 5 ***** 4 **** 3 *** 2 ** 1 *
Пример вывода:
Введите 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
Пример вывода:
Введите число: 1234 Сумма цифр: 10
Подсказка: можно преобразовать число в строку и перебрать её символы, либо использовать % и // для извлечения цифр.
Пример вывода:
Введите n: 10 1 1 2 3 5 8 13 21 34 55
Подсказка: начните с a = 1, b = 1. Каждое следующее число — это a + b.
start до значения end включительно. Если пользователь задаст первое число больше второго, просто поменяйте их местами.
Пример вывода:
Введите start: 10 Введите end: 3 Сумма чисел от 3 до 10: 52
Пример вывода:
10
Пример вывода:
Введите n: 5 8 0 1056 8192 517 Минимум: 0 Максимум: 8192
Пример вывода:
Номер элемента — 1 Значение элемента — 10 Номер элемента — 2 Значение элемента — 20 Номер элемента — 3 Значение элемента — -15 Номер элемента — 4 Значение элемента — 17 Номер элемента — 5 Значение элемента — -4
Подсказка: используйте переменную цикла как номер текущего элемента.