如何实现Python月份名称转数字并在while循环中作为整数使用
解决方案
核心思路是先不直接转换输入为整数,而是先处理输入格式,优先匹配月份名称字典,再尝试转换为数字,同时保留完整的错误捕获逻辑。
完整代码实现
monthConversions = { "january": 1, "february": 2, "march": 3, "april": 4, "may": 5, "june": 6, "july": 7, "august": 8, "september": 9, "october": 10, "november": 11, "december": 12 } while True: user_input = input("What is your birth month?\n").strip().lower() month = None # 先尝试匹配月份名称 if user_input in monthConversions: month = monthConversions[user_input] else: # 尝试转换为整数 try: month = int(user_input) except ValueError: print("Error: You must enter a valid month number or name.") continue # 验证月份是否在有效范围 if 1 <= month <= 12: break else: print("Error: You must enter a valid month.") print(f"Valid month selected: {month}")
关键修改说明
- 输入预处理:用
strip()去掉输入前后空格,lower()统一转为小写,用户输入January或DECEMBER都能正常匹配字典。 - 优先匹配名称:先检查输入是否在字典中,避免直接转整数触发
ValueError拦截合法的月份名称。 - 分层错误处理:
- 若输入既不是字典中的名称,也无法转为整数,触发自定义的无效输入提示。
- 若数字不在1-12范围内,保留原有的无效月份提示。
- 保留稳定性:所有异常仅在转换整数时捕获,不会因为随机输入导致程序崩溃。
内容的提问来源于stack exchange,提问作者Q99
相关产品推荐
相关产品推荐

