Объяснение для проверки столбцов в списках - PullRequest
0 голосов
/ 11 апреля 2020

Я новичок в Python и вообще программирую. Я пытаюсь написать программу для основной игры TicTacToe. Я нашел некоторый код в Интернете для поиска вертикальных победителей, но мне трудно понять его. Я понимаю, что происходит, когда я измеряю горизонтальные выигрыши в первом для l oop, но я не понимаю, что измеряет для диапазона в диапазоне (len (игра)) и чем он отличается от первого для l oop написано для горизонтальных побед. Любая помощь приветствуется.

game = [[0, 0, 0],
        [0, 0, 0],
        [0, 0, 0]]

def win(current_game):
    for row in game:
        if row.count(row[0]) == len(row) and row[0] != 0: 
            print("Winner")
    for col in range(len(game)):  
        check = []
        for row in game: 
            check.append(row[col])  
            if check.count(check[0]) == len(check) and check[0] != 0:
                print("Winner")

1 Ответ

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

Первый for l oop проходит по каждой строке, подсчитывая, сколько раз появляется первый элемент, и печатает "Winner", если это первое значение заполняет эту строку. Значения, составляющие каждую строку, аккуратно хранятся в их собственном списке, так что это довольно просто.

Второй for l oop делает то же самое, за исключением того, что он проходит по столбцам, и проверка того, соответствует ли одно и то же значение любому из них. Это немного сложнее, потому что значения в столбце распределены по спискам, которые составляют разные строки. Второй for l oop создает временный массив с именем check, а затем третий for l oop (один внутри второго) проходит по каждой строке, получает значение из этой строки, которая является в текущем столбце и добавляет его в список check. Добавление всех значений, составляющих столбец, в один и тот же список позволяет легко проверить, заполняет ли первое значение в этом столбце весь столбец.

Кроме того, оператор if внутри этого третьего * Вместо этого 1013 * l oop должен находиться только во втором for l oop:

for col in range(len(game)):
    check = []
    for row in game:
        check.append(row[col])
    if check.count(check[0]) == len(check) and check[0] != 0:
        print("Winner")

В противном случае, если вы найдете элемент, который не является 0 в первой строке В столбце, массив check будет содержать только один элемент, а check.count(check[0]) будет равен len(check), поэтому будет напечатано "Winner" без проверки остальных элементов в этом столбце.

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