首先,我知道这是一个非常容易被问到的问题。编写一个名为collatz()的函数,该函数有一个名为number的参数。如果number为偶数,则collatz()应输出number // 2并返回此值。如果number是奇数,那么collatz()应该打印并返回3* number + 1。然后编写一个程序,让用户输入一个整数,并对该数字不断调用collatz(),直到函数返回值1。
def collatz(number):
return [number //2 if number %2 == 0 else 3*number + 1]
number = int(input('Number - \n'))
while number != 1:
result = collatz(number)
print(result)在我的程序中,我不明白的是,为什么它要做第一个操作,却卡在第一个数字上。例如,如果我输入12,它返回6,但由于永远打印6而陷入while循环。我想知道这个程序到底出了什么问题。
发布于 2019-08-27 17:02:11
您的问题是您正在丢弃result。您可能指的是number = collatz(number)[0] (出于某种原因,您在这里使用列表)。
由于您没有在循环中修改number,因此条件的计算结果总是相同的,collatz的输入也总是相同的。
发布于 2019-08-27 17:13:59
问题在于,您并没有将新元素添加到列表中,而是用当前结果替换了列表。我已经修改了您的代码,以便使用序列中的元素填充列表:
n = int(input("n="))
l = []
while n != 1:
l.append(n);
n = n // 2 if n % 2 == 0 else n * 3 + 1
print(l)https://stackoverflow.com/questions/57671078
复制相似问题