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