(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


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

