前段时间在看《Python编程快速上手-让繁琐工作自动化》这本书,每章都会有一点习题,其中第三章有个叫“Collatz 序列”的习题,就是著名的冰雹猜想(其实我是学习了Python后才知道有这个数学问题的额~~)。
百度了这个冰雹猜想,有数学家对亿级自然数做了检验,目前仍然无解。
对这个习题写了两套代码,
1、第一套是随机输入任意整数得到其序列
def collatz(number):
if number % 2 == 0: #偶数
number=number//2 #整除
print(number)
else: #奇数
number = 3 * number + 1
print(number)
return number #不加会默认返回None值,所以要指明return number参数
#开始冰雹猜想
print('请输入任意正整数:')
while True:
try:
number = int(input())
if number>0:
while number != 1:
number = collatz(number)
break
elif number<=0: #如果输入负数或零,提示
print('数据类型有误, 请重新输入:')
continue
except: #如果输入小数或其他非数字字符,提示
print('数据类型有误, 请重新输入:')
运行一下像这样:

2、第二套是输入起始和结束数字,计算出这个区间所有整数的序列
def collatz(number):
if number % 2 == 0: #偶数
number=number//2 #商数取整
#print(number)
list.append(number)
else: #基数
number = 3 * number + 1
#print(number)
list.append(number)
return number #不加会默认返回None值,所以要指明return number参数
#开始冰雹猜想
a=int(input('请输入起始数字:'))
b=int(input('请输入结束数字(不包含):'))
for number in range(a,b):
list=[] #每计算完一个数字,清空列表
list.append(number) #列表第0个位置先加进要计算的数字
while number != 1:
number = collatz(number)
print(list)
运行一下像这样:
第0个位置是要计算的数字,第1个位置到最后一个位置就是它的序列。


是否已有天才看出,这到底有神马规律么???
来源:https://www.cnblogs.com/freshGarden/p/12012027.html