Python中while循环的一个问题

>>>a=1>>>b=1>>>whilea>0:b+=1a/=b>>>print(a,b)0.0178PS:代码和结果如上,不知道谁能解释一下这是为什么,希望答案详细,谢... >>> a = 1
>>> b = 1
>>> while a>0:
b += 1
a /= b

>>> print(a,b)
0.0 178
PS:代码和结果如上,不知道谁能解释一下这是为什么,希望答案详细,谢谢
展开
 我来答
小wo_在路上
推荐于2018-03-20 · TA获得超过293个赞
知道小有建树答主
回答量:86
采纳率:100%
帮助的人:98万
展开全部

是因为你使用的编译器是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


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

albumin
2013-08-27 · TA获得超过1.2万个赞
知道大有可为答主
回答量:4889
采纳率:87%
帮助的人:2412万
展开全部
在Python中数字是有精度的,虽然数学上a是一个越来越小的小数,但是当a小到一定程度时超过python可以表示的精度时,值就为0,这时循环就结束了,输出a和b的值
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式