1

我正在关注python官方教程。
我创建了一个斐波那契函数fib(),如教程中所示,
给定参数的函数的输出1是(令我惊讶),
无限的0.

>>> def fib(n):
...     a, b = 0, 1
...     while a < n:
...         print a, 
...         a, b = b, a + b
... 
>>> fib(0)
>>> fib(1)
0 0 0 0 0 0 0 0 0 0 (...repeats infinitely, had to break out with ^+Z ...)

我试图重现该问题,但未能成功。

>>> def fib(n):
...     a, b = 0, 1
...     while a < n:
...         print a,
...         a, b = b, a + b
... 
>>> fib(0)
>>> fib(1)
0
>>> fib(1)
0

这是一个已知问题还是解释器中的一些临时故障?

4

1 回答 1

4

我可以重现这个:

>>> def fib(n):
...     a,b = 0,1
...     while a < n:
...         print a,
...         a,b = b, a+b
... 
>>> fib(5)
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 

我是怎么做到的?上面的代码真的

def fib(n):
[tab]a,b = 0,1
[tab]while a < b:
[tab][4 spaces]print a,
[eight spaces]a,b = b, a+b

混合制表符和空格会使解释器混淆它应该如何解析缩进。结果,该a,b = b, a+b行实际上并不在while循环内,即使它看起来像它。

于 2013-01-28T13:15:31.703 回答