2013-12-10 5 views
1

Я пытался выяснить эту проблему в течение нескольких часов и до сих пор не повезло. Я участвую в написании Connect4 в Python для школьного задания, и мне нужна функция, которая проверяет, заполнена ли доска.Python Проверьте список 2d для пустых строк?

Вот мой 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] 

Моей магнезия функции

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

Итак, в чем проблема? Какой метод не работает? Как это не работает? И, пожалуйста, сравните ваш код. Кроме того, что это за "диапазон (0, (self.height- (self.height-1)))? Это то же самое, что и 'range (0,1)' – justhalf

+0

Мне нужна функция, которая может проверить, есть ли место в любом месте в списке 2d. – user3067803

+0

Возможно, вы захотите опубликовать свой код в [CodeReview] (http: // codereview.stackexchange.com/) после того, как вы работаете (не с основными ошибками/ошибками) и получите некоторые идеи для улучшения. – KobeJohn

ответ

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) 
+0

Я честно не могу вас поблагодарить. Я не очень программист, поэтому я пытался понять это в течение нескольких часов, и это сработало отлично. Еще раз спасибо – user3067803

+0

отлично! Я был бы признателен, если бы вы могли официально принять ответ. Теплые пушистики вокруг. – KobeJohn

1

Ваша логика для isFull метода является неправильным.

В вашем текущем коде вы возвращаете True от isFull, как только обнаружили непустую ячейку. Это неверно. Вы должны сделать наоборот.

Вы должны делать то, что ранее написал kobejohn: вернуть False, как только вы нашли пустую ячейку.

И в Python вы должны работать без индексов, если это возможно, и использовать естественный цикл Python, как в коде kobejohn.

Смежные вопросы