Модуль 3 · Списки и циклы

Справочник по Python · модуль 3 · списки и циклы

Глава 3.5

3.5

Практические примеры
по for in

Пятнадцать задач показывают основные схемы цикла: вывести каждое значение, накопить результат, отобрать элементы, найти максимум и завершить поиск через break.

Категория
Практика циклов
Уровень
Начальный
Связанные темы
for, range(), условия, строки
Зачем это знать
Узнавать типовые схемы решения задач

§1Как разбирать задачи

Перед написанием цикла ответьте на три вопроса: какие значения перебираются, что происходит с одним значением и нужен ли общий результат после завершения.

  1. Выберите последовательность: строку, список или range().
  2. Дайте переменной цикла имя одного элемента.
  3. Если нужен итог, создайте переменную-накопитель до цикла.
  4. После цикла выведите или используйте накопленный результат.

§2Числа и квадраты

Задача 1: вывести числа от 1 до 5.

main.pyпоследовательный вывод
for number in range(1, 6):
    print(number)
Выводпять значений
1
2
3
4
5

Задача 2: рядом с каждым числом вывести его квадрат.

main.pyвычисление на каждом повторении
for number in range(1, 6):
    print(number, number * number)
Выводчисло и квадрат
1 1
2 4
3 9
4 16
5 25

§3Накопление суммы

Задача 3: найти сумму чисел от 1 до 5. Накопитель начинается с нуля, потому что прибавление нуля не меняет сумму.

main.pyсумма в переменной total
total = 0

for number in range(1, 6):
    total += number

print(total)
Вывод1 + 2 + 3 + 4 + 5
15

print() стоит без отступа, поэтому выполняется один раз после завершения цикла.

§4Фильтрация по условию

Задача 4: вывести только чётные числа от 1 до 10. Условие внутри цикла решает, какие значения подходят.

main.pyпроверка каждого числа
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. Для произведения накопитель начинается с единицы.

main.pyфакториал числа 5
number = 5
result = 1

for factor in range(1, number + 1):
    result *= factor

print(result)
Вывод1 · 2 · 3 · 4 · 5
120

Если начать с нуля, первое же умножение превратит весь результат в ноль.

§6Перебор символов

Задача 6: вручную подсчитать количество символов. Счётчик увеличивается один раз для каждого символа.

main.pyподсчёт повторений
text = "Python"
count = 0

for letter in text:
    count += 1

print(count)
Выводшесть символов
6

Задача 7: вывести каждый символ строки отдельно.

main.pyперебор строки Code
text = "Code"

for letter in text:
    print(letter)
Выводпо одному символу
C
o
d
e

§7Сумма цифр

Задача 8: найти сумму цифр положительного целого числа. После преобразования числа в строку цикл получает символы, а int() превращает каждый символ обратно в число.

main.pyцифры числа 12345
number = 12345
total = 0

for digit in str(number):
    total += int(digit)

print(total)
Вывод1 + 2 + 3 + 4 + 5
15

Для отрицательного числа строка содержит знак -, который нельзя преобразовать в целое число. Такой случай требует отдельной обработки, например str(abs(number)).

§8Поиск максимума

Задача 9: найти наибольшее число без функции max(). Первое значение берётся как начальный кандидат, затем каждый элемент сравнивается с ним.

main.pyобновление лучшего результата
numbers = [5, 8, 2, 10, 3]
largest = numbers[0]

for number in numbers:
    if number > largest:
        largest = number

print(largest)
Выводнаибольший элемент
10

Алгоритм предполагает, что список не пуст. Иначе элемента с индексом 0 не существует.

§9Подсчёт подходящих элементов

Задача 10: подсчитать чётные числа в списке. Здесь соединяются фильтрация условием и счётчик.

main.pyсчётчик меняется только для чётных
numbers = [1, 4, 7, 10, 12, 3]
count = 0

for number in numbers:
    if number % 2 == 0:
        count += 1

print(count)
Вывод4, 10 и 12
3

§10Таблица умножения

Задача 11: вывести таблицу умножения для числа 3. Переменная цикла задаёт второй множитель.

main.pyдесять строк таблицы
number = 3

for multiplier in range(1, 11):
    print(number, "*", multiplier, "=", number * multiplier)
Выводот 1 до 10
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: перевернуть строку. Каждый новый символ добавляется не в конец, а перед уже собранной частью.

main.pyдобавление символа слева
text = "Python"
result = ""

for letter in text:
    result = letter + result

print(result)
Выводобратный порядок
nohtyP

После первых трёх повторений накопитель меняется так: "P" → "yP" → "tyP".

§12Поиск с break и else

Задача 13: проверить, является ли число простым. Если найден делитель, цикл завершается через break. Иначе после полного перебора выполняется else.

main.pyделители числа 7
number = 7

for divisor in range(2, number):
    if number % divisor == 0:
        print("Не простое")
        break
else:
    print("Простое")
Выводделитель не найден
Простое

Пример рассчитан на целое число не меньше 2. Проверку остальных значений нужно добавить до цикла.

§13Диапазон с шагом

Задача 14: вывести числа от 0 до 20 с шагом 5.

main.pyправая граница 21 включает число 20
for number in range(0, 21, 5):
    print(number)
Выводшаг равен 5
0
5
10
15
20

§14Подсчёт гласных

Задача 15: подсчитать английские гласные. Оператор in внутри условия проверяет, входит ли текущий символ в строку "aeiou".

main.pyгласные в слове programming
text = "programming"
vowels = "aeiou"
count = 0

for letter in text:
    if letter in vowels:
        count += 1

print(count)
Выводo, a и i
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 += value
Количествоcount = 0count += 1
Произведениеresult = 1result *= value
Поискif found: break

Итог главы

Большинство начальных задач с for строятся из нескольких схем: выполнить действие для каждого элемента, накопить сумму или произведение, увеличить счётчик по условию, обновить лучший результат либо завершить поиск через break. Узнавание схемы упрощает решение новой задачи.

Глава 3.5 · Практические примеры по for in · Справочник по Python Автор: Макаров Максим Николаевич