Reputation: 13
I've been trying to figure out this problem for multiple hours and still no luck. I'm in the process of writing Connect4 in Python for a school assignment and I need a function that checks if the board is full.
Here is my init function
def __init__( self, width, height ):
self.width = width
self.height = height
self.data = [] # this will be the board
for row in range( self.height ):
boardRow = []
for col in range( self.width ):
boardRow += [' ']
self.data += [boardRow]
My repr function
def __repr__(self):
#print out rows & cols
s = '' # the string to return
for row in range( self.height ):
s += '|' # add the spacer character
for col in range( self.width ):
s += self.data[row][col] + '|'
s += '\n'
s += '--'*self.width + '-\n'
for col in range( self.width ):
s += ' ' + str(col % 10)
s += '\n'
return s
And what I have for my isFull function
def isFull(self):
# check if board is full
for row in range(0,(self.height-(self.height-1))):
for col in range(0,self.width):
if (' ') not in self.data[row][col]:
return True
I want to check and see if there this ' ' (a space) within the data list. At least I think that's my problem, I'm not experienced in python so I may be misreading my issue. If anyone has any ideas I'm glad to listen.
Upvotes: 1
Views: 979
Reputation: 7545
So if there is any space, it means the board is not full?
Various versions:
# straightforward but deep
def is_full(self):
for row in self.data:
for cell in row:
if cell == ' ':
return False
return True
# combine the last two
def is_full(self): # python functions/methods are usually lower case
for row in self.data: # no need to index everything like c
if any(cell == ' ' for cell in row): # any/all are convenient testers
return False # if you find even one, it's done.
return True # if you couldn't disqualify it, then it looks full
# one line, not especially readable
def is_full(self):
return not any(cell == ' ' for row in d for cell in row)
Upvotes: 2
Reputation: 9117
Your logic for isFull
method is incorrect.
In your current code, you are returning True
from isFull
as soon as you found a non-empty cell. That is incorrect. You should do the opposite.
You should be doing what kobejohn had posted earlier: to return False
as soon as you found an empty cell.
And in Python you should work without indices if possible, and use Python natural looping, like in the code kobejohn had posted.
Upvotes: 1