Python-一个if语句使网格全部为“X”而不是侧面

时间:2018-03-15 20:02:44

标签: python

我已经制作了一个打印10x10 O网格的代码。我想让所有的方面都显示“X”,所以我使用了一些if语句。前两个工作正常,但第三个工作使网格中的所有内容都为“X”,我不知道为什么。

size = 10

def main():
   setupBoard(size)
   printBoard()

def setupBoard(size):
   global board
   board = [[0] * size for _ in range(size)]
   for row in range(len(board)):
       for col in range(len(board)):
           if board[row][col] == board[0][col]: #top
               board[row][col] = "X"
           if board[row][col] == board[row][0]: #left
               board[row][col] = "X"
           if board[row][col] == board[size-1][size-1]: #right
               board[row][col] = "X"
           else:
               board[row][col] = "O"

def printBoard():
   for row in range(len(board)):
       print("")
       for col in range(len(board)):
           print(board[row][col], end = "  ")

main()

输出:

O O O O O O O O O O X X X X X X X X X
O X X X X X X X X X
O X X X X X X X X X
O X X X X X X X X X
O X X X X X X X X X
O X X X X X X X X X
O X X X X X X X X X
O X X X X X X X X X
O X X X X X X X X X

当我想要输出时:

X X X X X X X X X X X
X O O O O O O O O X
X O O O O O O O O X
X O O O O O O O O X
X O O O O O O O O X
X O O O O O O O O X
X O O O O O O O O X
X O O O O O O O O X
X O O O O O O O O X
X X X X X X X X X X X

我不知道出了什么问题,而且我一直在愚弄一段时间试图弄清楚什么是错的。帮助将不胜感激。

2 个答案:

答案 0 :(得分:3)

你的问题是这些测试:

if board[row][col] == board[0][col]: #top

这实际上并未测试您当前的row, col是否位于第一行。它测试的是,当前row, col0)中的任何值都与该列顶部的任何值相同(XO

你只想这样做:

if (row, col) == (0, col):

或者更简单:

if row == 0:

接下来的问题是你已经尝试将底部和右部放在一起进行单一测试。但这意味着您只需要在右下角放置X,而不是在每个底部和每个右侧插槽中放置if。您需要两个if语句或or语句,其中包含if

最后,您有一堆单独的else语句。这意味着O会附加到最后一个,而不是所有这些。换句话说,不在右侧的所有内容,您都会设置为X,这将覆盖您为上边缘和左边缘设置的elif。要解决此问题,您需要使用ifif row == 0: # top board[row][col] = "X" elif col == 0: # left board[row][col] = "X" elif row == size-1: # bottom board[row][col] = "X" elif col == size-1: # right board[row][col] = "X" else: board[row][col] = "O" 链接在一起。

全部放在一起:

or

或者你可以if row == 0 or col == 0 or row == size-1 or col == size-1: board[row][col] = "X" else: board[row][col] = "O" 将所有这些条件放在一起,因为你对每种情况做同样的事情:

{{1}}

答案 1 :(得分:0)

这不应该是答案,因为它没有专门回答你的问题 - 但只是给你另一个视角,你可以通过这样做而不必使用如果声明,并摆脱两个级别的嵌套。通常在Python中,有一种比通过/ nexting每个项目更好的方法。

size = 10


def main():
    board = setup_board(size)
    print_board(board)


def setup_board(size):
    board = [[0] * size for _ in range(size)]
    board[0] = ['X'] * size
    board[-1] = ['X'] * size
    for i in range(1, size - 1):
        row = ['O'] * size
        row[0] = 'X'
        row[-1] = 'X'
        board[i] = row
    return board


def print_board(board):
    for row in range(len(board)):
        print("")
        for col in range(len(board)):
            print(board[row][col], end="  ")


main()