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

如何简化Python中重复的if/elif语句?附书籍年份分类案例

简化年份分类的重复条件判断

核心思路:用字典映射+数值计算替代重复的if/elif

针对1800-1950年的书籍分类需求,完全可以通过计算年份的世纪和年代特征值,结合字典映射名称消除重复判断,代码更简洁易维护。

具体实现代码

# 定义年代名称映射:十位数字对应英文名称
decade_map = {
    0: "Noughties",
    1: "Tens",
    2: "Twenties",
    3: "Thirties",
    4: "Forties",
    5: "Fifties",
    6: "Sixties",
    7: "Seventies",
    8: "Eighties",
    9: "Nineties"
}

# 定义世纪名称映射:针对1800-1950范围的世纪对应关系
century_map = {
    19: "Nineteenth Century",
    20: "Twentieth Century"
}

# 获取输入并处理
try:
    book_year = int(input('What year was the book written? '))
    # 验证年份范围
    if not (1800 <= book_year <= 1950):
        print("Error: Year must be between 1800 and 1950.")
    else:
        # 计算世纪:年份整除100后加1(18xx→19世纪,19xx→20世纪)
        century = (book_year // 100) + 1
        # 计算年代十位:年份整除10后取余10
        decade_digit = (book_year // 10) % 10
        # 拼接结果输出
        print(f"This book was written in the {century_map[century]}, {decade_map[decade_digit]}")
except ValueError:
    print("Error: Please enter a valid integer year.")

代码说明

  1. 字典映射:将十位数字、世纪数字直接对应到目标名称,彻底替代重复的区间判断逻辑。
  2. 数值计算:
    • 世纪计算:(year // 100) + 1 是世纪计算的通用规则,适配1800-1950的范围。
    • 年代十位计算:(year // 10) % 10 提取年份的十位数字(如1872→7,1905→0)。
  3. 输入校验:增加异常处理和范围验证,避免非法输入导致程序出错。

扩展优化

如果后续需要扩大年份范围,仅需补充century_map中的对应关系(如21世纪对应"Twenty-First Century"),核心逻辑无需修改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 12:52:38