冰雹猜想

和自甴很熟 提交于 2019-12-09 17:00:27

  前段时间在看《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个位置到最后一个位置就是它的序列。

  是否已有天才看出,这到底有神马规律么???

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!