Я полагаю, вы предполагаете, что one_good_turn(n)
в deserves_another(n)
вернет значение, которое было вычислено ранее. Нет. Он получает текущий ввод n
, который равен 2
, снова вызывает функцию, делает 2+1
, который равен 3
. Затем вы добавляете 3 + 2 = 5
.
Возможно, чтобы получить желаемый результат, вы должны передать 1
в deserves_another
:
def one_good_turn(n):
return n + 1
def deserves_another(n):
return one_good_turn(n) + 2
print(one_good_turn(1)) # 2
print(deserves_another(1)) # 4
Лучше вернуть значение из one_good_turn
и передать его в deserves_another
. Таким образом, вам не нужно снова вызывать one_good_turn
внутри deserves_another
:
def one_good_turn(n):
n = n + 1
print(n) # 2
return n
def deserves_another(n):
return n + 2
n = one_good_turn(1)
print(deserves_another(n)) # 4
Хм. не уверен, почему вы ожидаете 4 в результате
deserves_another(2)
, поскольку вы сначала добавляете 1 доone_good_turn(2)
, что дает вам 3, а затем добавляете 2 после этого, что дает 5.Пробовали ли вы следить за выполнением программы на PythonTutor?
«Почему результат не такой, как я ожидал?» Потому что где-то у вас есть фундаментальное заблуждение. Мы не можем сказать вам больше, так как вы не уточнили, почему вы ожидали эти значения.