我写了一个程序在python 3中做了collatz序列。这就是我被要求做的事情:
编写一个名为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)
我知道我没有添加输入验证,但除此之外,我可以得到一些关于此代码的反馈吗?它按预期工作。
我也看到了this post,我不明白为什么他们在print语句后添加了return语句。
如果你只想“看到”你的号码,print()
就足够了。但是,如果你真的想要获取你的函数产生的结果,你需要return number
在函数之外使用它。这样,你可以把return number
放在if
和else
的计算后面然后你调用函数后,你可以做
nb_to_print = collatz(p)
print(nb_to_print)
这样,如上所述,您也可以访问它外部函数的返回值!
你也不需要print(p)
,因为输入的数字已经在input()
语句中看到了。
确实,当你从一个函数return
时,你可以看到你的函数的结果与你print
时相同。但是,只有打印时,您的计算机“程序”才能看到该结果。打印适用于您的眼睛,返回适用于您的计算机。
为了给出更多的上下文,当程序运行时,它会在内存中分配一些空间。函数的所有变量都存在于该内存中。当一个函数运行时,它使用该内存来声明变量,当函数完成时,这些变量被释放,因此该内存空间也是如此。
要在函数完成后访问该内存空间中的变量,您需要使用return
。 print
会将该变量放在内存的另一部分中,总结并最终将用于在监视器上显示它,并且您的程序无法轻松访问以供后续使用。
所以你可以收集一下,根据用例,你可能只想使用print
,只使用return
或两者兼而有之。