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

如何简化从p11到p55的长elif判断链?并求反向操作讲解

简化多条件判断与反向逻辑实现

一、正向逻辑:简化elif判断链

原来的代码需要逐个判断p11到p55是否为"+",匹配后赋值对应的loc。可以通过遍历变量规则来简化,不用写几十个elif:

方法1:利用变量名动态查找(适合快速改造)

通过循环生成目标变量名,从局部/全局作用域中获取变量值进行判断:

loc = None
# 遍历1-5行、1-5列,生成pXX格式的变量名
for row in range(1, 6):
    for col in range(1, 6):
        var_name = f"p{row}{col}"
        # 从局部作用域取变量,全局变量则替换为globals()
        if locals().get(var_name) == "+":
            loc = row * 10 + col
            break
    if loc is not None:
        break

找到第一个匹配的"+"后立即停止循环,和原elif逻辑完全一致。

方法2:使用字典管理变量(推荐,更易维护)

把所有pXX变量存入字典,直接遍历键值对,代码可读性和可维护性更高:

# 先将变量整理到字典中
p_vars = {
    "p11": p11, "p12": p12, "p13": p13, "p14": p14, "p15": p15,
    "p21": p21, "p22": p22, "p23": p23, "p24": p24, "p25": p25,
    "p31": p31, "p32": p32, "p33": p33, "p34": p34, "p35": p35,
    "p41": p41, "p42": p42, "p43": p43, "p44": p44, "p45": p45,
    "p51": p51, "p52": p52, "p53": p53, "p54": p54, "p55": p55,
}

loc = None
for var_name, value in p_vars.items():
    if value == "+":
        loc = int(var_name[1:])  # 提取变量名后两位转为数字
        break

这种方式避免了动态查找作用域变量,后续调整变量范围只需修改字典即可。

二、反向逻辑:根据loc设置对应变量

反向操作即已知loc的值,将对应的pXX变量设为"+",同样有两种实现方式:

方法1:动态修改变量

# 假设loc为已知值,比如23
row = loc // 10
col = loc % 10
var_name = f"p{row}{col}"
# 修改局部变量用locals(),全局变量用globals()
locals()[var_name] = "+"

方法2:通过字典修改(推荐)

如果用字典管理变量,直接操作字典更安全可控:

# 假设loc=45
target_var = f"p{loc//10}{loc%10}"
p_vars[target_var] = "+"
# 若需要同步到原独立变量,可补充赋值:p45 = p_vars["p45"]

内容的提问来源于stack exchange,提问作者w1ndnd

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 14:42:21