Python 3.x Fib发生器应答;Can';如果函数为';它的功能是一个可移植的?

Python 3.x Fib发生器应答;Can';如果函数为';它的功能是一个可移植的?,python-3.x,Python 3.x,首先,很抱歉我的问题不清楚,我不知道如何解决这个问题。这是我用生成器编写的斐波那契代码,但不知何故,我得到了一个name错误:名称“n”没有定义。 def fib_g(n): a, b = 0, 1 while counter <= n: yield a a, b = b, a + b for i in fib_g(n): print(i) print(fib_g(3)) def fib_g(n): a、 b=0,1 而计数

首先,很抱歉我的问题不清楚,我不知道如何解决这个问题。这是我用生成器编写的斐波那契代码,但不知何故,我得到了一个
name错误:名称“n”没有定义。

def fib_g(n):
    a, b = 0, 1
    while counter <= n:
        yield a
        a, b = b, a + b


for i in fib_g(n):
    print(i)


print(fib_g(3))
def fib_g(n):
a、 b=0,1

而计数器下面的程序将帮助您找到斐波那契级数。你不需要在他们的循环中有额外的for

n = input('enter the length of the fib series? :')

num = int(n)
fib = []

#first two elements
i = 0
j = 1

count = 0

while count < num:
    fib.append(i)
    k = i + j
    i = j
    j = k

    count+=1

print(fib)
n=input('输入fib序列的长度?:')
num=int(n)
fib=[]
#前两个要素
i=0
j=1
计数=0
计数
编辑:

代码的问题是,在函数中进入了永无止境的循环。另外,使用未定义的变量n对生成器进行迭代。稍微修改一下你的代码。请参考下面的代码

def fib_g(n):
    a, b = 0, 1
    x = 0
    while x < n:
        yield a
        a, b = b, a + b
        x+=1

for i in fib_g(10):
    print(i)
def fib_g(n):
a、 b=0,1
x=0
而x

希望能有帮助。

几个小时后我又看了一遍,这确实是一个相当愚蠢的问题,但下面是我问题的答案

“如果函数作为iterable函数运行,则无法在函数中传递参数?” 当然可以

如果函数可以用作iterable,那么没有理由不使用带有参数的函数(尽管如此,它们仍然是函数!)

名称错误的原因 出现
namererror
的原因很简单,正如Python所说:
'n'没有定义。怎么可能呢?我不是在结尾写了
print(fib_g(3))
吗?问题是
for
循环在该行之前运行。(愚蠢的错误我知道…)

通过运行外部打印语句来运行代码的动机 如果您希望有人能够轻松运行
fib
代码,而无需找到编辑代码的准确行,或者如果有人正在导入您的fib代码,而您不希望他们直接编辑代码,那么如果可以在代码之外定义n,这将非常有用。在这种情况下,代码应该是这样的:

def fib_g(n):
    a, b = 0, 1
    while True:
        yield a
        a, b = b, a + b


def fib_g_print(n):
    counter = 0
    for i in fib_g(n):
        if counter <= n:
            print(i)
            counter += 1


fib_g_print(6)
def fib_g(n):
a、 b=0,1
尽管如此:
产生
a、 b=b,a+b
def光纤打印(n):
计数器=0
对于fib_g(n)中的i:

如果计数器,则应将有效参数传递给
fib\u g
,而不是
n
,该参数仅在
fib\u g
范围内使用。您还应该初始化
计数器
,并在
循环中增加它:

def fib_g(n):
    a, b = 0, 1
    counter = 0
    while counter < n:
        yield a
        a, b = b, a + b
        counter += 1

for i in fib_g(10):
    print(i)

您的变量“n”在代码中的任何地方都没有定义,这是获得错误答案的问题好的答案,但不完全是我所困惑的,我自己发布了一个响应,但仍然向上投票表示感谢:)
def fib_g(n):
    a, b = 0, 1
    while True:
        yield a
        a, b = b, a + b


def fib_g_print(n):
    counter = 0
    for i in fib_g(n):
        if counter <= n:
            print(i)
            counter += 1


fib_g_print(6)
def fib_g(n):
    a, b = 0, 1
    counter = 0
    while counter < n:
        yield a
        a, b = b, a + b
        counter += 1

for i in fib_g(10):
    print(i)
0
1
1
2
3
5
8
13
21
34