Welcome to the Treehouse Community
Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.
Looking to learn something new?
Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.
Start your free trialLeo Yun Tao
15,956 PointsHelp in OOP Board in challenge Task 2 of 2
I am stuck in the challenge task 2 of 2, when I submit my code, it says 'Tic Tac Toe' Isn't iterable, what did I do wrong, and how do I solve this problem
class Board:
def __init__(self, width, height):
self.width = width
self.height = height
self.cells = []
for y in range(self.height):
for x in range(self.width):
self.cells.append((x, y))
class TicTacToe(Board):
def __init__(self,width=3,height=3):
super().__init__(width = 3,height = 3)
for x,y in enumerate(self.cells):
print(x and y)
2 Answers
diogorferreira
19,363 PointsHey, I'd recommend watching the end of the Emulating Built-ins video Kenneth explains it really well using iter(). But you're really close it's just that in the question they ask you to make all board instances iterable. So you'd need to define a new method for your Board Class called iter().
- Once you've defined that method it's quite simple just loop through all the instance's cells (throught self.cells)
- Then you can use
yield
to return all the values you looped through - I recommend reading this post about generators to understand more
class Board:
def __init__(self, width, height):
self.width = width
self.height = height
self.cells = []
for y in range(self.height):
for x in range(self.width):
self.cells.append((x, y))
# Here is the code added
def __iter__(self):
for cell in self.cells:
yield cell
class TicTacToe(Board):
def __init__(self):
super().__init__(width = 3,height = 3)
Tapiwanashe Taurayi
15,889 Pointsclass Board: def init(self, width, height): self.width = width self.height = height self.cells = [] for y in range(self.height): for x in range(self.width): self.cells.append((x, y))
# Here is the code added
def __iter__(self):
for cell in self.cells:
yield cell
class TicTacToe(Board): def init(self): super().init(width = 3,height = 3)
Leo Yun Tao
15,956 PointsLeo Yun Tao
15,956 Pointsthanks for helping me!