初学者问题。
我刚试过自动化无聊的练习。我已经通过首先定义一个函数建议的格式完成了问题,如下所示:
"编写一个名为collatz()的函数,该函数有一个名为number的参数。如果number为偶数,则collatz()应打印数字// 2并返回此值。如果number是奇数,那么collatz()应该打印并返回3 * number + 1."
然后使用相同的函数,满足这些最小约束,编写满足以下要求的程序:
然后编写一个程序,让用户输入一个整数,并继续在该数字上调用collatz(),直到函数返回值为止。
按照上述规则,我设法生成一系列以1结尾的数字,但我的程序会在序列中打印三次数字。有人能够解释为什么会这样吗?
非常感谢你的帮助
def collatz(number):
if int(number) % 2 == 0:
print(int(number)//2)
return int(number)//2
else:
print(3 * int(number) + 1)
return 3 * int(number) + 1
collatz(5)
print('Enter a number')
entry = input()
while collatz(entry) != 1:
collatz(entry)
entry = collatz(entry)
答案 0 :(得分:2)
你的循环应如下所示:
entry = input()
while entry != 1:
entry = collatz(entry)
答案 1 :(得分:0)
您正在调用该函数3次,并且您在函数中调用print
。
仅调用该函数一次,我将从print
方法中删除collatz
语句,并在调用循环中删除print
,例如:
In []:
def collatz(number):
if number % 2 == 0:
return number//2
return 3*number + 1
entry = int(input("Enter a number: "))
print(entry)
while entry != 1:
entry = collatz(entry)
print(entry)
Out[]:
Enter a number: 10
10
5
16
8
4
2
1
答案 2 :(得分:0)
您可以尝试:
def collatz(number):
if number == 0:
return 'Try again with an integer other than 0'
elif number == 1:
return 1
elif number % 2 == 0:
n = number // 2
print(n)
elif number % 2 == 1:
n = 3 * number + 1
print(n)
while n != 1:
n = collatz(n)
return n
return n
第15行的最后一条语句return n
是可选的。