Python Ошибка подсчитывания минного тральщика - PullRequest
0 голосов
/ 07 апреля 2020

Я нахожусь в процессе кодирования игры тральщика на python. У меня проблемы с моей функцией countAdjacentMines в python. Я пытаюсь подсчитать количество мин вокруг данной ячейки в двухмерном списке следующим образом:

L = [
['','',''],
['x','',''],
['x','','']
]

Когда я пытаюсь запустить свой код для строки 1, столбец 2, я должен получить 1, поскольку есть только 1 мой в 3x3 вокруг строки 1 столбца 2, но моя функция возвращает 2. Как мне go узнать о том факте, что когда python 2d Lists получают значение типа L [-1] [1], -1 просто не имеет считать что-нибудь вместо позиции len (lis) -1?

вот мой код:

def countAdjacentMines(lis,row,col):
    total = 0
        try: 
            if lis[row-1][col-1] == 'x':
                total+=1
        except IndexError:
            pass               
        try: 
            if lis[row-1][col] == 'x':
                total+=1
        except:
            pass
        try: 
            if lis[row-1][col+1] == 'x':
                total+=1
        except:
            pass
        try: 
            if lis[row][col-1] == 'x':
                total+=1
        except:
            pass
        try: 
            if lis[row][col+1] == 'x':
                total+=1
        except:
            pass
        try: 
            if lis[row+1][col-1] == 'x':
                total+=1
        except:
            pass
        try: 
            if lis[row+1][col] == 'x':
                total+=1
        except:
            pass
        try: 
            if lis[row+1][col+1] == 'x':
                total+=1
        except:
            pass
        return total

L = [
['','',''],
['x','',''],
['x','','']
]

print(countAdjacentMines(L,0,1))

1 Ответ

1 голос
/ 07 апреля 2020

Я не уверен на 100%, что понимаю вопрос, но если я все сделал правильно, вы хотите, чтобы python не go до последней строки из-за индекса -1 в списке?

Если так попробуйте использовать функцию max, как это!

L[max(0,row-1)][1]

РЕДАКТИРОВАТЬ: мое старое решение было поддельным и подсчитал количество клеток, которые вы хотели игнорировать, поэтому я удалил его. Вместо этого, что вы можете сделать, это добавить и к вашему, если это уместно, например, так:

def countAdjacentMines(lis,row,col):
    total = 0        
    if ((row > 0 and col > 0) and lis[row-1][col-1] == 'x'):
        total+=1               
    if  (row > 0 and lis[row-1][col] == 'x'):
        print("here")
        total+=1
    if ((row > 0 and col < len(lis)-1) and lis[row-1][col+1] == 'x'):
        total+=1
    if (col > 0 and lis[row][col-1] == 'x'):
        total+=1 
    if (col < len(lis)-1 and lis[row][col+1] == 'x'):
        total+=1
    if ((row < len(lis)-1 and col > 0) and lis[row+1][col-1] == 'x'):
        total+=1
    if (row < len(lis)-1 and lis[row+1][col] == 'x'):
        total+=1
    if ((row < len(lis)-1 and col < len(lis)-1) and lis[row+1][col+1] == 'x'):
        total+=1
    return total

L = [
['','',''],
['x','',''],
['x','','']
]

Это будет работать до тех пор, пока у вас есть квадратная матрица, в противном случае вы можете использовать len (lis [row]) или что-то подобное.

Кроме того, я предлагаю найти другой способ, кроме try, кроме pass для обработки ошибок.

Очарование в четвертый раз?

LAST EDIT: если вы выполняете countAdjacentMines ( L, 2,0) он выводит 1, потому что нет случая подсчитать текущую ячейку, в которой мы находимся, как сейчас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...