⚖️ Старый и современный подход

⚡ Различия в двух словах

Классический подход: явные циклы, аккумуляторы, ручная индексация — понятно новичкам, но многословно.

Современный подход: f-strings, enumerate(), list comprehensions, guard clauses и встроенные функции вроде sum().

Вывод: классический стиль помогает понять алгоритм, современный — писать короткий и читаемый код.

📜 Классический подход из занятия

Исходные решения используют базовые циклы и аккумуляторы. Это помогает понять, как работает алгоритм.

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 и распаковка аргументов выходят за рамки исходного занятия. Подробности — в разделе Ресурсы.