如何优化井字棋代码中的重复变量赋值逻辑
井字棋代码优化方案
一、优化位置状态存储
原代码中大量重复的p1-p9、c1-c9变量可以用列表统一存储,既减少冗余,又方便后续操作:
# 初始化长度为10的列表(索引0弃用,对应棋盘位置1-9) player_positions = [0] * 10 computer_positions = [0] * 10 # 循环填充每个位置的占据状态(1表示已占据,0表示未占据) for pos in range(1, 10): player_positions[pos] = 1 if pos in playerX else 0 computer_positions[pos] = 1 if pos in computerO else 0
注:如果
playerX的结构是存储位置标记(比如用1代表玩家占据),可保留count逻辑并调整为:player_positions[pos] = playerX.count(pos)
二、简化获胜条件判断
将所有8种获胜组合预先定义为一个列表,通过循环检查每个组合是否全部被玩家或AI占据,避免重复的冗余逻辑:
# 定义所有获胜位置组合 win_combinations = [ (1,2,3), (4,5,6), (7,8,9), # 横向获胜 (1,4,7), (2,5,8), (3,6,9), # 纵向获胜 (1,5,9), (3,5,7) # 对角线获胜 ] winner = 0 # 检查玩家是否获胜 for combo in win_combinations: if player_positions[combo[0]] and player_positions[combo[1]] and player_positions[combo[2]]: winner = 1 break # 玩家未获胜时,检查AI是否获胜 if winner == 0: for combo in win_combinations: if computer_positions[combo[0]] and computer_positions[combo[1]] and computer_positions[combo[2]]: winner = 2 break if winner in (1, 2): break
三、合并优化后的完整代码片段
# 初始化位置状态列表 player_positions = [0] * 10 computer_positions = [0] * 10 for pos in range(1, 10): player_positions[pos] = 1 if pos in playerX else 0 computer_positions[pos] = 1 if pos in computerO else 0 # 定义获胜组合 win_combinations = [ (1,2,3), (4,5,6), (7,8,9), (1,4,7), (2,5,8), (3,6,9), (1,5,9), (3,5,7) ] winner = 0 # 用all()函数简化条件判断 for combo in win_combinations: if all(player_positions[pos] for pos in combo): winner = 1 break if winner == 0: for combo in win_combinations: if all(computer_positions[pos] for pos in combo): winner = 2 break if winner: break
内容的提问来源于stack exchange,提问作者Nathan Sikkema
相关产品推荐
相关产品推荐

