目录

一、冰雹猜想的来由

二、实现方法

1、定义根据规则生成新数的函数

2、定义生成列表的函数

3、定义主函数

三、完整代码

四、部分代码分析

五、输出结果

1、输入4

2、强悍的27

总结:


前面完成两个黑洞的程序演示,下面用python实现冰雹猜想的演示,如果对前面的两个黑洞的程序演示有想法,可以参考我以前的两篇博文。

一、冰雹猜想的来由

1976年的一天,《华盛顿邮报》于头版头条报道了一条数学新闻。文中记叙了这样一个故事:

70年代中期,美国各所名牌大学校园内,人们都像发疯一般,夜以继日,废寝忘食地玩弄一种数学游戏。这个游戏十分简单:任意写出一个正整数N,并且按照以下的规律进行变换:

如果是个奇数,则下一步变成3N+1。

如果是个偶数,则下一步变成N/2。

不单单是学生,甚至连教师、研究员、教授与学究都纷纷加入 。为什么这种游戏的魅力经久不衰?因为人们发现,无论N是怎样一个数字,最终都无法逃脱回到谷底1。准确地说,是无法逃出落入底部的4-2-1循环,永远也逃不出这样的宿命。

这就是著名的“冰雹猜想”

冰雹猜想又称角谷猜想,因为是一个名叫角谷的日本人把它传到中国。

二、实现方法

1、定义根据规则生成新数的函数

#生成新数
def generate_new_number(number):if number % 2 == 0:number = number / 2else:number = number * 3 + 1return int(number) 

输入正整数,根据奇偶性进行相应的运算,并返回新数

2、定义生成列表的函数

#定义计算生成列表的函数
def cal_to_list(input_number):number_list =[]     #用于存放过程中的数值new_number = generate_new_number(input_number)number_list.extend([input_number,new_number])#符合条件循环,并将产生的数存入列表,以便查阅统计while new_number > 1:new_number = generate_new_number(new_number)number_list.append(new_number)#打印输出for item in number_list:print(item)#打印输出特殊值print("进行了{0}次运算".format(len(number_list)-1))print("最大的数是{0}".format(max(number_list)))

调用前面的新数产生函数,产生新数,并根据情况跳出循环,将结果存放到列表中。

3、定义主函数

def main():input_number = input("请输入一个正整数!")  # 接收输入的数input_int_number = int(input_number)  cal_to_list(input_int_number)str_begin = input("再来一次,y 或 n ?")if str_begin  in ['Y','y','是']:main()elif str_begin == 'N' or str_begin == 'n':print("感谢您的使用!")else:print("输入错误,会重新开始!")main()

包括接收输入数据,调用函数,决定是否再次运行主程序

三、完整代码

"""本程序用来演示冰雹猜想
基本描述:
冰雹猜想 是指:一个正整数x,如果是奇数就乘以3再加1,
如果是偶数就析出偶数因数2ⁿ,这样经过若干个次数,最终回到1。
实现方法:
利用函数判断生成新的数据,调用函数运算不断运算直到符合最小正整数的条件
备注:
以后学习数据分析时,可以生成数据,统计每个正整数的数据情况
"""
#生成新数
def generate_new_number(number):if number % 2 == 0:number = number / 2else:number = number * 3 + 1return int(number)   #如果此处不加int转化,则会产生的浮点数,没找到为什么.#定义主函数
def main():input_number = input("请输入一个正整数!")  # 接收输入的数input_int_number = int(input_number)  # 由于输入的数据直接生成的是字符类的数据,必须先转化为cal_to_list(input_int_number)str_begin = input("再来一次,y 或 n ?")if str_begin  in ['Y','y','是']:main()elif str_begin == 'N' or str_begin == 'n':print("感谢您的使用!")else:print("输入错误,会重新开始!")main()
#定义计算生成列表的函数
def cal_to_list(input_number):number_list =[]     #用于存放过程中的数值new_number = generate_new_number(input_number)number_list.extend([input_number,new_number])#符合条件循环,并将产生的数存入列表,以便查阅统计while new_number > 1:new_number = generate_new_number(new_number)number_list.append(new_number)#打印输出for item in number_list:print(item)#打印输出特殊值print("进行了{0}次运算".format(len(number_list)-1))print("最大的数是{0}".format(max(number_list)))main()

四、部分代码分析

1、input()输入的数据字符串类型。

通过input输入的数据是字符串类型,要进行数学运算必须先转化为整数型,否则后面的列表比较求最大值时会产生错误。

 input_number = input("请输入一个正整数!")  # 接收输入的数input_int_number = int(input_number) 

2、列表多个元素的添加

列表添加多个列表元素时,

一种方法是利用append(),但是每次只能添加一个元素,两个元素需要分两次添加。

第二种方法是利用extend(),但是需要将多个元素组合成列表加入

#方法一,利用append()逐个加入number_list.append(input_number)number_list.append(new_number)
#方法二,利用extend(),组合成列表后加入,内存操作相对较多number_list.extend([input_number,new_number])

五、输出结果

1、输入4

请输入一个正整数!4
4
2
1
进行了2次运算
最大的数是4

2、强悍的27

请输入一个正整数!27
27
82
......
9232
4616
2308
......
2
1
进行了111次运算
最大的数是9232

备注:冰雹的最大魅力在于不可预知性。英国剑桥大学教授John Conway找到了一个自然数27。虽然27是一个貌不惊人的自然数,但是如果按照上述方法进行运算,则它的上浮下沉异常剧烈:首先,27要经过77步骤的变换到达顶峰值9232,然后又经过34步骤到达谷底值1。全部的变换过程(称作“雹程”)需要111步,其顶峰值9232,达到了原有数字27的342倍多,如果以瀑布般的直线下落(2的N次方)来比较,则具有同样雹程的数字N要达到2的111次方。其对比何其惊人!

