Python斐波纳契生成器

Joh*_*ohn 14 python naming-conventions fibonacci

我需要制作一个程序,询问打印的Fibonacci数量,然后将它们打印出来,如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(),
Run Code Online (Sandbox Code Playgroud)

rub*_*bik 28

我会用这个方法:

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))
Run Code Online (Sandbox Code Playgroud)

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)))
Run Code Online (Sandbox Code Playgroud)


unu*_*tbu 24

你给的a意思太多了:

a = int(raw_input('Give amount: '))
Run Code Online (Sandbox Code Playgroud)

a = fib()       
Run Code Online (Sandbox Code Playgroud)

如果为变量提供更具描述性的名称(a10行代码中名称的3种不同用法),您将不会遇到问题(通常):

amount = int(raw_input('Give amount: '))
Run Code Online (Sandbox Code Playgroud)

range(a)改为range(amount).


Joh*_*ooy 13

既然你正在编写一个生成器,为什么不使用两个收益,以节省额外的洗牌?

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
Run Code Online (Sandbox Code Playgroud)

.....


Mer*_*roz 7

使用生成器非常简单:

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, ...]
Run Code Online (Sandbox Code Playgroud)


app*_*eev 5

Python 是一种动态类型语言。变量的类型是在运行时确定的,它可以随着执行的进行而变化。在这里,您首先声明了一个保存整数类型,后来又为它分配了一个函数,因此它的类型现在变成了一个函数。

您正在尝试将“ a ”作为参数应用于range()函数,该函数需要一个 int arg,但实际上您提供了一个函数变量作为参数。

更正后的代码应该是

 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(),
Run Code Online (Sandbox Code Playgroud)

这会起作用