我希望在使用n
生成的接收1个参数yield
的函数中生成类似的内容:
1
1+2
1+2+3
…
…
1+2+3+⋯+n−1+n
这是我的最后一次尝试:
def suite(n):
total = 0
for i in n:
total+=i
yield total
这就是我收到的内容:
Traceback (most recent call last):
File "notebook", line 4, in suite
TypeError: 'int' object is not iterable
答案 0 :(得分:4)
您的错误在这里:
for i in n:
n
是一个整数,而不是可迭代的。也许你想在这里使用xrange()
(仅限Python 2)或range()
(在Python 3上推荐):
for i in range(n):
请注意,这会在 0 处开始迭代,而不是1(直到并包括n - 1
)。您可以使用range(1, n + 1)
,也可以只为您的总和添加1:
def suite(n):
total = 0
for i in range(n):
total += i + 1
yield total
这与发电机没有任何关系;无论你是否使用yield
,尝试遍历普通的int
对象都无法正常工作。
答案 1 :(得分:1)
因为你的函数声明与for循环不对应。你不能迭代整数,你应该使用一些迭代。最简单的方法是使用范围:
正确的版本是:
def suite(n):
total = 0
for i in range(n):
total += i
yield total
>>>suite(6)
或者,您可以进行另一项更改以获得一些可迭代的总和:
def suite(iterable):
total = 0
for i in iterable:
total += i
yield total
>>>suite([1,2,3])
答案 2 :(得分:0)
使用range创建一个在for
循环中使用的迭代器:
def suite(n):
total = 0
for i in range(1, n+1):
total+=i
yield total