最近我一直试图使用python 3.0分拆Collatz猜想。该程序与正整数一样工作,但它不适用于负整数。在程序中,我检查数字是否为负数,如果是,我将其调整,然后继续使用collatz,规则。不幸的是,它没有发出任何错误消息。代码如下:
import sys
while True:
number = input("Enter any positive integer: ")
count = 0
negative = "-"
try:
int(number)
except ValueError:
print("Invalid Input...")
sys.exit(0)
else:
number = int(number)
ORIGINAL = number
while not number != 1:
count += 1
number ** 2
if number % 2:
number = 3*number+1
elif not number % 2:
number = number // 2
print(number)
while number != 1:
count += 1
if number % 2:
number = 3*number+1
elif not number % 2:
number = number // 2
print(number)
print("The number "+str(ORIGINAL)+" took "+str(count)+" calculations to reach 1")
随意尝试我的代码,它只使用python 3和sys!
-Thanks!
答案 0 :(得分:1)
在Collatz猜想使用的映射中,正值始终映射到另一个正值。因此,您只需要在初始化过程中检查负值:
number = input("Enter any integer: ")
count = 0
try:
number = int(number)
except ValueError:
print("Invalid Input...")
sys.exit(0)
if number < 0:
number = number ** 2
可以删除循环while not number != 1:
。它只会在数字等于1时运行(有一个双重否定)。如果输入1,此循环将运行一次,将3 * 1 + 1分配给数字,然后第二个循环将启动。换句话说,这个循环是没有意义的:删除它。请注意,行number ** 2
不会更改数字的值,因为没有赋值。