Может ли кто-нибудь объяснить мне, почему оператор возврата должен быть включен в этот код? - PullRequest
0 голосов
/ 31 августа 2018

Я написал программу для выполнения последовательности Коллатца в Python 3. Это было то, что меня попросили сделать:

Напишите функцию с именем collatz(), которая имеет один параметр с именем number. Если число четное, тогда collatz() должно напечатать number // 2 и вернуть это значение. Если число нечетное, то collatz() должно напечатать и вернуть 3 * number + 1. Затем напишите программу, которая позволяет пользователю вводить целое число и сохраняет вызывая collatz() на этом номере, пока функция не вернет значение 1.

Не забудьте преобразовать возвращаемое значение из input() в целое число с функция int() - в противном случае это будет строковое значение.

Вот мой код:

def collatz(number):
    while number is not 1:

        if number % 2 == 0:
            number = number // 2
            print(number)

        else: 
            number = 3 * number + 1
            print(number)

p = int(input("Please input an integer: "))
print(p)
collatz(p)

Я знаю, что я не добавил проверку ввода, однако кроме этого я мог бы получить некоторую обратную связь по этому коду? Работает как задумано.

Я также видел это сообщение , и я не понимаю, почему они добавили оператор return после оператора print.

Ответы [ 2 ]

0 голосов
/ 31 августа 2018

Это правда, что когда вы return из функции, вы можете увидеть результат вашей функции так же, как когда вы print. Но ваша компьютерная «программа» не может увидеть этот результат, только если вы печатаете. Печать предназначена для ваших глаз, возврат предназначен для вашего компьютера.

Чтобы дать вам больше контекста, при запуске программы ей выделяется некоторое пространство в памяти. Все переменные для вашей функции живут в этой памяти. Когда функция выполняется, она использует эту память для объявления переменных, а когда функция завершает работу, эти переменные освобождаются, как и пространство памяти.

Чтобы иметь доступ к переменной в этой области памяти ПОСЛЕ выполнения функции, вам нужно использовать return. print поместит эту переменную в другую часть памяти, которая в итоге и в конечном итоге будет использоваться для отображения ее на мониторе и не будет легко доступна для вашей программы для последующего использования.

Таким образом, вы можете понять, что, в зависимости от варианта использования, вы можете использовать только print, только return или оба.

0 голосов
/ 31 августа 2018

если вы просто хотите "увидеть" свой номер, достаточно print(). Однако, если вы действительно хотите получить результат, который выдает ваша функция, вам нужно return number, чтобы использовать его вне функции. таким образом, вы можете поставить return number за вашими вычислениями в if и else, а затем после вызова функции вы можете сделать

nb_to_print = collatz(p)
print(nb_to_print)

Таким образом, как уже говорилось, вы также можете получить доступ к возвращаемому значению функции вне ее!

Также вам не нужно print(p), поскольку введенное число уже видно в input() заявлении.

...