学进去-教育应平等而普惠
试题
类型:操作题
难度系数:0.85
所属科目:高中信息技术
井字棋,英文名叫 Tic-Tac-Toe,是一种在 3*3 格子上进行的连珠游戏。游戏需要的工具仅为纸和笔,然后由分别代表 O 和 X 的两个游戏者轮流在格子里留下标记,任意三个标记形成一条直线,则为获胜。现编写程序实现模拟井字棋的人机对弈。
(1)下图函数可实现创建默认的井字棋棋盘(规定双方分别为-1 和 1,空格用 0 表示)。
def create_board(size=3):
       return ____
下列不能填入横线处实现功能的是
A.[[0] * size for _ in range(size)]
B.[[0] * size] * size
C.[[0 for _ in range(size)] for _ in range(size)]
(2)现编写函数实现自动寻找当前状态下的最优下法。请补全代码。
def minimax(board, player, memo):
       key = str(board) + str(player)
       if key in memo: return memo[key]
       if game_over(board): ①____
       if player == 1:
             max_eval = -float('inf')
             for i in range(len(board)):
                    for j in range(len(board)):
                           if board[i][j] == 0:
                                 board[i][j] = player
                                 eval = ②____
                                 board[i][j] = 0
                                 max_eval = max(max_eval, eval)
                                 memo[key] = max_eval
                           return max_eval
       else:
             #处理另一方的状态,代码略
def find_best_move(board, player):
       memo = {}
       best_eval = -float('inf') if player == 1 else float('inf')
       best_move = None
       for i in range(len(board)):
             for j in range(len(board)):
                    if board[i][j] == 0:
                           board[i][j] = player
                                 eval = minimax(board, -1 if player == 1 else 1, memo)
                           board[i][j] = 0
                           if   ____:
                                 best_eval = eval
                                 best_move = (i, j)
       return best_move
(3)小余同学提出以上代码中 memo 变量应作为返回值传递否则无法实现优化效果。你同意这种说法吗?____(同意/反对)。若同意,请给出解决方案,若反对,请写出你的理由。
(4)以下是主程序代码,请补全。
def print_board(board): #打印棋盘,代码略
def is_winner(board, player): #判断某个玩家是否为赢家,代码略
def game_over(board): #判断游戏是否结束,代码略
def evaluate(board):
       if is_winner(board, 1): return 1
       elif is_winner(board, -1): return -1
       else: return 0
____
player=1
print_board(board)
while not game_over(board):
       print(f"玩家{'X' if player == 1 else 'O'}的回合:")
       if player==1:
             row, col = ②____
       else:
             row, col=input().split(",")
       board[row][col] = player
       print_board(board)
       player = -1 if player == 1 else 1
       if is_winner(board, 1):
             print("玩家 X 赢了!")
       elif: is_winner(board, -1):
             print("玩家 O 赢了!")
       else:
             print("游戏结束,平局!")
编辑解析赚收入
收藏
|
有奖纠错

同类型试题

优质答疑

y = sin x, x∈R, y∈[–1,1],周期为2π,函数图像以 x = (π/2) + kπ 为对称轴
y = arcsin x, x∈[–1,1], y∈[–π/2,π/2]
sin x = 0 ←→ arcsin x = 0
sin x = 1/2 ←→ arcsin x = π/6
sin x = √2/2 ←→ arcsin x = π/4
sin x = 1 ←→ arcsin x = π/2

用户名称
2019-09-19

y = sin x, x∈R, y∈[–1,1],周期为2π,函数图像以 x = (π/2) + kπ 为对称轴
y = arcsin x, x∈[–1,1], y∈[–π/2,π/2]
sin x = 0 ←→ arcsin x = 0
sin x = 1/2 ←→ arcsin x = π/6
sin x = √2/2 ←→ arcsin x = π/4
sin x = 1 ←→ arcsin x = π/2

用户名称
2019-09-19
我要答疑
编写解析
解析:

奖学金将在审核通过后自动发放到帐

提交
我要答疑
我要答疑:
提交