Веб-версияОткрыть в Telegram

Пост🧠 Python-задача с собеседования: найди ошибку

30 января 2026
P
Python tests
🧠 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 и считай внутри функции.
5 · 1.3K ·

Рядом в ленте

PPython testsФотографияPPython testsФотография
это сообщение
PPython testsФотографияPPython tests#практика

Открытая публичная лента из поискового индекса ChatCrawler — «Google по публичному Telegram»; обновляется по мере обхода площадки. Время — UTC.

Только публичный контент, официальный API Telegram. О проекте · Вопросы · Чего мы не делаем · Убрать страницу из выдачи · Каталог · Поиск · Как мы считаем