Python猜想

Python Conjecture

最近我一直在尝试使用 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!

-谢谢!

在 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:。它只会 运行 如果 number 等于 1(有一个双重否定)。如果输入1,这个循环会运行一次,将3*1+1赋值给number,然后开始第二次循环。换句话说,这个循环是没有意义的:删除它。注意行 number ** 2 不会改变数字的值,因为没有赋值。