СПРОСИ ПРОФИ
👍
0
👎 09

Коротенький код на Python

Подскажите что не так со вторым return, и как это исправить?

программисты IT     #1   14 июл 2025 23:03   Увидели: 123 клиента, 2 специалиста   Ответить
👍
0
👎 0

calls это список словарей

  #2   14 июл 2025 23:05   Ответить
👍
0
👎 0

ответ chagpt:

Спасибо за изображение. Судя по коду, ошибка скорее всего в следующем:

---

❗ Проблема: переменная calls не определена


В функции get_call() используется переменная calls, но она не определена в коде (ни глобально, ни передана как аргумент).

👉 Поэтому при запуске get_call() вы получите:

NameError: name 'calls' is not defined


---

✅ Решение:


Вариант 1: Передать calls как аргумент функции

python
def get_call(calls):
    a = 0
    while True:
        if len(calls) != 0:
            for cal in calls:
                if cal['call'] == a:
                    a += 1
        else:
            return a
        return a  # Этот return скорее всего должен быть вне while


Но здесь ещё одна ошибка: return a стоит внутри цикла, из-за чего он выполнится после одной итерации.

---

🛠 Правильный вариант:

python
def get_call(calls):
    a = 0
    while True:
        if len(calls) != 0:
            for cal in calls:
                if cal['call'] == a:
                    a += 1
                    break
            else:
                return a
        else:
            return a

# Пример списка вызовов:
calls = [{'call': 0}, {'call': 1}, {'call': 2}]
print(get_call(calls))  # Вернёт 3


---

📝 Пояснение:


  • while True — бесконечный цикл, пока не будет найден уникальный номер.
  • for cal in calls: — перебираем вызовы.
  • if cal['call'] == a: — если номер уже есть, увеличиваем a и начинаем заново.
  • else: от for — если не найдено совпадений, возвращаем a.


---

Если у тебя другой формат данных в calls, покажи его — помогу адаптировать.

👍
0
👎 0

Здравствуйте. Спасибо что ответили
Я плохо описал суть проблемы, попробую подробнее.
calls глобальный список словарей он объявлен и в функцию передавать не обязательно.

Код который я прикрепил в начале работает так как нужно, но второй return подсвечиается жёлтым

В ключе «call» хранятся целые числа.
Суть функции: Есть числа 1 2 3 4 5 6 7 и тд. если они идут по порядку, то мы вернём 8. А если в их порядке есть так сказать «дыра» например 1 2 3 6 7 8 то мы вернём 4

  #4   14 июл 2025 23:33   Ответить
👍
0
👎 0
  #5   14 июл 2025 23:36   Ответить
👍
0
👎 0
  #6   14 июл 2025 23:36   Ответить
👍
0
👎 0

Код работает, но return подсвечивается жёлтым, не могу понять почему и чем это чревато

  #7   14 июл 2025 23:38   Ответить
👍
0
👎 0

Возможно из за первого return компилятор считает что второй не доступен
Но он недоступен только в 1-м единственном случае

  #8   14 июл 2025 23:39   Ответить
👍
0
👎 0

Я использовал второй return вместо break так как в любом случае произойдёт выход из цикла while

  #9   14 июл 2025 23:42   Ответить
👍
0
👎 0

Жёлтый индикатор означает не обязательно ошибку, а свидетельствует о неэффективном или избыточном коде.
Безусловный return в цикле без предшествующего continue делает организацию цикла бессмысленной, о чём и предупреждает интерпретатор. Если уверены, что именно такой алгоритм хотите закодировать, то надо убрать строку while, которая является лишней.
Всё уже написано выше, в #3 – читайте внимательно и разбирайте до полной ясности.

Задайте свой вопрос программистам –
профессионалам

Сейчас онлайн 75 программистов
Получите ответ профи быстро и бесплатно
ASK.PROFI.RU © 2020-2025