🎉 Разбор задачи: где была «ловушка»?! 🐍
Привет, друзья! Спасибо всем, кто поучаствовал — вижу ваши комментарии, вы молодцы! 👏 Сегодня разберём, в чём тут была хитрость. 👇
🧩 Что на самом деле происходило в коде:
numbers = range(1, 11)
squares = []
for n in numbers:
if n % 2 == 0:
squares.append(n ** 2)
print(squares)
На первый взгляд, всё работает: код запустится и выведет [4, 16, 36, 64, 100]. Но задача была про *скрытую проблему*, которая не ломает код сейчас, но легко приведёт к багам в будущем. 🤔
📌 Разбор по пунктам:
1. Код технически правильный. Синтаксических ошибок нет, логика простая: берём числа от 1 до 10, проверяем чётность, возводим в квадрат. ✅
2. Проблема — в читаемости и поддерживаемости. Сейчас всё понятно, но если завтра кто-то другой (или ты через месяц) будет менять этот код, условие `if n % 2 == 0` легко пропустить или случайно удалить. 😕
3. Более «питоничный» и безопасный вариант — сразу перебрать чётные числа. Вместо проверки на чётность лучше сразу генерировать нужный диапазон: `range(2, 11, 2)`. Так условие «только чётные» зашито в саму структуру данных, а не в логику. 💡
4. Бонус: можно сделать ещё короче. Для такой задачи идеально подходит генератор списка — он делает код компактным и выразительным. ✨
✅ Как лучше переписать:
Вариант 1 (более понятный диапазон):
numbers = range(2, 11, 2) # сразу чётные: 2, 4, 6, 8, 10
squares = [n ** 2 for n in numbers]
print(squares)
Вариант 2 (максимально лаконично):
squares = [n ** 2 for n in range(2, 11, 2)]
print(squares)
Оба варианта делают то же самое, но:
- меньше места для ошибки (нет условия `if`);
- сразу видно, что мы работаем только с чётными числами;
- стиль ближе к общепринятым практикам Python (PEP 8). 👍
🎯 Главный вывод: иногда «работоспособный» код — это не «хороший» код. Лучшая защита от ошибок — не проверять лишнее, а изначально строить логику так, чтобы ошибочные состояния были невозможны. 🛡
💬 А у тебя был случай, когда простая проверка `if` потом стала источником бага? Расскажи в комментариях — разберём вместе! 🤗
🔗 Хочешь прокачать навыки и научиться сразу видеть такие «ловушки»? Пройди опрос и узнай, какой курс обучения подойдёт именно тебе:
На сайте: https://infazy.ru/podobrat-kurs-python
Или в боте: https://t.me/kursypythonbot
#Python #Программирование #ОтладкаКода #IT #ОбучениеПрограммированию #РазборЗадач #ЛучшиеПрактики