繁体   English   中英

如何减少我的代码的这一部分,使其不重复

[英]How can I reduce this part of my code so that its not repetitive

是否可以减少这部分代码的大小?

for i in range(0,9,3):
    print(board[i], "|", board[i+1], "|", board[i+2])
    if (i<6):
        print("------------")

所以几乎我正在制作一个井字游戏,这是我的井字游戏板的代码。 我多次粘贴这个确切的代码; 因此,为什么我要缩小它的大小。 由于它又长又大,如果出现问题,要纠正所有这些将是一件麻烦事。 所以无论如何有没有办法让它更小/更容易编码? 我试图使它成为一个变量,但它没有用。

如果board的项目是字符串,那么您可以在其中的块上使用str.join()

print('\n------------\n'.join([' | '.join(board[i:i+3]) for i in range(0,9,3)]))

如果board不包含字符串,您可以创建一个新的临时列表

strings = [str(x) for x in board]
print('\n------------\n'.join([' | '.join(strings[i:i+3]) for i in range(0,9,3)]))

但正如 Barmar 所说,如果你在几个地方使用它,你应该把它放在 function

在脚本开头定义function

def print_board(board):
    for i in range(0,9,3):
        print(board[i], "|", board[i+1], "|", board[i+2])
        if (i<6):
            print("------------")

然后只需在要打印电路板的任何地方调用 function

print_board(board)

您可以将网格模板存储在单独的文本文件中,并根据玩家的轮次对其进行更新:

grid.txt

|-|-|-|
| | | |
|-|-|-|
| | | |
|-|-|-|
| | | |
|-|-|-|

代码:

CELLS = {'1': 9, '2': 11, '3': 13, '4': 25, '5': 27, '6': 29, '7': 41, '8': 43, '9': 45}

with open('grid.txt', 'r') as f:
    grid = f.read()

print(grid)
players = ['X', 'O']
while True:
    turn = input(f'{players[0]} make your turn [1-9]: ')
    index = CELLS[turn]
    grid = f'{grid[:index]}{players[0]}{grid[index+1:]}'
    players.reverse()
    print(grid)

玩游戏:

|-|-|-|
| | | |
|-|-|-|
| | | |
|-|-|-|
| | | |
|-|-|-|
X make your turn [1-9]: 5
|-|-|-|
| | | |
|-|-|-|
| |X| |
|-|-|-|
| | | |
|-|-|-|
O make your turn [1-9]: 1
|-|-|-|
|O| | |
|-|-|-|
| |X| |
|-|-|-|
| | | |
|-|-|-|
X make your turn [1-9]: 3
|-|-|-|
|O| |X|
|-|-|-|
| |X| |
|-|-|-|
| | | |
|-|-|-|

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM