Я создал хвост рекурсивную функцию для решения задачи оптимизации:Tail рекурсивная функция не возвращает значение (Python 3)
def optimize(current_price = 0.1, last_profit = 0.0):
current_profit = profit(current_price)
if (last_profit > current_profit) and (current_profit > 0.0):
return {'best_price': current_price - 0.1, 'best_profit': last_profit}
# print({'best_price': current_price - 0.1, 'best_profit': last_profit})
else:
optimize(current_price + 0.1, current_profit)
def best_price():
optimized = optimize() # optimize() should return a dict,
# allowing optimized['best_price']
# and optimized['best_profit'] to be called
print("Pricing the tickets at ${0} will produce the greatest profit, ${1}.".format(optimized['best_price'], optimized['best_profit']))
Функция работает корректно с тем исключением, что она не сможет ничего возвращать. Я не хочу сказать, что первый оператор if
никогда не вызывается (на самом деле, когда я раскомментирую строку печати, он напечатает правильный результат), но оператор return не сможет вернуть словарь.
Это результат TypeError
при попытке позвонить по телефону optimized['best_price']
, так как 'NoneType' object is not subscriptable
.
Я уже давно работаю над этой ошибкой и не могу заставить себя работать или найти что-либо в этом отношении в Интернете. На данный момент это просто вопрос, который я хочу узнать о решении. Есть идеи? Благодаря!
Почему вы не должны 'return' в каждой альтернативе' if'? –