我正在编写一个Collatz序列程序,使用来自使用python自动化无聊内容的第3章中的练习项目。
计划大纲是:
编写一个名为
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.")
答案 0 :(得分:1)
问题是你在循环结束后再次调用collatz()
。只需删除该行,它就可以了。
此外,如果您将"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.")
答案 1 :(得分:0)
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.")