Reputation: 19
I want to generate something like that in a function that receives 1 argument n
using yield
to generate:
1
1+2
1+2+3
…
…
1+2+3+⋯+n−1+n
That is my last try:
def suite(n):
total = 0
for i in n:
total+=i
yield total
and this is what I receive:
Traceback (most recent call last):
File "notebook", line 4, in suite
TypeError: 'int' object is not iterable
Upvotes: 0
Views: 67
Reputation: 1121904
Your error is here:
for i in n:
n
is an integer and not an iterable. Perhaps you wanted to use xrange()
(Python 2 only) or range()
(recommended on Python 3) here:
for i in range(n):
Note that this starts iteration at 0, not 1 (up to and including n - 1
). You could either use range(1, n + 1)
, or simply add 1 to your sum:
def suite(n):
total = 0
for i in range(n):
total += i + 1
yield total
This hasn't really got anything to do with generators; wether or not you used yield
, trying to loop over a plain int
object doesn't work either way.
Upvotes: 4
Reputation: 4654
Because your function declaration doesn not correspond with for loop. You cannot iterate over integer, you should use some iterable instead. The simplest way is to use range:
The correct version is:
def suite(n):
total = 0
for i in range(n):
total += i
yield total
>>>suite(6)
Or, you can do another change to yield sum of some iterable:
def suite(iterable):
total = 0
for i in iterable:
total += i
yield total
>>>suite([1,2,3])
Upvotes: 1
Reputation: 37509
Use range to create an iterator to use in your for
loop:
def suite(n):
total = 0
for i in range(1, n+1):
total+=i
yield total
Upvotes: 0