tweak = int(input("Input an integer"))
def collatz(number):
while number != 1:
if number % 2 == 0:
return int(number)
elif number % 2 != 0:
return int((3 * number) + 1)
print(number)
collatz(tweak)
答案 0 :(得分:0)
如果您尝试实现Collatz猜想脚本,那么您的第一个if
是错误的-您应该将数字除以2。此外,return
会使函数结束,因此您得到仅一个while循环,内部发生什么都无所谓-因此,您基本上会返回输入的数字或该数字* 3 +1。
这是经过稍微修改的正确代码:
tweak = int(input("Input an integer"))
def collatz(number):
steps = 0
num = number
while number != 1:
if number % 2 == 0:
number = number / 2
else:
number = int(3 * number + 1)
steps +=1
print("Reached 1 in {} iterations for number {}.".format(steps, num))
collatz(tweak)
您也不需要elif
,因为数字只能被2除。
示例输出:
collatz(22)
collatz(55)
collatz(234)
Reached 1 in 15 iterations for number 22.
Reached 1 in 112 iterations for number 55.
Reached 1 in 21 iterations for number 234.
答案 1 :(得分:0)
您在 if 和 else 中返回的值,因此不会显示超出范围。
相反,将其分配给变量并进行打印。
tweak = input("Input an integer")
def collatz(number):
while number != 1:
if number % 2 == 0:
return int(number)
elif number % 2 != 0:
return int((3 * number) + 1)
print number # this wont work.. your returned already
print "output:%s"%collatz(tweak)
输出:
me@dev-007:~/Desktop$ python test.py
Input an integer10
number 10
output:10
答案 2 :(得分:0)
您的问题只有代码,但是我想这就是您想要的:
def collatz(tweak):
while tweak != 1:
if tweak % 2 == 0:
return int(tweak)
elif tweak % 2 != 0:
return int((3 * tweak) + 1)
print(tweak)
tweak = int(input("Input an integer:"))
result = collatz(tweak)
print(result)