Python猜想

时间:2016-08-28 04:25:47

标签: python python-3.x sys

最近我一直试图使用python 3.0分拆Collat​​z猜想。该程序与正整数一样工作,但它不适用于负整数。在程序中,我检查数字是否为负数,如果是,我将其调整,然后继续使用collat​​z,规则。不幸的是,它没有发出任何错误消息。代码如下:

 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!

1 个答案:

答案 0 :(得分:1)

在Collat​​z猜想使用的映射中,正值始终映射到另一个正值。因此,您只需要在初始化过程中检查负值:

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不会更改数字的值,因为没有赋值。