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

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

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

Современный подход: встроенные функции (sum(), max(), len()), методы строк (isdigit(), replace(), split()/join()) и list comprehensions.

Вывод: Pythonic-код короче, быстрее и менее подвержен ошибкам.

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

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

1. Сумма чисел в списке

📄 examples/classic_sum.py
numbers = [1, 2, 3, 4, 5]
total = 0
for number in numbers:
    total += number
print(total)

2. Поиск наибольшего числа

📄 examples/classic_max.py
numbers = [3, 12, 8, 22, 9, 25, 6, 23, 8, 7]
maximum = numbers[0]
max_index = 0
for i in range(1, len(numbers)):
    if numbers[i] > maximum:
        maximum = numbers[i]
        max_index = i
print(maximum, max_index)

3. Фильтрация корректных имён

📄 examples/classic_names.py
names = ["Alice", "bob", "Charlie", "dave", "Eva", "Frank123"]
valid = []
for name in names:
    if name[0].isupper() and name.isalpha():
        valid.append(name)
print(valid)

4. Замена цифр на звёздочки

📄 examples/classic_stars.py
text = "My number is 123-456-789"
result = ""
for char in text:
    if char.isdigit():
        result += "*"
    else:
        result += char
print(result)

5. Перестановка соседних элементов

📄 examples/classic_swap.py
numbers = [1, 2, 3, 4, 5]
for i in range(0, len(numbers) - 1, 2):
    temp = numbers[i]
    numbers[i] = numbers[i + 1]
    numbers[i + 1] = temp
print(numbers)

✅ Рекомендуемый современный вариант

1. Сумма через sum()

📄 examples/modern_sum.py
numbers = [1, 2, 3, 4, 5]
print(sum(numbers))

2. Наибольшее число через max() и index()

📄 examples/modern_max.py
numbers = [3, 12, 8, 22, 9, 25, 6, 23, 8, 7]
maximum = max(numbers)
max_index = numbers.index(maximum)
print(maximum, max_index)

3. Фильтрация через list comprehension

📄 examples/modern_names.py
names = ["Alice", "bob", "Charlie", "dave", "Eva", "Frank123"]
valid = [name for name in names if name[0].isupper() and name.isalpha()]
print(valid)

4. Замена цифр через генераторное выражение

📄 examples/modern_stars.py
text = "My number is 123-456-789"
result = "".join("*" if char.isdigit() else char for char in text)
print(result)

5. Перестановка через множественное присваивание

📄 examples/modern_swap.py
numbers = [1, 2, 3, 4, 5]
for i in range(0, len(numbers) - 1, 2):
    numbers[i], numbers[i + 1] = numbers[i + 1], numbers[i]
print(numbers)
Преимущества современного стиля:
  • Меньше кода — меньше возможностей для ошибок.
  • Встроенные функции и методы реализованы на C и обычно работают быстрее.
  • Читаемость: код ближе к описанию задачи.
  • f-strings и comprehensions заменяют громоздкую конкатенацию и циклы.

🕰️ Когда классический подход всё ещё полезен

  • На начальном этапе обучения — чтобы понять, как устроены алгоритмы.
  • Когда встроенного метода недостаточно, например, нужна нестандартная логика.
  • Когда важно обработать каждый элемент отдельно и собрать сложный результат.

🔍 Как распознать устаревший код

Если цикл только перебирает элементы для выполнения стандартной операции, его часто можно заменить:

numbers = [1, 2, 3, 4, 5]

# устаревший подход
total = 0
for n in numbers:
    total += n
print("classic:", total)

# современный подход
print("modern:", sum(numbers))
Проверить по документации: list comprehensions, генераторные выражения и функции sum(), max(), index() в данном контексте выходят за рамки исходного занятия. Подробности — в разделе Ресурсы.