我一直试图找出这个问题多个小时但仍然没有运气。我正在用Python编写Connect4用于学校作业,我需要一个能够检查电路板是否已满的功能。
这是我的 init 功能
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]
我的 repr 功能
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
我的isFull功能
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
我想查看数据列表中是否有这个''(空格)。至少我认为这是我的问题,我没有python的经验,所以我可能会误解我的问题。如果有人有任何想法,我很高兴听。
答案 0 :(得分:2)
所以如果有空间,就意味着电路板没有充满?
各种版本:
# 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)
答案 1 :(得分:1)
isFull
方法的逻辑错误。
在您当前的代码中,一旦找到非空单元格,就会从True
返回isFull
。那是不对的。你应该做相反的事情。
你应该做kobejohn先前发布的内容:在找到空单元格后立即返回False
。
在Python中你应该尽可能没有索引,并使用Python自然循环,就像kobejohn发布的代码一样。