TGViewer
Python вопросы с собеседований Python вопросы с собеседований @python_job_interview · 24.9K subscribers
Post #1369 2.35K
🧠 Python-задача с собеседования: найди ошибку

Код должен посчитать количество чисел больше среднего значения в списке.


def count_above_avg(nums, avg=sum(nums)/len(nums)):
count = 0
for n in nums:
if n > avg:
count += 1
return count

data1 = [1, 2, 3, 4, 5]
data2 = [10, 20, 30]

print(count_above_avg(data1))
print(count_above_avg(data2))


Проблема в этой строке:

```python
def count_above_avg(nums, avg=sum(nums)/len(nums)):
```
Здесь используется значение по умолчанию, которое вычисляется один раз — в момент определения функции, а не при каждом её вызове.

Что происходит по шагам:

Когда Python читает определение функции, он сразу считает:

sum(nums)/len(nums)
Но nums в этот момент - это первый переданный список, то есть data1.

Значение avg фиксируется и больше не меняется.

При вызове:

• count_above_avg(data2)
• среднее значение не пересчитывается, используется старое — от data1.

Поэтому логика ломается, функция работает с неверным средним.

📌 Это известная ловушка Python
Значения аргументов по умолчанию вычисляются один раз.
Это та же причина, почему списки и словари в дефолтных параметрах часто приводят к багам.

🛠 Правильное решение
Нужно вычислять среднее внутри функции, а не в параметрах:

```python
def count_above_avg(nums, avg=None):
if avg is None:
avg = sum(nums) / len(nums)
return sum(1 for n in nums if n > avg)
```

Теперь среднее будет считаться заново при каждом вызове.

💡 Главное правило
Никогда не используй вычисляемые или изменяемые объекты как значения по умолчанию:

❌ def f(x, lst=[])
❌ def f(x, avg=sum(x)/len(x))

✅ Используй None и считай внутри функции.
  • 👍 15
  • ❤ 8
  • 👎 1
  • 🔥 1
More from @python_job_interview
  1. Sep 22, 2026Как правильно получить случайное число в Python Если нужен диапазон от 1 до 100 включитель…
  2. Sep 19, 2026✔️ Кто подключился к вашей сети? NetAlertX обнаруживает устройства и уведомляет об изменен…
  3. Sep 18, 2026✔️ QuiverAI выпустила обновление генератора векторной графики Во второе поколение семейств…
  4. Sep 17, 2026📚 Бесплатная книга по математике для Computer Science и Machine Learning - более 2200 стр…
  5. Sep 15, 2026🐍 Python: как найти изменённое поле во вложенном словаре Сравнение before == after покаже…
  6. Sep 15, 2026🔥 Один из лучших обучающих курсов на StepiK по SQL SQL можно знать годами и всё равно тер…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →