我正在关注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
这是一个已知问题,还是解释器中的一些临时故障?
答案 0 :(得分: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
循环内,即使它看起来像。