从Collatz 序列说起

先说两件事:

先说一件资讯,我觉得虽然和我现在没关但是还是蛮大的一件事,GitHub被微软收购了。。。好吧,对我并没有什么影响。但是有种说不出来的感觉。

今天的内容就从Collatz 序列(考拉咨猜想)说起吧。在看完《Python编程快速上手--让繁琐工作自动化》第三章后(其实我是一直视频为主的学习,但是相关书籍也就看过一两本)被里面的一道Collatz 序列的项目题吸引:

"""

编写一个名为 collatz()的函数,它有一个名为 number 的参数。如果参数是偶数,那么 collatz()就打印出 number // 2,并返回该值。如果 number 是奇数,collatz()就打印并返回 3 * number + 1。

然后编写一个程序,让用户输入一个整数,并不断对这个数调用 collatz(),直

到函数返回值1(令人惊奇的是,这个序列对于任何整数都有效,利用这个序列,你迟早会得到 1!既使数学家也不能确定为什么。你的程序在研究所谓的“Collatz序列”,它有时候被称为“最简单的、不可能的数学问题”)。

"""

ok ,这个作为函数的一个经典练习题,我觉得很多人还是能比较轻松解决的,网上的答案也是一搜一堆,但是!但是!我要说的不是这个,千万不要眼高手低呀,今天我看了好几个程序乍看一下确实能解决,但是真的实际演练一遍,你会发现他们的脚本有很多问题。真是很培养自己的动手能力呀,以后大家网上找答案,一定要取其长。

之所以说这个是我看到了一个程序老鸟写的程序,说明:下面的程序贴图是他写的,我也会附上链接:https://blog.csdn.net/mygodhome/article/details/53813026

好吧我承认我的过渡有点长了,说是老鸟,首先sys.exit()的引用真的是我没想到的,我们基本都是while的死循环然后判断break,真的很low。还有他的异常捕获也非常赞。同时我注意到箭头位置的 if __name__ =='__main__':真的是把我雪藏的知识给炸出来了,温故知新呀。

if __name__ =='__main__':

这条语句在这里加或者不加都不影响的。但是这条语句究竟是什么作用呢,其实初学来说还是蛮多困惑的。说白了就是 if True:就会执行,那么问题就是判断 __name__ =='__main__'是否成立,再进一步就是分析他两什么时候成立了不就好了。

__name__ == '__main__':对于abc.py。当模块导入执行(__name__ == 'abc')(等于你起的名字);直接用Python3执行那么(__name__ == '__main__')。

那就可以说明白了if __name__ == '__main__'的意思是:当.py文件被直接运行时,if __name__ == '__main__'之下的代码块将被运行;当.py文件以模块形式被导入时,if __name__ == '__main__'之下的代码块不被运行。

为什么这样呢?

一个Python源码文件(.py)除了可以被直接运行外,还可以作为模块(也就是库),被其他.py文件导入。不管是直接运行还是被导入,.py文件的最顶层代码都会被运行(Python用缩进来区分代码层次),而当一个.py文件作为模块被导入时,我们可能不希望一部分代码被运行。比如我们用来验证的数据函数,这个在单独执行还好验证数据,但是导入之后可能会扰乱主程序的执行,那么这样就可以限制了呀。

哇,公众号更新果然是初起步呀,构思这行东西花了又将近一个小时时间了,最近工作真的是太忙了,Python的面向对象也有点瓶颈期。尽量按照自己的计划更新一些知识点,最低还有几个小伙伴一起学,简单或复杂进步就好

明天预告一下可能会讲位运算或者汉字编码,那 拜

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180604G1YVRE00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券