前段时间在看《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