2014-11-19 2 views
0

Поэтому у меня есть функция, которая использует, если заявления и имеет параметр массива 3х3 (в питон 3.3.5)Если заявления, работающие с массивом 3x3 не работает должным образом

def checkDiagonals (game_board): 
     match = 0 
     if game_board[0][0]==game_board[1][1] and game_board[0][1]==game_board[2][2] and game_board[1][1]==game_board[2][2]: #checks if diagonals equal each other 
        match = game_board[0][0] 
        if match == " ": 
         match = "NO WINNER" 

     match = 0 
     if game_board[0][2]==game_board[1][1] and game_board[0][2]==game_board[2][0]: 
        match = game_board[0][0] 
        if match == " ": 
         match = "NO WINNER" 
     return (match) 

Проблема заключается в том,

print (checkDiagonals([["X", " ", " "], [" ", " ", " "], [" ", " ", " "]])) 

дает X, когда он должен давать 0 или NO WINNER. Кто-нибудь хочет дать мне подсказку, почему это так? Я просто этого не вижу.

+0

Второй 'if' оценивает значение' True'. Антидиагоны - все равно '' ''. Проблема в том, что после этого вы устанавливаете 'match = game_board [0] [0]', когда вы должны установить 'match = game_board [0] [2]' (я думаю ...) – Alec

ответ

1

Перейдем ко второй половине вашей функции.

match = 0 
if game_board[0][2]==game_board[1][1] and game_board[0][2]==game_board[2][0]: 
    match = game_board[0][0] 
    if match == " ": 
     match = "NO WINNER" 
return (match) 

Во-первых, match = 0. Это безоговорочно сбрасывает match в 0. Это красный флаг, потому что он перезаписывает все, что было в первой половине.

Далее, заявление if.

if game_board[0][2]==game_board[1][1] and game_board[0][2]==game_board[2][0]: 

Если подставить в значениях этих позиций борту, мы получаем:

if " "==" " and " "==" ": 

Все позиции проверяются пробелы. Заявление if выполнено успешно. Это означает, что мы переходим к следующему назначению.

match = game_board[0][0] 

Ну, значение позиции 0,0 - «X». Это эквивалентно:

match = "X" 

Вот почему match заканчивается как «X». Последующая проверка if match == " " терпит неудачу, поэтому ничего больше не происходит. match остается «X», а не «NO WINNER».


Прогулка по коду шаг за шагом выявила по меньшей мере две проблемы. Один из них заключается в том, что match перезаписан, поэтому результаты первой диагональной проверки теряются. Другим является то, что он захватывает письмо с неправильного квадрата.

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