Глава 10 · Немного автоматизации!

Поиск, фильтрация и суммирование

Цикл в связке с if — это уже настоящий алгоритм: три самых частых паттерна, из которых строится большинство программ на циклах.

Цикл + if = настоящие алгоритмы

Большинство реальных задач с циклами — это for или while в связке с if. Разберём три самых частых паттерна: поиск, фильтрация, суммирование.

Поиск (search)

poisk.py
chisla = [4, 8, 15, 16, 23, 42]
iskomoe = 16
najdeno = False

for n in chisla:
    if n == iskomoe:
        najdeno = True
        break

print(najdeno)

Подсчёт (counting)

podschet.py
chisla = [4, 8, 15, 16, 23, 42, 8, 4]
chetnye = 0

for n in chisla:
    if n % 2 == 0:
        chetnye += 1

print(chetnye)

Суммирование: вручную и через sum()

summa_vruchnuyu.py
chisla = [4, 8, 15, 16, 23, 42]
summa = 0

for n in chisla:
    summa += n

print(summa)
summa_cherez_sum.py
chisla = [4, 8, 15, 16, 23, 42]
summa = sum(chisla)
print(summa)
sum() — не магия, а тот же цикл внутри
sum() — встроенная функция, которая делает ровно то же самое, что и ручной цикл с накопителем выше, просто в одну строку. Полезно сначала написать вручную (чтобы понять, что происходит), а потом знать, что для готового результата есть короткий путь.

Предпросмотр: поиск минимума и максимума

min_max_vruchnuyu.py
chisla = [4, 8, 15, 16, 23, 42]
maksimum = chisla[0]

for n in chisla:
    if n > maksimum:
        maksimum = n

print(maksimum)
# то же самое короче: print(max(chisla))

Фильтрация — собираем только нужное

filtraciya.py
chisla = [4, 8, 15, 16, 23, 42]
chetnye_chisla = []

for n in chisla:
    if n % 2 == 0:
        chetnye_chisla.append(n)

print(chetnye_chisla)
СТАРТchisla, пустойсписок результатаn % 2 == 0?ДАдобавить n в результатНЕТвернуть списокрезультатаКОНЕЦ
Паттерн фильтрации: пройти по всем элементам, оставить только те, что прошли условие

Сентинел-цикл — особое значение как сигнал остановки

Сентинел — специальное значение, которое само по себе не является частью данных, а сигнализирует «данные закончились»:

sentinel_cikl.py
summa = 0
while True:
    chislo = input("Введите число (stop — закончить): ")
    if chislo == "stop":
        break
    summa += int(chislo)

print("Сумма:", summa)
СТАРТsumma = 0ввод == "stop"?ДАsumma += int(ввод)получить следующийвводназадНЕТКОНЕЦ
Сентинел-цикл: пользователь сам решает, когда данные закончились

Необязательно: FizzBuzz

Классическая, но необязательная задача-разминка на циклы и условия — если интересно, попробуйте написать её сами перед тем, как посмотреть решение:

fizzbuzz.py
for n in range(1, 21):
    if n % 15 == 0:
        print("ФиззБазз")
    elif n % 3 == 0:
        print("Фызз")
    elif n % 5 == 0:
        print("Базз")
    else:
        print(n)
Практика: поиск, подсчёт, суммирование, фильтрация
Интерактивный ноутбук прямо в браузере — Python 3.14 через Pyodide, без установки
Открыть практику →
Практика: сентинел-цикл
Интерактивный ноутбук прямо в браузере — Python 3.14 через Pyodide, без установки
Открыть практику →