我需要编写一个程序,要求用户输入要打印的斐波那契数列的数量,然后像 0、1、1、2... 这样打印它们,但是我无法让它正常工作。我的代码如下:
a = int(raw_input('Give amount: '))
def fib():
a, b = 0, 1
while 1:
yield a
a, b = b, a + b
a = fib()
a.next()
0
for i in range(a):
print a.next(),
我需要编写一个程序,要求用户输入要打印的斐波那契数列的数量,然后像 0、1、1、2... 这样打印它们,但是我无法让它正常工作。我的代码如下:
a = int(raw_input('Give amount: '))
def fib():
a, b = 0, 1
while 1:
yield a
a, b = b, a + b
a = fib()
a.next()
0
for i in range(a):
print a.next(),
我会使用这种方法:
Python 2
a = int(raw_input('Give amount: '))
def fib(n):
a, b = 0, 1
for _ in xrange(n):
yield a
a, b = b, a + b
print list(fib(a))
Python 3
a = int(input('Give amount: '))
def fib(n):
a, b = 0, 1
for _ in range(n):
yield a
a, b = b, a + b
print(list(fib(a)))
fib(0)
不会产生任何结果,可以使用 range(n+1)
来修复。 - AgentRev你给 a
赋予了太多的意义:
a = int(raw_input('Give amount: '))
对比。
a = fib()
如果你给变量起更具描述性的名称,就不会(那么经常)遇到这个问题了(在10行代码中使用名称a
的3种不同用途!):
amount = int(raw_input('Give amount: '))
将range(a)
更改为range(amount)
。
既然你正在编写一个生成器,为什么不使用两个yield来节省额外的洗牌操作呢?
import itertools as it
num_iterations = int(raw_input('How many? '))
def fib():
a,b = 0,1
while True:
yield a
b = a+b
yield b
a = a+b
for x in it.islice(fib(), num_iterations):
print x
.....
使用生成器非常简单:
def fin(n):
a, b = 0, 1
for i in range(n):
yield a
a, b = b, a + b
ln = int(input('How long? '))
print(list(fin(ln))) # [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ...]
Python是一种动态类型语言。变量的类型在运行时确定,随着执行的进行而变化。在这里,首先声明了一个变量a来保存整数类型,然后又将一个函数赋值给它,因此它的类型现在变成了一个函数。
你试图将“a”作为参数应用于range()函数,但该函数期望一个int类型的参数,实际上你提供了一个函数变量作为参数。
更正后的代码应该是:
a = int(raw_input('Give amount: '))
def fib():
a, b = 0, 1
while 1:
yield a
a, b = b, a + b
b = fib()
b.next()
for i in range(a):
print b.next(),
这将会起作用。
def fibonacci(n):
fn = [0, 1,]
for i in range(2, n):
fn.append(fn[i-1] + fn[i-2])
return fn
def getFibonacci():
a, b = 0, 1
while True:
yield b
b = a + b
a = b - a
for num in getFibonacci():
if num > 100:
break
print(num)
def genFibanocciSeries():
a=0
b=1
for x in range(1,10):
yield a
a,b = b, a+b
for fib_series in genFibanocciSeries():
print(fib_series)
def Fib(n):
i=a=0
b=1
while i<n:
print (a)
i=i+1
c=a+b
a=b
b=c
Fib(input("Please Enter the number to get fibonacci series of the Number : "))
你的a
可以说是一个全局变量。
a = int(raw_input('Give amount: '))
a
,它都认为你在谈论上面那个。将其称为其他名称(如elsewhere或here)应该会有所帮助。
a
和b
值创建一个元组(b,a+b)
,然后在将其分配给a,b
时解包该元组。(严格来说,Python 可以进行一些优化,但我现在忽略这一点)。 - iAdjunct