斐波那契数列-使用While True

时间:2018-07-06 13:48:26

标签: python python-2.7

我一直在努力解决这个斐波那契问题并正确编写它,但是我总是得到不正确的结果,并且卡在代码的第一个If中。

下面的代码:

def main():
    num = 1
    num2 = 1
    num3 = 2
    Katan = True

    while Katan == True:
        if (num3 == 2):
            print num,num2,num3
            num3 = num2 + num3
            num2 = num3
        elif num3 < 10000:
            num3 = num + num2
            num2 = num
            print num,num2,num3
            num = num2
        else:
            Katan = False

if __name__ == '__main__':
    main()

2 个答案:

答案 0 :(得分:4)

这可以比您使用以下方法更简单:

def main():
    # You don't need to store 3 numbers, 2 is enough
    num1 = 1
    num2 = 1

    # You don't need a variable for the while condition, ...
    while True:
        print num1

        if num2 > 10000:
            break # ... you can just break it when some condition is met

        # You can "switch" variables like this
        num1, num2 = num2, num2 + num1

if __name__ == '__main__':
    main()

您可以使用a generator使它更加简单。

答案 1 :(得分:1)

已向您展示了更好的斐波那契功能,但是出于学习目的,这就是您的菲博纳奇无法正常工作的原因。

让我们看一下您的while循环。第一次,您将经历if块。这会将num3设置为3,然后也将num2设置为3。因此,您的变量为(num, num2, num3) == (1, 3, 3)

然后,下一次迭代将带您进入elif块。为了清楚起见,我删除了print

elif num3 < 10000:
    num3 = num + num2
    num2 = num
    num = num2

如您所见,第一次点击num2 = num之后,您就不再永远更改numnum2的值。您只需将它们设置为彼此相等。因此,num3不会在第一次经过这两者后再次更改,因为它仅取决于numnum2。在我看来,您的实际意图是在最后一行中设置了num = num3,使用num3作为临时变量来保留值,同时交换其他变量。进行简单的更改后,代码几乎即可完成您要尝试执行的操作,只有事实证明,实际上根本没有必要使用if块。 num3 == 2的情况没什么特别的,实际上是在浪费您的结果。因此,摆脱if块并将elif提升为if,您的程序将或多或少地完成您的期望:

while Katan == True:
    if num3 < 10000:
        num3 = num + num2
        num2 = num
        print num,num2,num3
        num = num3
    else:
        Katan = False

该序列的开头仍然存在一些麻烦,但是取决于您实际从中获取最终值的位置,可以通过将初始变量更改为(num, num2, num3) == (0, 1, 1)来解决。