I am still a beginner but does not know why the \"return True\" in a \"for loop\" stop the loop after the first pass. If I use something else than \"return\", everything is fine
You can use the yield
statement. A return
statement stops the function and immediately and returns the value while yield
statement will return the value and but continues where it left.
if side == (0,0):
for (x,y) in (0,1),(0,2),(0,3):
print(King.ok_to_move(self,x,y))
if p.getPiece(x,y)=="" and king.ok_to_move(self,x,y):
yield True
Now use: list(roc_valid(self,cote_x,cote_y))
to get a list of all returned values or just next(roc_valid(self,cote_x,cote_y))
to get only the first value.
Demo:
def func():
for i in xrange(5):
if i % 2:
yield True
...
>>> list(func()) #all returned values
[True, True]
>>> next(func()) #Just the first returned value
True
Related: The Python yield keyword explained