如何精简Python月份转换代码,用列表替代冗余变量简化判断?
月份转换代码精简方案
原有代码的核心问题
- 手动定义零散变量存储月份缩写完全冗余,且你手动列变量时已经漏写了
Aug,就算拼成列表判断也会出bug - 冗长的多条件
or拼接可以直接用Python的成员判断运算符in替代,不需要逐个比对 - 原有
while循环位置错误,没有把输入逻辑放进循环体,无法实现持续输入、输入Terminate才退出的效果
优化思路
- 不需要额外定义任何存储月份缩写的变量,直接通过字典的
.keys()方法就能拿到所有合法的月份缩写,不会出现漏写、错写的问题 - 合法性判断逻辑直接简化为「输入既不是合法月份缩写,也不是退出指令
Terminate」时,打印无效提示 - 把输入、校验、转换的逻辑全部放入
while循环,匹配到退出指令时直接跳出循环结束程序
精简后可直接运行的代码
print('To close the program type "Terminate"') def main(): month_convertor = { "Jan": "January", "Feb": "February", "Mar": "March", "Apr": "April", "May": "May", "Jun": "June", "Jul": "July", "Aug": "August", "Sep": "September", "Oct": "October", "Nov": "November", "Dec": "December", } while True: user_input = input("Please enter the first 3 digits of the month: ") if user_input == "Terminate": break if user_input not in month_convertor: print("Not a valid key") continue print(month_convertor[user_input]) if __name__ == "__main__": main()
进一步压缩长度的写法
如果追求更短的代码,可以直接利用字典.get()方法的默认返回值特性,连单独的合法性判断都可以合并:
print('To close the program type "Terminate"') month_convertor = {"Jan":"January","Feb":"February","Mar":"March","Apr":"April","May":"May","Jun":"June","Jul":"July","Aug":"August","Sep":"September","Oct":"October","Nov":"November","Dec":"December"} while True: i = input("Please enter the first 3 digits of the month: ") if i == "Terminate": break print(month_convertor.get(i, "Not a valid key"))这种写法里
.get(i, "Not a valid key")会在键存在时返回对应月份全称,不存在时直接返回你设置的默认提示文本,逻辑完全一致,代码长度更短。
内容的提问来源于stack exchange,提问作者Mr_Adr1an_Bandit
相关产品推荐
相关产品推荐

