我对Python比较陌生,我决定尝试编写一个相对简单的collatz猜想,用户输入一个数字(整数)。代码只是一个调用自身的简单函数。我是一个列表,应该有函数计算的每个数字附加到它。我刚开始执行Python脚本,我尝试使用IDLE shell来运行代码。它问我想要什么号码但是当我输入一个号码时什么都没有打印出来?我确定我只需要编辑这段代码的一小部分(或者可能是错误的yikes)但是有没有人知道为什么我的脚本什么都没有返回?对此感到抱歉,谢谢。 这是代码:
l = input("Enter a number: ")
l = int(l)
i = []
def collatz(n):
if n==1:
return i
if n%2 == 0:
n = n/2
i.append(n)
return collatz(n)
else:
n = ((n*3) + 1) / 2
i.append(n)
return collatz(n)
print(i)
collatz(l)
答案 0 :(得分:3)
在return
之前有三print
个,其中一个在else
语句中,这意味着至少有一个会被执行,所以你的{{1}甚至无法实现,你应该在函数定义之后移动它以查看某些东西:
print
详细了解return statement
。一个片段:
return
将当前函数调用与表达式列表(或def collatz(n): print(i) # <= print here if n==1: ....
)一起作为返回值。
答案 1 :(得分:0)
正如其他人所提到的,函数中的所有执行路径都以return
语句结束,因此print
调用无法访问。因此,如果您希望打印n
或i
的每个值,则需要将调用移动到将可以访问的某个位置。 ;)
此外,该代码还有一点冗余。你不需要
i.append(n)
return collatz(n)
在if
和else
分支中,您可以将它们移到if...else
块之外。
这是您的代码的修改版本。我还将/
运算符更改为//
,以便除法的结果为整数。
i = []
def collatz(n):
print(n)
if n==1:
return i
if n%2 == 0:
n = n // 2
else:
n = ((n*3) + 1) // 2
i.append(n)
return collatz(n)
# Test
print(collatz(12))
<强>输出强>
12
6
3
5
8
4
2
1
[6, 3, 5, 8, 4, 2, 1]