问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Python中while循环的一个问题

发布网友 发布时间:2022-04-18 04:46

我来回答

2个回答

热心网友 时间:2022-04-18 06:15

是因为你使用的编译器是python3.x的原因:

Python 3.3.1 (default, Apr 17 2013, 22:32:14) 
[GCC 4.7.3] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> a = 1
>>> b = 1
>>> while a > 0:
...     b += 1
...     a /= b
... 
>>> print(a, b)
0.0 178

如果使用python2.x的话,打印出来将是(0,2)

Python 2.7.4 (default, Apr 19 2013, 18:32:33) 
[GCC 4.7.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> a = 1
>>> b = 1
>>> while a > 0:
...     b += 1
...     a /= b
... 
>>> print (a,b)
(0, 2)
>>> c = (a, b)
>>> print c
(0, 2)
>>> print type(c)
<type 'tuple'>

可以比较明显的看到,使用python3.x输出的结果是一个浮点型(float),一个整型(int);而使用python2.x输出的结果是元组(tuple, 直观看就是带括号)。

这就是python3.x和python2.x的比较明显的一个区别---print

在python2.x中,print是个语句(statement),而在3.x中,print是个函数(function),最直接的例子:

在2.x中:

>>> print 'hello world'
hello world


在3.x中:

Python 3.3.1 (default, Apr 17 2013, 22:32:14) 
[GCC 4.7.3] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> print 'hello world'
  File "<stdin>", line 1
    print 'hello world'
                      ^
SyntaxError: invalid syntax
>>> print ('hello world')
hello world
>>>

-------

还有一个比较明显的区别是在3.x中,最后打印的a为0.0(浮点型);而在2.x中,a为0(没有小数点,整型)。这就说明了为什么在python3.x中迭代了178次,因为:

第一次:b = 1 + 1 = 2; a = 1 / 1 + 1 = 0.5
第二次:b = 2 + 1 = 3; a = 0.5 / 2 + 1 = 0.167
....
需要迭代178次,才使得 a 终于 < 0.

如果你在循环中加入打印的话,例如:

Python 3.3.1 (default, Apr 17 2013, 22:32:14) 
[GCC 4.7.3] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> a = 1
>>> b = 1
>>> while a > 0:
...     b = b + 1
...     a = a / b
...     print ('a: ', a)
...     print ('b: ', b)
... 
a:  0.5
b:  2
a:  0.16666666666666666
b:  3
a:  0.041666666666666664
b:  4
a:  0.008333333333333333
b:  5
a:  0.001388888888888889
...
...
b:  175
a:  5.054e-321
b:  176
a:  3e-323
b:  177
a:  0.0
b:  178
>>> print(1/2)
0.5


这样,你比较容易知道原因了。

同样,我打印出了python2.x的结果:

Python 2.7.4 (default, Apr 19 2013, 18:32:33) 
[GCC 4.7.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> a = 1
>>> b = 1
>>> while a > 0:
...     b = b + 1
...     a = a / b
...     print 'a: ', a
...     print 'b: ', b
... 
a:  0
b:  2
>>> print 1/2
0


最后,打印是程序调试很有用的方法,通过打印的结果,你会知道每一步的运行结果。

热心网友 时间:2022-04-18 07:33

在Python中数字是有精度的,虽然数学上a是一个越来越小的小数,但是当a小到一定程度时超过python可以表示的精度时,值就为0,这时循环就结束了,输出a和b的值
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
湖北哪些学校有专升本 湖北哪些学校可以报专升本 华为mate7会不会卡 中央集权的本质 秦朝中央集权的实质是什么 秦朝建立专制主义中央集权制度的本质特征是 A改王为皇帝 B建立中央官制... 想生个女儿怎么备孕 怎样备孕生女孩7个方法 备孕怎样做才能生女孩 天津市国税局公务员面试成绩去哪儿查? 酸辣白甘蓝怎么做好 电场电流磁场电磁感应 电磁感应这一章节的重点,要详细一点!! 高中物理-电磁感应 蟹蟹你的痴心这句话什么意思? 一道物理电磁感应题 急 在线等 - 信息提示 一道电磁感应的物理题 物理 电磁感应 鳖蟞啥意思,最近老是有人说, 嘻嘻,蟹蟹你,我念书少啊,别欺负我! 高中物理电磁感应 蟹蟹你,给你一个超大的么么哒什么意思 第八章电磁感应电磁场 拍完的照片用水印相机加水印 我蟹蟹你了是什么意思 怎样产生感应电流教案doc 九宫格锁锁住了型号oppoa57咋办呢?本来想用电脑刷机可是打不开USB调试 商标后的 &quot;R&quot; 和&quot;TM&quot;是什么意思 在每一个物品的包装左上角,不是写R就是TM。它们各是什么意思? 口罩包装上的丅M是什么意思? 晚上口干吃什么药 高龄备孕前吃什么好有营养的那种? 有玺备孕,高龄产妇要吃什么? 今年45岁了,还想再生个宝宝,现在处于备孕阶段,吃什么可以有助于受孕? 我每天半夜口干,口苦,吃什么药能治? 晚上睡着后口干舌燥是什么病?用什么药物治疗? 圆周率的历史(我国古代) 圆周率的历史资料有关内容 女人备孕期间吃什么好?有哪些比较实用的?实用的办法有哪些法子? 高龄产妇吃什么比较好 这三类食物孕妈不可缺少 圆周率的历史,50字就好,最少35字。求,快。 圆周率的历史。圆周率的创造人。 高龄产妇吃啥有好处? 备孕吃什么维生素,怎么备孕比较好点的呢? 高龄产妇刚怀孕应吃什么东西? 关于圆周率的历史资料? 圆周率历史 为什么手机下载的社保查询不能更新 去香格里拉玩冬季的高原反应大还是夏天去反应大 跪求下载,天地争霸美猴王 西游记2 陈浩民版