Python One if语句使网格全部为“X”,而不仅仅是sid

2024-03-29 09:44:18 发布

您现在位置: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 X X X X X X X
O X X X X X X X
O X X X X X X X
O X X X X X X X
O X X X X X X X
O X X X X X X X
O X X X X X X X
O 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 X
X O O O O O X
X O O O O O X
X O O O O O X
X O O O O O X
X O O O O O X
X O O O O O X
X O O O O O X
X O O O O O X
X X X X X X X X X X X X X X X

我不知道出了什么事,我一直在胡闹一段时间,想弄清楚出了什么事。我们将不胜感激。你知道吗


Tags: inboard网格forsizelenifmain
2条回答

你的问题在于这些测试:

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

这实际上并不是在测试当前的row, col是否在第一行。它测试当前row, col(将是0)中的任何值与该列顶部的任何值(将是XO)相同。你知道吗

你只想这样做:

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

或者,更简单地说:

if row == 0:

下一个问题是,您试图将底部和右侧放在一个测试中。但这意味着你只需要在右下角放一个X,而不是在每个底部和每个右槽。要么需要两个if语句,要么需要一个if语句和一个or语句。你知道吗


最后,有一堆独立的if语句。这意味着else连接到最后一个,而不是全部。换句话说,不在右边的所有内容都将设置为O,这将覆盖为顶部和左侧边缘设置的X。要解决这个问题,您需要使用elifif链接在一起。你知道吗


综合起来:

if 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"

或者你可以把所有这些条件放在一起,因为你对每个条件都做同样的事情:

if row == 0 or col == 0 or row == size-1 or col == size-1:
    board[row][col] = "X"
else:
    board[row][col] = "O"

这不应该是答案,因为它没有回答你的问题,但只是给你另一个角度,你可以让你的生活更容易这样做,你不必使用if语句在所有,摆脱两个层次的嵌套。通常在Python中,有一种比for/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()

相关问题 更多 >