首页 > 解决方案 > Python棋盘游戏网格[数组和列表问题]

问题描述

grid = [[' --- --- --- '], ['| 1 | 2 | 3 |'],
        [' --- --- --- '], ['| 4 | 5 | 6 |'],
        [' --- --- --- '], ['| 7 | 8 | 9 |'],
        [' --- --- --- ']] 

def board():
    for i in grid:
        print(''.join(i) 

def player():
    x = 0
    y = 0
    player1 = input("Enter Player1 move : ")
    for i in grid:
        for j in i:
            if j == player1:
                grid[1][1] = 'X'
    board()

player()

输出:

 --- --- --- 
| 1 | 2 | 3 |
 --- --- --- 
| 4 | 5 | 6 |
 --- --- --- 
| 7 | 8 | 9 |
 --- --- --- 

虽然代码尚未完成,但我的问题是,网格中的数字在应该根据用户输入进行更改时并没有改变..我做错了什么!?:(

标签: pythonpython-3.xlistprinting

解决方案


再想一想,我看到您无论如何都在将字符串与字符串进行比较,所以这里的问题是您的j变量从未假设网格中的所有数值(即 1、2、3 等)。更好的方法是以不同的方式定义网格并更改打印方式。

您首先在网格的开头和结尾定义要打印的图案。然后遍历网格的行并创建要打印的字符串:

startEnd = ' --- --- --- '
grid2 = [['1', '2', '3'],['4', '5', '6'],['7', '8', '9']]

def board():
    print (startEnd)
    for row in grid2:
        s = '| {0} | {1} | {2} |'.format(row[0], row[1], row[2])
        print(s)        
    print (startEnd)

def player():
    x = 0
    y = 0
    player1 = raw_input("Enter Player1 move : ")
    for i in grid2:
        for j in i:
            if j == player1:
                grid2[1][1] = 'X'
    board()

player()

输出是:

 --- --- ---
| 1 | 2 | 3 |
| 4 | X | 6 |
| 7 | 8 | 9 |
 --- --- ---

推荐阅读