Python中的Collatz猜想

2024-03-28 17:33:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我对Python比较陌生,我决定尝试编写一个相对简单的collatz猜想,用户可以输入一个数字(整数)。代码只是一个调用自身的简单函数。i是一个列表,它应该将函数计算的每个数字追加到它后面。我是执行Python脚本的新手,我尝试过使用空闲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)

Tags: 函数代码用户脚本列表returnif数字
2条回答

在您的print之前有三个return,其中一个在else语句中,这意味着至少要执行其中一个,因此您的print甚至不能被执行,您应该将它移到函数定义之后以查看某些内容:

def collatz(n):
    print(i) # <= print here
    if n==1:
        ....

查看有关^{}的更多信息。片段:

return leaves the current function call with the expression list (or None) as return value.

正如其他人所提到的,函数中的所有执行路径都以return语句结尾,因此print调用是不可访问的。因此,如果希望打印ni的每个值,则需要将调用移动到它可以访问的地方。;)

另外,代码中有一点冗余。你不需要

i.append(n)
return collatz(n)

ifelse分支中,可以将它们移到if...else块之外。在

这是您的代码的修改版本。我还将/运算符改为//,这样除法的结果将是整数。在

^{pr2}$

输出

12
6
3
5
8
4
2
1
[6, 3, 5, 8, 4, 2, 1]

相关问题 更多 >