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