BUG是网络用语,通常指系统或程序中的漏洞、缺陷或错误。程序中的BUG有时是致命的。
我在学《python编程》一书时发现多处程序BUG。
72岁老头儿学python,主打的就是一个快乐学习,没有功利心,随心所欲,且学且看且珍惜!
毕竟老头儿年龄大了,岁月不饶人。不能长时间地坐在电脑前,老是盯着屏幕,眼睛也吃不消。
电脑的CPU可以长时间不间断地工作。但人的CPU,尤其是已经高强度运转了72年的CPU,已经不支持高速高强度运转模式了。所以我每天学习不超过两小时,尔后适当地“散散心”。
否则,搞得“电脑”报警,“CPU”冒烟,那就得不偿失了。
所谓“磨刀不误砍柴工”,“慢工出细活”。不慌不忙,我把书上的例题改写、扩写、重组并输入电脑,点“RUN”按钮运行一下。再左试试,右改改,看看运行结果是否是自己预想的结果?
正因为是“慢慢地磨”,所以就看到了《python编程》例题编程有多个BUG。在《学python的老头》前几篇文章里说过一些问题,得到了初学者的关注。
每每这样的小作文一经发出,有效阅读量马上过千,甚至过万,收藏者大几百。
(图一,收藏者一个接一个)
虽然《python编程》一书瑕不掩瑜,但指出4.3.1例题的一个小小的瑕疵,有助于初学者编程更加严谨。
(图二,例题4.3.1)
例题4.3.1求100以内能同时被“5”和“7”整除的数及其数的和是多少?
我重写、扩写它为zxfcx2.py程序,并作为zxfcx8.py的调用程序。运行原程序后,结果给出了“0,35,70”三个数,其数的和为105。(见图三)
程序之所以给出了“0”这个特殊的数,是程序以能否被“5”整除,余数为“0”;同时又能被“7”整除,余数为“0”作为判断依据的。因程序引入了被除数“0”,这就有BUG了。
当程序遇到“0”的时候,因为“0”是一个特殊的数,“0”被任何数除,其结果都是“0”。
实际上,该问题出在range函数的参数设置上。
该书的作者已经不只一次地出现range函数参数的设置问题了。系列文章之九曾指出该书range函数的end参数设置有错。
这一次是start参数的设置有错。
该程序代码range(100),其start参数的默认值为“0”,end参数为“100”。
range(100)表示产生0至100,但不包括100的数,由此把“0”引入了被除数。造成能被“5”和“7”整除的数有“0”的结果。
该段程序代码只需要修改range函数的参数start为1,end参数为100就可以了。
修改后的range(1,100)表示产生一个1至100但不包括100的数。这样就避免引入“0”这个特殊的被除数。
(图三为程序及两个运行结果截图)
上个世纪七十年代,我们的J101机器语言教官一而再,再而三地强调:“编程要严谨,严谨,再严谨!要严防疤疙!”
但BUG防不胜防,此为一例。
人生苦短,我学python!
学python的老头,且学且看且珍惜!
《学python的老头之十三》
(2025/7/18)