You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何优化井字棋代码中的重复变量赋值逻辑

井字棋代码优化方案

一、优化位置状态存储

原代码中大量重复的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 16:40:39