编译环境:PyCharm Community Edition 2022.3.2
代码实现:
import random # 初始化井字棋棋盘,用列表嵌套列表,row列表表示一行,row列表中(一行中)有三个空格元素,共循环三次(三行) board = [] for _ in range(3): row = [] for _ in range(3): row.append(" ") board.append(row) # 打印井字棋棋盘,row表示一行(一个含三个元素的列表),cell表示一行中的每个元素,在每个元素后面加|,表示井字棋中的竖线,遍历完一行输出------表示横线 def print_board(): for row in board: for cell in row: print(cell, end=" | ") print("\n---------") # 判断游戏是否结束 def gameover(): # 检查横向、纵向和斜线是否有一方胜利 for i in range(3): if board[i][0] == board[i][1] == board[i][2] != " ": # 检查第i行的元素是否都相同,且不是空格 return True if board[0][i] == board[1][i] == board[2][i] != " ": # 检查第i列的元素是否都相同且不是空格 return True if board[0][0] == board[1][1] == board[2][2] != " ": # 检查正对角线 return True if board[0][2] == board[1][1] == board[2][0] != " ": # 检查反对角线 return True # 检查是否平局 if all(board[i][j] != " " for i in range(3) for j in range(3)): return True # 以上都不成立时返回false return False # 用户下棋 def user_move(): hang = "上中下" lie = "一二三" # 输入两个方位表示用户要下棋的位置,利用字符串的检索来定位 while True: move = input("请输入您的下棋位置(例如:中二):") if len(move) == 2 and move[0] in hang and move[1] in lie: # 合法性检查 row = hang.index(move[0]) # 将 move【0】(第一个字符)在hang这个字符串中的序列号作为行号在棋盘列表board中定位 col = lie.index(move[1]) # 将 move【1】(第二个字符)在lie这个字符串中的序列号作为列号在棋盘列表board中定位 if board[row][col] == " ": # 当前位置为空时,将此处元素改为0 board[row][col] = "O" break # break的位置,只有成功移动,才会终止无限循环 else: print("该位置已经有棋子了,请重新输入。") else: print("请输入合法的位置。") # 电脑下棋(随机位置) def computer_move(): while True: row = random.randint(0, 2) col = random.randint(0, 2) if board[row][col] == " ": board[row][col] = "X" break # 游戏主循环 while True: print_board() user_move() if gameover(): print_board() print("游戏结束,您获胜!") break print_board() print("电脑正在思考...") computer_move() if gameover(): print_board() print("游戏结束,电脑获胜!") break