首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python if语句使网格成为所有的"X“,而不是仅仅是侧。

Python if语句使网格成为所有的"X“,而不是仅仅是侧。
EN

Stack Overflow用户
提问于 2018-03-15 20:02:44
回答 2查看 108关注 0票数 0

我已经做了一个代码,打印一个10x10的O网格,我想让所有的边显示"X“,所以我使用了一些if语句。前2工作正常,但第三次使所有的网格"X“,我不知道为什么。

代码语言:javascript
复制
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

氧X

氧X

氧X

氧X

氧X

氧X

氧X

氧X

氧X

当我希望它输出时:

X X

X O X

X O X

X O X

X O X

X O X

X O X

X O X

X O X

X X

我不知道出了什么问题,我一直在胡闹一段时间,试图找出出了什么问题。我会感谢你的帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-03-15 20:08:24

你的问题是这些测试:

代码语言:javascript
复制
if board[row][col] == board[0][col]: #top

这实际上并不是测试当前的row, col是否位于最上面的行。它测试当前row, col中的任何值(将是0)与该列顶部的任何值(即XO )相同。

你只想这么做:

代码语言:javascript
复制
if (row, col) == (0, col):

或者,更简单地说:

代码语言:javascript
复制
if row == 0:

下一个问题是,您已经尝试将底部和右边放在一起进行一个测试。但这意味着您只会在右下角放置一个X,而不是在每个底部和每个右边的位置。您要么需要两个if语句,要么需要一个带有orif语句。

最后,您有一堆单独的if语句。这意味着else附加到最后一个,而不是所有它们。换句话说,所有不在右边的东西,都将设置为O,这将覆盖为顶部和左侧边缘设置的X。要解决这个问题,您需要使用elifif链接在一起。

把这一切结合在一起:

代码语言:javascript
复制
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"

或者,您可以将所有这些条件放在一起,因为您对每个条件都做了相同的事情:

代码语言:javascript
复制
if row == 0 or col == 0 or row == size-1 or col == size-1:
    board[row][col] = "X"
else:
    board[row][col] = "O"
票数 3
EN

Stack Overflow用户

发布于 2018-03-15 20:24:50

这不应该是答案,因为它没有具体回答你的问题--但是给你另一个视角,你可以让你的生活变得更容易,这样你就可以完全不用使用if语句,消除两个层次的嵌套。通常在Python中,有一种比使用/下一项更好的方法。

代码语言:javascript
复制
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()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49308261

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档