我正在编写一个Collatz序列程序,使用第3章中的练习项目,用python自动处理无聊的东西。
方案大纲是:
编写一个名为
collatz()的函数,该函数有一个名为number的参数。 如果number是偶数,那么collatz()应该打印number // 2并返回这个值。如果number是奇数,那么collatz()应该打印并返回3 * number + 1。 然后编写一个程序,该程序允许用户输入整数,并一直对该数字调用collatz(),直到函数返回值1为止。
但是,我的代码在4而不是1上停止。到目前为止,对于我尝试过的每一个数字,输出都会超过1回到4。
示例输出:
6,3,10,5,16,8,4,2,1,4我正在使用python 3.4.2
def collatz(number):
if number % 2 == 0:
number = number //2
print(number)
return number
elif number % 2 == 1:
number = 3 * number + 1
print(number)
return number
print ("pick a number:")
while True:
try:
number = int(input())
while number != 1:
number = collatz(number)
collatz(number)
break
except ValueError:
print("Error: Please enter a valid integer")
print("Magic! You are down to 1.")发布于 2016-06-17 15:07:35
问题是,在循环结束后,您再次调用collatz() 1。只要删除该行,它就能正常工作。
另外,如果将"pick a number"移动到input函数,则可以避免问题后的新行,如果输入无效的值,每次都会再次询问。
此外,您还应该检查数字是否大于或等于1,以避免无休止的循环。执行所有这些操作的代码如下所示:
while True:
try:
number = int(input("pick a number: "))
if number < 1:
print("Error: Please enter a integer greater than or equal to 1 ")
continue
while number != 1:
number = collatz(number)
# removed the additional call to collatz
break
except ValueError:
print("Error: Please enter a valid integer")
print("Magic! You are down to 1.")发布于 2016-06-17 15:11:21
def collatz(number):
number = number // 2 if number % 2 == 0 else 3 * number + 1
print(number)
return number
number = int(input("Pick a Number\n"))
while number != 1:
number = collatz(number)
print("Magic! You are down to 1.")https://stackoverflow.com/questions/37884792
复制相似问题