python中的无限循环 - 为什么?

时间:2016-08-17 21:10:58

标签: python

我正在使用代码

fibList=[1]

def fib(n1, n2):
    n3 = n1+n2
    n1=n2
    n2=n3

num1=1
num2=2

while(num2<4000000):
    fib(num1,num2)
        if (num2%2==0):
            fibList.append(num2)
total = sum(fibList)

print total

在在线编译器中,repl.it。它一直在前进而没有提供解决方案,因此我在print n3函数的定义中的n3=行的正下方键入了行fib。它一遍又一遍地给了3,它在我停止程序之前崩溃了。显然,某处有某种无限循环(至少,显然在我的脑海中;我想,它不可能是一个无限循环,但我很确定它是)。问题是在哪里。我真的不明白为什么会出现无限循环。

顺便说一句,这不是一个家庭作业问题,而是我为了好玩而做的一个问题。 fib函数应该计算Fibonacci数,第二部分隔离偶数少于四百万的函数,然后计算总和。

我想知道的是无限循环的来源以及我可以做些什么来解决它。谢谢!

1 个答案:

答案 0 :(得分:6)

n1n2n3是局部变量,与外部作用域中的num1num2没有任何共同之处,尽管它们具有初始值。您必须return该值并将这些结果再次分配给num1num2

def fib(n1, n2):
    n3 = n1+n2
    n1=n2
    n2=n3
    return n1, n2

num1=1
num2=2
fibList=[1]
while num2<4000000:
    num1, num2 = fib(num1,num2)
    if num2%2==0:
        fibList.append(num2)
total = sum(fibList)

print total