Справочник по Python · модуль 3 · списки и циклы
Глава 3.5
Практические примеры
по for in
Пятнадцать задач показывают основные схемы цикла: вывести каждое значение, накопить результат, отобрать элементы, найти максимум и завершить поиск через break.
- Категория
- Практика циклов
- Уровень
- Начальный
- Связанные темы
- for, range(), условия, строки
- Зачем это знать
- Узнавать типовые схемы решения задач
§1Как разбирать задачи
Перед написанием цикла ответьте на три вопроса: какие значения перебираются, что происходит с одним значением и нужен ли общий результат после завершения.
- Выберите последовательность: строку, список или
range(). - Дайте переменной цикла имя одного элемента.
- Если нужен итог, создайте переменную-накопитель до цикла.
- После цикла выведите или используйте накопленный результат.
§2Числа и квадраты
Задача 1: вывести числа от 1 до 5.
for number in range(1, 6): print(number)
1 2 3 4 5
Задача 2: рядом с каждым числом вывести его квадрат.
for number in range(1, 6): print(number, number * number)
1 1 2 4 3 9 4 16 5 25
§3Накопление суммы
Задача 3: найти сумму чисел от 1 до 5. Накопитель начинается с нуля, потому что прибавление нуля не меняет сумму.
total = 0 for number in range(1, 6): total += number print(total)
15
print() стоит без отступа, поэтому выполняется один раз после завершения цикла.
§4Фильтрация по условию
Задача 4: вывести только чётные числа от 1 до 10. Условие внутри цикла решает, какие значения подходят.
for number in range(1, 11): if number % 2 == 0: print(number)
2 4 6 8 10
§5Накопление произведения
Задача 5: вычислить факториал числа 5, то есть произведение 1 · 2 · 3 · 4 · 5. Для произведения накопитель начинается с единицы.
number = 5 result = 1 for factor in range(1, number + 1): result *= factor print(result)
120
Если начать с нуля, первое же умножение превратит весь результат в ноль.
§6Перебор символов
Задача 6: вручную подсчитать количество символов. Счётчик увеличивается один раз для каждого символа.
text = "Python" count = 0 for letter in text: count += 1 print(count)
6
Задача 7: вывести каждый символ строки отдельно.
text = "Code" for letter in text: print(letter)
C o d e
§7Сумма цифр
Задача 8: найти сумму цифр положительного целого числа. После преобразования числа в строку цикл получает символы, а int() превращает каждый символ обратно в число.
number = 12345 total = 0 for digit in str(number): total += int(digit) print(total)
15
Для отрицательного числа строка содержит знак -, который нельзя преобразовать в целое число. Такой случай требует отдельной обработки, например str(abs(number)).
§8Поиск максимума
Задача 9: найти наибольшее число без функции max(). Первое значение берётся как начальный кандидат, затем каждый элемент сравнивается с ним.
numbers = [5, 8, 2, 10, 3] largest = numbers[0] for number in numbers: if number > largest: largest = number print(largest)
10
Алгоритм предполагает, что список не пуст. Иначе элемента с индексом 0 не существует.
§9Подсчёт подходящих элементов
Задача 10: подсчитать чётные числа в списке. Здесь соединяются фильтрация условием и счётчик.
numbers = [1, 4, 7, 10, 12, 3] count = 0 for number in numbers: if number % 2 == 0: count += 1 print(count)
3
§10Таблица умножения
Задача 11: вывести таблицу умножения для числа 3. Переменная цикла задаёт второй множитель.
number = 3 for multiplier in range(1, 11): print(number, "*", multiplier, "=", number * multiplier)
3 * 1 = 3 3 * 2 = 6 3 * 3 = 9 3 * 4 = 12 3 * 5 = 15 3 * 6 = 18 3 * 7 = 21 3 * 8 = 24 3 * 9 = 27 3 * 10 = 30
§11Построение новой строки
Задача 12: перевернуть строку. Каждый новый символ добавляется не в конец, а перед уже собранной частью.
text = "Python" result = "" for letter in text: result = letter + result print(result)
nohtyP
После первых трёх повторений накопитель меняется так: "P" → "yP" → "tyP".
§12Поиск с break и else
Задача 13: проверить, является ли число простым. Если найден делитель, цикл завершается через break. Иначе после полного перебора выполняется else.
number = 7 for divisor in range(2, number): if number % divisor == 0: print("Не простое") break else: print("Простое")
Простое
Пример рассчитан на целое число не меньше 2. Проверку остальных значений нужно добавить до цикла.
§13Диапазон с шагом
Задача 14: вывести числа от 0 до 20 с шагом 5.
for number in range(0, 21, 5): print(number)
0 5 10 15 20
§14Подсчёт гласных
Задача 15: подсчитать английские гласные. Оператор in внутри условия проверяет, входит ли текущий символ в строку "aeiou".
text = "programming" vowels = "aeiou" count = 0 for letter in text: if letter in vowels: count += 1 print(count)
3
§15Частые ошибки
| Что написано | Что произойдёт | Как правильно |
|---|---|---|
| накопитель создан внутри цикла | на каждом повторении прежний результат теряется | создать total, count или result до цикла |
result = 0 перед накоплением произведения | результат всегда останется нулём | начать произведение с 1 |
print(total) находится внутри цикла | будут показаны все промежуточные суммы | убрать отступ, если нужен только итог |
range(1, 5) для чисел от 1 до 5 | число 5 не обработается | range(1, 6) |
максимум начинается с 0 | для списка отрицательных чисел получится неверный ответ | начать с первого элемента непустого списка |
сумма цифр отрицательного числа через str(number) | знак - вызовет ошибку при int() | перебирать str(abs(number)) |
§16Проверьте себя
Почему накопитель суммы начинается с нуля, а произведения — с единицы?
Ноль не меняет сумму при сложении, а единица не меняет произведение при умножении.
Где должен находиться вывод итогового результата?
Без отступа после цикла, если результат нужно вывести один раз. Внутри цикла выводятся промежуточные значения.
Зачем в поиске простого числа нужен else цикла?
Он выполняется, только если цикл перебрал все возможные делители и не завершился через break.
§17Шпаргалка
total = 0total += valuecount = 0count += 1result = 1result *= valueif found: breakИтог главы
Большинство начальных задач с for строятся из нескольких схем: выполнить действие для каждого элемента, накопить сумму или произведение, увеличить счётчик по условию, обновить лучший результат либо завершить поиск через break. Узнавание схемы упрощает решение новой задачи.