Глава 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)
Сентинел-цикл — особое значение как сигнал остановки
Сентинел — специальное значение, которое само по себе не является частью данных, а сигнализирует «данные закончились»:
sentinel_cikl.py
summa = 0
while True:
chislo = input("Введите число (stop — закончить): ")
if chislo == "stop":
break
summa += int(chislo)
print("Сумма:", summa)
Необязательно: 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, без установки