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:代码和结果如上,不知道谁能解释一下这是为什么,希望答案详细,谢谢 展开
>>> b = 1
>>> while a>0:
b += 1
a /= b
>>> print(a,b)
0.0 178
PS:代码和结果如上,不知道谁能解释一下这是为什么,希望答案详细,谢谢 展开
展开全部
是因为你使用的编译器是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
最后,打印是程序调试很有用的方法,通过打印的结果,你会知道每一步的运行结果。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询