如何在python中编写生成斐波那契
fib必须生成(使用收益率)广义Fibonacci 序列,a和b是第一和第二个元素。f是获得第三个元素的函数,而不是正常斐波那契序列中的a+b。使用take函数(如下所示)对其进行测试 我的代码在下面如何在python中编写生成斐波那契,python,generator,fibonacci,yield,function,Python,Generator,Fibonacci,Yield,Function,fib必须生成(使用收益率)广义Fibonacci 序列,a和b是第一和第二个元素。f是获得第三个元素的函数,而不是正常斐波那契序列中的a+b。使用take函数(如下所示)对其进行测试 我的代码在下面 def fib(a, b, f): 我不知道我的代码出了什么问题,当我尝试测试它时,它会显示出来 “TypeError:'generator'对象不可订阅” 测试用例是: def fib(a, b, f): x = a y = b yield x x, y = y
def fib(a, b, f):
我不知道我的代码出了什么问题,当我尝试测试它时,它会显示出来
“TypeError:'generator'对象不可订阅”
测试用例是:
def fib(a, b, f):
x = a
y = b
yield x
x, y = y, f(x,y)
fib(x,y,f)
它应该提出:
take(5, fib(0, 1, lambda x, y: x - y))
我写的函数是:
[0, 1, -1, 2, -3]
def take(n,iterable):
x=[]
如果n消息意味着生成器不支持索引,那么iterable[i]
将失败。相反,使用next()
函数从迭代器中获取下一项
def take(n, iterable):
x = []
if n <= 0:
return x
else:
for i in range (0,n):
x.append(iterable[i])
return x
另外,您的fib()
函数将无法工作。您不应该在函数末尾递归;相反,编写一个循环,在每次迭代中产生一个值
def take(n, iterable):
x = []
if n > 0
itr = iter(iterable) # Convert the iterable to an iterator
for _ in range(n): # Repeat n times
x.append(next(itr)) # Append the next item from the iterator
return x
您无法索引来自生成器函数(如fib()
)的结果。下面通过将zip()
与range()
参数一起使用来避免这种情况zip()
当它的一个参数到达then end时自动停止
def fib(a, b, f):
x = a
y = b
while True:
yield x
x, y = y, f(x,y)
斐波那契最简单的方法你会遇到:
def fib(a, b, f):
x, y = a, b
while True:
yield x
x, y = y, f(x, y)
def take(n, iterable):
return [] if n <= 0 else [v for _, v in zip(range(n), iterable)]
print( take(5, fib(0, 1, lambda x, y: x-y)) )
yield
返回生成器而不是迭代器。take(…)
Python函数吗?更可能来自Haskell;)@Anzel这是OP自己定义的函数。@augurar,我知道,我只是有点讽刺;)我是python新手。你能告诉我如何修改take函数吗?
a , b =0 , 1
for n in range(100):#any number
print(a)
a = a + b
print (b)
b = b + a