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

Python整数or多值判断错误,寻求更符合Pythonic规范的实现方案

错误原因说明

你原始代码的逻辑问题出在or运算符的优先级上:model == 3002 or 3003 会被解析为 (model == 3002) or (3003),而非你预期的 model == 3002 or model == 3003。由于非0整数在Python中布尔值为True,所以第一个if判断永远成立,因此永远输出300X。

优化后的Pythonic实现

你的第一种写法用in判断成员关系已经是正确的多值匹配写法,主要问题是存在大量重复代码,我们可以通过配置与逻辑分离的思路优化,完全消除重复,同时方便后续扩展:

import itertools

# 提前定义所有型号对应的配置,后续新增型号仅需修改此处
MODEL_CONFIG = {
    (3002, 3003): {
        "range_end": 1001,
        "cycle_pattern": ["C", "C", "A", "A", "B", "B"],
        "group_name": "300X"
    },
    (4003, 4004): {
        "range_end": 2001,
        "cycle_pattern": ["C", "C", "C", "C", "A", "A", "A", "A", "B", "B", "B", "B"],
        "group_name": "400X"
    }
}

model = 4004
cycle_dict = None

# 遍历配置匹配对应型号
for model_group, config in MODEL_CONFIG.items():
    if model in model_group:
        print(f"model be {config['group_name']}")
        # 如果需要打印具体型号,可加下面这行
        # print(f"this is a {model}")
        cycle_dict = {
            x: z 
            for x, z in zip(
                range(1, config["range_end"]), 
                itertools.cycle(config["cycle_pattern"])
            )
        }
        break
else:
    # 所有分组都没匹配到触发else
    print("model type not covered")

if cycle_dict:
    print("cycle_dict : ", cycle_dict)

方案优势

  1. 完全符合DRY原则,没有重复的生成逻辑,代码量大幅减少
  2. 配置集中管理,后续新增型号不用修改判断逻辑,仅需在MODEL_CONFIG中添加对应分组和参数即可
  3. 可读性更强,所有型号的参数规则一目了然

如果你的型号命名规则统一(比如前三位固定为300/400),还可以进一步简化匹配逻辑,无需枚举所有型号:

model_prefix = str(model)[:3]
if model_prefix == "300":
    # 对应300X逻辑
elif model_prefix == "400":
    # 对应400X逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 17:57:02