📜 Классический подход из занятия
Исходные решения используют базовые циклы и аккумуляторы. Это помогает понять, как работает алгоритм.
1. Вывод символов строки
📄 examples/classic_print_letters.py
text = "Python"
for letter in text:
print(letter)
2. Накопление чётных чисел в список
📄 examples/classic_even_filter.py
numbers = [5, 7, 1, 14, 13, 12, 4, 6, 2, 7]
even_numbers = []
for number in numbers:
if number % 2 == 0:
even_numbers.append(number)
print(even_numbers)
3. Ручной перебор по индексу
📄 examples/classic_index_loop.py
items = ["apple", "banana", "cherry"]
for i in range(len(items)):
print(i, items[i], sep=": ")
4. Поиск нужных элементов через вложенный if
📄 examples/classic_nested_if.py
numbers = [4, 9, 1, 7, 2, 5, 0, 3, 7, 1, 3]
for i in range(len(numbers)):
if numbers[i] % 2 != 0:
numbers[i] = numbers[i] ** 2
print(numbers)
✅ Рекомендуемый современный вариант
1. Форматирование через f-strings
📄 examples/modern_fstring.py
text = "Python"
for letter in text:
print(f"Буква: {letter}")
2. Индекс и значение через enumerate()
📄 examples/modern_enumerate.py
items = ["apple", "banana", "cherry"]
for i, item in enumerate(items):
print(f"{i}: {item}")
3. Фильтрация через list comprehension
📄 examples/modern_comprehension.py
numbers = [5, 7, 1, 14, 13, 12, 4, 6, 2, 7]
even_numbers = [n for n in numbers if n % 2 == 0]
print(even_numbers)
4. Guard clause вместо вложенного if
📄 examples/modern_guard_clause.py
numbers = [4, 9, 1, 7, 2, 5, 0, 3, 7, 1, 3]
for i in range(len(numbers)):
if numbers[i] % 2 == 0:
continue
numbers[i] = numbers[i] ** 2
print(numbers)
Преимущества современного стиля:
- Меньше кода — меньше возможностей для ошибок.
enumerate()заменяет неудобныйrange(len(...)).- List comprehensions часто читаются как математическая запись множеств.
- Guard clauses уменьшают вложенность.
🕰️ Когда классический подход всё ещё полезен
- На начальном этапе обучения — чтобы понять, как устроен алгоритм.
- Когда тело цикла сложное и comprehension сделал бы код нечитаемым.
- Когда нужен ранний выход (
break) или сложная логика внутри цикла.
🔧 Как распознать устаревший код
Если вы видите пустой список и цикл только для наполнения его простым условием, это часто можно заменить comprehension:
numbers = [1, 2, 3, 4, 5, 6]
result = []
for x in numbers:
if x % 2 == 0:
result.append(x)
print("classic:", result)
# → modern
result = [x for x in numbers if x % 2 == 0]
print("modern:", result)
Проверить по документации: f-strings,
enumerate(), list comprehensions, guard clauses и распаковка аргументов выходят за рамки исходного занятия. Подробности — в разделе Ресурсы.