打印Fibonacci数字的比率直到特定条件

时间:2015-05-23 08:54:22

标签: python

我将打印以显示前70个斐波那契数字。然后在同一个脚本中,我还想打印F(i+1)/F(i)比率,直到满足定义的F(i+1)-F(i)<=536条件。

我的脚本会打印前70个斐波那契数字,但它不打印比率F(i+1)/F(i)

它出现以下错误:

  

追踪(最近一次通话):     文件&#34; fib.py&#34;,第13行,in       而b-a> 536:

     

NameError:name&#39; b&#39;未定义

在我的代码中,a和b分别代表F(i)和F(i + 1)。我该如何修复我的代码?

#!/usr/bin/python

def F(n):
    a, b = 0, 1
    for i in range(0, n):
        a, b = b, a+b
    return a

for c in range(0, 70):
    print(F(c))

while b-a > 536:              
   print 'Ratio:', b/a

4 个答案:

答案 0 :(得分:0)

b在你的时间里没有被定义(如a)。 事实上,ab仅在F(n)函数中定义,它们是局部变量。

您应该先阅读一些有关Programming和python的文档。但是以下代码应该有效:

(我想你想要while a/b <= 536,因为这在你的问题中并不清楚)

def F(n):
    a, b = 0, 1
    for i in range(0, n):
        a, b = b, a+b
    return a, b

for c in range(0, 70):
    a,b = F(c)
    print(a)

while a/b <= 536:              
   print('Ratio:{}/{}'.format(b,a))
   a, b = F(a)

另一个解决方案是全部重写您的代码:

def F(a, b):
    c = a + b
    return c,a

a, b = 0, 1
for c in range (0,70):
    a, b = F(a,b)
    print (a)

while a/b <=536:
    print(a/b)
    a,b = F(a, b)

答案 1 :(得分:0)

试试这个:

a,b = 0,1
l = []
def F(n):
    global a
    global b
    a,b = 0,1
    for i in range(0, n):
        a, b = b, a+b
    return a

for c in range(0, 70):
    num = F(c)
    print(num)
    l.append(num)

for i in range(0, len(l)-2):
    if l[i+1]-l[i] <= 536:
        #print b
        #print a
        print 'Ratio:', float(b)/a

答案 2 :(得分:0)

def F(n):
    a, b = 0, 1
    for i in range(0, n):
        a, b = b, a+b
    return a
factorials = []
for c in range(0, 70):
    factorials.append((F(c)))

for i in xrange(1,len(factorials)-1):
    if factorials[i+1] - (factorials[i]) > 536:
        print "ratio :"+str(factorials[i+1]/float(factorials[i]))

输出主要由以1.61803开头的整数组成,这是你想要实现的吗?

答案 3 :(得分:0)

C:\Users\Hwathanie>"C:\Users\Hwathanie\Documents\Visual Studio 2
013\Projects\MyProject\bin\Debug\MyProject.exe"