如何简化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.")
代码说明
- 字典映射:将十位数字、世纪数字直接对应到目标名称,彻底替代重复的区间判断逻辑。
- 数值计算:
- 世纪计算:
(year // 100) + 1是世纪计算的通用规则,适配1800-1950的范围。 - 年代十位计算:
(year // 10) % 10提取年份的十位数字(如1872→7,1905→0)。
- 世纪计算:
- 输入校验:增加异常处理和范围验证,避免非法输入导致程序出错。
扩展优化
如果后续需要扩大年份范围,仅需补充century_map中的对应关系(如21世纪对应"Twenty-First Century"),核心逻辑无需修改。
内容的提问来源于stack exchange,提问作者Vanessa
相关产品推荐
相关产品推荐

