Вопрос или проблема
города = ["Бостон", "Лас-Вегас", "Порто-Алегре", "Кейптаун", "Берлин", "Окинава", "Сидней"]
отели = [255, 450, 150, 250, 650, 675, 850]
рейсы = [950, 3000, 4500, 2750, 2500, 3500, 10500]
def добавить_место(город, отель, рейс):
global города, рейсы, отели
print("""Добавьте ваше желаемое место. Пожалуйста, укажите стоимость отеля и рейса,
а также название вашего желаемого места и отеля.""")
новый_город = input("Введите ваш новый город: ")
новая_стоимость_отеля = int(input("Введите стоимость вашего нового отеля за ночь: "))
новая_стоимость_рейса = int(input("Введите стоимость вашего рейса:"))
города.append(новый_город)
отели.append(новая_стоимость_отеля)
рейсы.append(новая_стоимость_рейса)
стоимость = [рейсы] + [отели]
def рассчитать_общую_стоимость(отели, рейсы):
global город, отель, рейс, стоимость
стоимость_рейса = sum(рейсы)
стоимость_отеля = sum(отели)
общая_стоимость = sum({стоимость_отеля, стоимость_рейса})
результат = рассчитать_общую_стоимость(отели, рейсы)
def отобразить_сводку_бюджета(города, отели, рейсы):
for i in range(len(города)):
print(f"{города[i]}, ${отели[i]} ${рейсы[i]}.")
результат = рассчитать_общую_стоимость(отели, рейсы)
print(f"Ваш текущий бюджет/потраченные деньги составляют ${результат}.")
while True:
print(f"""В настоящее время города, которые вы планируете посетить во время отпуска: {города}."
Пожалуйста, выберите вариант, чтобы внести изменения в ваш отпуск.""")
print("1. Добавить направление")
print("2. Посмотреть сводку бюджета")
print("3. Выйти из программы")
вариант = int(input("Пожалуйста, выберите ответ: "))
if вариант == 1:
добавить_место(города, отели, рейсы)
elif вариант == 2:
отобразить_сводку_бюджета(города, отели, рейсы)
elif вариант == 3:
break
else:
print("Пожалуйста, выберите действительный вариант.")
Предоставленный выше код. Когда я запускаю это на Online Python, я получаю сообщение об ошибке, что я достиг максимальной глубины рекурсии, и я не понимаю, что я могу сделать, чтобы исправить это. Насколько я понимаю, большинство проблем касается функции отображения. Может кто-то объяснить, как я могу исправить эту ошибку?
Эта функция является проблемой:
def рассчитать_общую_стоимость(отели, рейсы):
global город, отель, рейс, стоимость
стоимость_рейса = sum(рейсы)
стоимость_отеля = sum(отели)
общая_стоимость = sum({стоимость_отеля, стоимость_рейса})
результат = рассчитать_общую_стоимость(отели, рейсы)
Функция вызывает саму себя, что вызывает саму себя, что вызывает саму себя … вечно.
Чтобы исправить это, вам нужно сделать так, чтобы функция не вызывала саму себя.
Может, вы имели в виду просто return общая_стоимость
?
На самом деле, я думаю, что функцию можно сократить до этого:
def рассчитать_общую_стоимость(отели, рейсы):
return sum(рейсы) + sum(отелей)
Похоже, что ей не нужны глобальные переменные вообще. Зачем они здесь?
Ответ или решение
Ошибка, с которой вы столкнулись, связана с рекурсией в вашем коде. Сообщение о том, что вы достигли максимальной глубины рекурсии, возникает, когда функция вызывает саму себя бесконечно без условия выхода. В вашем случае эта проблема затрагивает функцию calculate_total_cost
.
Подробный анализ проблемы
Код, вызывающий бесконечную рекурсию
Ваша текущая реализация функции выглядит следующим образом:
def calculate_total_cost(hotels, flights):
global city, hotel, flight, cost
f_cost = sum(flights)
h_cost = sum(hotels)
t_cost = sum({h_cost, f_cost})
result = calculate_total_cost(hotels, flights)
Функция вызывает саму себя с теми же параметрами hotels
и flights
без условий выхода, что приводит к бесконечному циклу вызовов. Python имеет предопределенное значение для максимальной глубины рекурсии (обычно 1000), и при её превышении возникает ошибка.
Исправление кода
Чтобы исправить эту ошибку, вам нужно изменить реализацию функции так, чтобы она не вызывала саму себя. Возможное исправление может выглядеть следующим образом:
def calculate_total_cost(hotels, flights):
return sum(hotels) + sum(flights)
Эта версия просто суммирует все значения списков hotels
и flights
и возвращает общий итог без вызова себя.
Устранение ненужных глобальных переменных
Также стоит упомянуть об использовании глобальных переменных в вашей функции. В данном случае они не нужны, так как функция самостоятельно принимает необходимые списки в качестве аргументов. Это делает функцию более чистой и легко читаемой.
Обновленный код функции
Вот обновленная версия вашей функции с учетом вышеизложенных замечаний:
def calculate_total_cost(hotels, flights):
return sum(hotels) + sum(flights)
Дополнительные изменения
Кроме того, вы можете немного улучшить организацию кода, сделав его более понятным. Например, в функции display_budget_summary
можно убрать лишние вызовы функций:
def display_budget_summary(cities, hotels, flights):
for i in range(len(cities)):
print(f"{cities[i]}, ${hotels[i]} ${flights[i]}.")
result = calculate_total_cost(hotels, flights)
print(f"Your current budget/money spent is ${result}.")
Заключение
Исправление функции calculate_total_cost
позволит вам избежать проблемы, связанной с переполнением стека вызовов из-за бесконечной рекурсии. Кроме того, оптимизация использования глобальных переменных улучшит читаемость и управляемость вашего кода.
Если у вас возникнут проблемы при реализации этих изменений или возникнут дополнительные вопросы, не стесняйтесь обращаться за помощью.