📜 Классический подход из занятия
До знакомства с встроенными функциями и идиомами многие задачи решаются циклами. Это помогает понять алгоритм, но получается многословно.
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() в данном контексте выходят за рамки исходного занятия. Подробности — в разделе Ресурсы.