总结:

总体来说,程序实现起来比较简单,但对于结果的分析还是做的不到位的,需要进行分析,有可能的话可以进行数学的推导与验算。再次学习了数据分析以后,可以将每个数的值进行分析,总结规律。

用Python实现冰雹猜想(3n+1猜想,角谷猜想,叙古拉猜想)的黑洞演示相关推荐

  1. c语言问题 角谷猜想,hdu 1279 验证角谷猜想(简单的模拟)

    Problem Description 数论中有许多猜想尚未解决,其中有一个被称为"角谷猜想"的问题,该问题在五.六十年代的美国多个著名高校中曾风行一时,这个问题是这样描述的:任何 ...

  2. 角谷猜想(Collatz conjecture)--用 python 语言实现

    老师布置的一个小作业–用python代码实现角谷猜想,下面就给大家提供一个思路,供大家参考. ''' 角谷猜想: n 是一个自然数 如果 n 是奇数,则 n = 3 * n + 1 如果 n 是偶数, ...

  3. 【python角谷猜想】

    题目: 角谷猜想,又称为冰雹猜想,是日本数学家角谷静夫发现的一种数学现象,电的具体内容是:一个正整救n,若为偶教,则变为n/2,若为奇数,则乘3加1(即3n+1).不新重复这样的运算,经过有限步后,必 ...

  4. java证明角谷猜想_角谷猜想证明

    摘要: 本文应用反证法,通过黑洞数唯1,3x+1必唯1,证明3x+1猜想成立. 关键词: 角谷猜想 黑洞 一."角谷猜想"概念 "角谷猜想"又称"冰雹 ...

  5. Python验证和可视化冰雹猜想、角谷猜想、考拉兹猜想

    推荐教材:<中学生可以这样学Python(微课版)>,董付国.应根球,清华大学出版社,ISBN:9787302554639 京东购买链接: =================== 问题描述 ...

  6. 奇偶归一猜想(多组数据)——又称为3n+1猜想、冰雹猜想、角谷猜想

    输入两个正整数a和b(1<a<b<1000),输出二者之间所有数的奇偶归一猜想的验证过程. [科普] 奇偶归一猜想,又称为3n+1猜想.冰雹猜想.角谷猜想等.其内容为"对于 ...

  7. Python验证和可视化之三大猜想 [ 冰雹猜想、角谷猜想、考拉兹猜想 ]

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 本篇文章来自腾讯云 作者:Python小屋屋主 ( 想要学习Python?Pyth ...

  8. C语言编写冰雹猜想(角谷猜想)

    1976年的一天,<华盛顿邮报>于头版头条刊登了一条数学新闻,文中叙述了这样一则故事:70年代中期,美国个所名牌大学校园内,人们都像发疯一般,日以继夜废寝忘食地玩弄一种数学游戏,这个游戏十 ...

  9. python角谷猜想详细步骤_用python3.7编写考拉兹猜想 -

    你听说过考拉兹猜想吗?就是随便选一个大于1自然数,如果是奇数就乘3加1,如果是偶数就除2,如此循环,最后结果一定是1.考拉兹猜想又称为奇偶归一猜想.3n+1猜想.冰雹猜想.角谷猜想.哈塞猜想.乌拉姆猜 ...

最新文章

  1. Nagios监控之9:利用sendmail使用第三方SMTP服务发送邮件报警
  2. Java 技术篇-linux系统下安装jdk、设置java环境变量实例演示
  3. 蔡砚刚:uAVS3对标x265 veryslow将节省30%码率
  4. 自定义预览_为什么NVR预览画面数量少于已经添加的通道数
  5. GIT项目管理工具(part8)--版本控制
  6. suse11 rpm 安装mysql_SuSE11安装MySQL5.7.22:RPM安装方式
  7. apache shiro版本查看_深入学习SpringBoot(四):springboot整合shiro
  8. su root 后还是不能使用useradd ,useradd 等命令
  9. Python2+Selenium入门04-关于WebDriver类
  10. web显示实时时间动态刷新
  11. 吉林大学计算机数据中心排名,2018年度中国医院排行榜发布,吉大一院跻身50强!...
  12. 【模型选择】从0到1的数据价值实现需要数据分析师做些什么?
  13. Linux源码解析--从开机加电到main函数
  14. 双绞线的线序568A与568B
  15. 配置 PO SLD步骤
  16. Python办公自动化实战 01 | Python优势与自动化思维让你的工作化繁为简
  17. 方正飞鸿:OA系统先进性如何在工作流中体现
  18. 实用工具|零代码实现高德地图POI数据下载
  19. C语言哈夫曼编码压缩解压
  20. 域名是干啥用的?企业自己都记不住的域名还能发挥作用吗?

热门文章

  1. 总结Windows XP实用优化技巧大放送(转)
  2. 多张图片转换成PDF的必备办公技能
  3. 我的世界mod整合包java_我的世界豆腐mod整合包
  4. Discuz 论坛 版主回复后在帖子列表后加版主回复字样
  5. 多层级部门结构展示与分级汇总
  6. DEFORM文本模式(4):后处理结果的提取
  7. 笔记本使用vmware
  8. xmos_helloworld
  9. vin7 安装vue教程(一路都是泪)
  10. iOS游戏开发中使用自定义字体的方法