[英]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.