Skip to main content
 首页 » 编程设计

python之Tic Tac Toe – 输出打印额外的一行

2025年05月04日12yyy_WW

Write the game Tic Tac Toe. This game involves two players, where each player takes a turn to place either a X or an O (depending on the player) in a 2-dimensional grid. The x and y coordinates lie within the range [0-2] (inclusive). A player (X or O) can win if they have 3 in a row, column or diagonal.

程序几乎是正确的,当“X”或“O”获胜时,程序给出了正确的输出,即在“X 获胜!”之前不打印一个空行。或'O wins',但是,程序在绘制时在打印'Draw'之前打印一个空行,预期的输出不应该在打印'Draw'之前打印一个空行。我不知道如何修复它。

def print_matric(eri): 
    for j in range(0,3): 
        for i in range(0,3): 
            if eri[i][j]==-1: 
                print(" ",end="") 
            if eri[i][j]==0: 
                print("O",end=""); 
            if eri[i][j]==1: 
                print("X",end=""); 
            if not i==2: 
                print("|",end=""); 
        print() 
        # prints ("_ _ _") two times only not third time 
        if not j==2: 
            print("-----",end="") 
        print() 
def compute(eri): 
    if eri[0][0]== eri[0][1] and eri[0][1] == eri[0][2] and eri[0][0] != -1: 
        return eri[0][0] 
    if eri[1][0]== eri[1][1] and eri[1][1] == eri[1][2] and eri[1][0] != -1: 
        return eri[1][0] 
    if eri[2][0]== eri[2][1] and eri[2][1] == eri[2][2] and eri[2][0] != -1: 
        return eri[2][0] 
    if eri[0][0]== eri[1][0] and eri[1][0] == eri[2][0] and eri[0][0] != -1: 
        return eri[0][0] 
    if eri[0][1]== eri[1][1] and eri[1][1] == eri[2][1] and eri[0][1] != -1: 
        return eri[0][1] 
    if eri[0][2]== eri[1][2] and eri[1][2] == eri[2][2] and eri[0][2] != -1: 
        return eri[0][2] 
    if eri[0][0]== eri[1][1] and eri[1][1] == eri[2][2] and eri[0][0] != -1: 
        return eri[0][0] 
    if eri[0][2]== eri[1][1] and eri[1][1] == eri[2][0] and eri[0][2] != -1: 
        return eri[0][2] 
    return -1 
def find_whether_empty(eri): 
    for j in range(0,3): 
        for i in range(0,3): 
            if eri[j][i]==-1: 
                return 1 
    return 0 
eri = [[-1,-1,-1],[-1,-1,-1],[-1,-1,-1]] 
count=0 
while True: 
    a,b = input().split() 
    a=int(a) 
    b=int(b)   
    if a<0 or a>2 or b<0 or b>2: 
        print("\ncheck your coordinates and enter again") 
        continue 
    if not eri[a][b]==-1: 
        print("\nposition already occupied, please enter again") 
        continue 
    if count%2==0: 
        eri[a][b]=1 
    else: 
        eri[a][b]=0 
    count=count+1 
    if compute(eri)==-1: 
        print()   
    x=compute(eri) 
    if not x==-1: 
        if x==0: 
            print("O wins!\n") 
        else: 
            print("X wins!\n") 
    if not find_whether_empty(eri): 
        print("Draw\n") 
        print_matric(eri) 
        break 
    print_matric(eri) 
    if not x==-1: 
        break 

预期输出:

0 0                
 
X| | 
----- 
 | | 
----- 
 | | 
 
1 1 
 
X| | 
----- 
 |O| 
----- 
 | | 
 
1 0 
 
X|X| 
----- 
 |O| 
----- 
 | | 
 
2 0 
 
X|X|O 
----- 
 |O| 
----- 
 | | 
 
0 2 
 
X|X|O 
----- 
 |O| 
----- 
X| | 
 
0 1 
 
X|X|O 
----- 
O|O| 
----- 
X| | 
 
2 1 
 
X|X|O 
----- 
O|O|X 
----- 
X| | 
 
2 2 
 
X|X|O 
----- 
O|O|X 
----- 
X| |O 
 
1 2 
Draw 
 
X|X|O 
----- 
O|O|X 
----- 
X|X|O 

实际输出:

0 0 
 
X| |  
----- 
 | |  
----- 
 | |  
 
1 1 
 
X| |  
----- 
 |O|  
----- 
 | |  
 
1 0 
 
X|X|  
----- 
 |O|  
----- 
 | |  
 
2 0 
 
X|X|O 
----- 
 |O|  
----- 
 | |  
 
0 2 
 
X|X|O 
----- 
 |O|  
----- 
X| |  
 
0 1 
 
X|X|O 
----- 
O|O|  
----- 
X| |  
 
2 1 
 
X|X|O 
----- 
O|O|X 
----- 
X| |  
 
2 2 
 
X|X|O 
----- 
O|O|X 
----- 
X| |O 
 
1 2 
 
Draw 
 
X|X|O 
----- 
O|O|X 
----- 
X|X|O 

请您参考如下方法:

只需删除这两行注释,并添加仅在游戏未结束时运行的print():

if count%2==0: 
    eri[a][b]=1 
else: 
    eri[a][b]=0 
count=count+1 
# if compute(eri)==-1:  # REMOVED THESE 
#     print()           # REMOVED THESE 
x=compute(eri) 
if not x==-1: 
    if x==0: 
        print("O wins!\n") 
    else: 
        print("X wins!\n") 
elif not find_whether_empty(eri):  # CHANGED if -> elif 
    print("Draw\n") 
    print_matric(eri) 
    break 
else:        # ADDED THESE 
    print()  # ADDED THESE 

Then it will give the correct output when drawn:

...... 
...... 
O|X|  
----- 
X|O|O 
----- 
X| |X 
 
1 2 
 
O|X|  
----- 
X|O|O 
----- 
X|O|X 
 
2 0 
Draw 
 
O|X|X 
----- 
X|O|O 
----- 
X|O|X