我将打印以显示前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
答案 0 :(得分:0)
b
在你的时间里没有被定义(如a
)。
事实上,a
和b
仅在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"