Функция вызова функции в python

avatar
Bijay Gurung
8 апреля 2018 в 06:15
112
2
-1
def one_good_turn(n):
  return n + 1

def deserves_another(n):
  return one_good_turn(n) + 2

print(one_good_turn(1))
print(deserves_another(2))

Поскольку у меня есть две функции one_good_turn(n) и deserves_another(n), при вызове функции я передал параметр 1 и 2:

Я ожидал, что результат будет таким:

2
4

но показывает:

2
5

Почему результат не такой, как я ожидал?

Источник
fixatd
8 апреля 2018 в 06:19
4

Хм. не уверен, почему вы ожидаете 4 в результате deserves_another(2), поскольку вы сначала добавляете 1 до one_good_turn(2), что дает вам 3, а затем добавляете 2 после этого, что дает 5.

Mr. T
8 апреля 2018 в 06:22
0

Пробовали ли вы следить за выполнением программы на PythonTutor?

timgeb
8 апреля 2018 в 06:25
0

«Почему результат не такой, как я ожидал?» Потому что где-то у вас есть фундаментальное заблуждение. Мы не можем сказать вам больше, так как вы не уточнили, почему вы ожидали эти значения.

Ответы (2)

avatar
Austin
8 апреля 2018 в 06:33
1

Я полагаю, вы предполагаете, что 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
Bijay Gurung
8 апреля 2018 в 06:36
0

Спасибо, сэр, у меня есть фундаментальное заблуждение, но ваш ответ прояснил все мои сомнения.

Austin
8 апреля 2018 в 06:44
0

Рад, что смог вам помочь :)

Bijay Gurung
9 апреля 2018 в 10:12
0

def cube(number): возвращает число * число * число def by_three(number): возвращает куб(число), но Siir здесь показывает результат 8 и 37, при передаче параметра cube(2) и by_three(3) не должен by_three функция должна быть 2 + 3 = 5, и он должен напечатать 125 результатов.

Austin
9 апреля 2018 в 11:34
0

Вы имели в виду 8 и 27? cube(2) -> 2*2*2 -> 8. by_three(3) -> cube(3) -> 3*3*3 -> 27. Лучше этого объяснить нельзя! Ознакомьтесь с основами здесь: tutorialspoint.com/python3/python_functions.htm

avatar
Mureinik
8 апреля 2018 в 06:30
0

one_good_turn(2) возвращает 2+1=3. Затем результат передается в deserves_another, который возвращает 3+2=5.