如何通过用户生日月份输入从导入模块的字典中获取对应键值对
问题描述
我想利用之前收集的用户生日月份输入,从自定义模块的字典里匹配对应的月份与名人键值对并打印到屏幕,但编写代码时遇到了多种错误,比如使用.items()方法时出现ValueError、'function'属性未定义等问题。以下是我编写的代码,请求语法和程序执行方面的帮助:
模块代码(module25)
def famousbirthdays (birthdayMonth): return {"January" : "Mozart", "February" : "Charles Darwin", "March" : "Albert Einstein", "April" : "Elizabeth II", "May" : "Linnaeus", "June" : "Josephine Baker", "July" : "Frida Kahlo", "August" : "Barak Obama", "September" : "Beyonce Knowles", "October" : "Gandhi", "November" : "Marie Curie", "December" : "Emily Dickenson"}
主程序代码
#import function from module from module25 import famousbirthdays #change variable name of previous user input, collected from multiply function (module25), extracting just the month birthdayMonth = birthdayObject.strftime("%m") #use items() method and search for birthdayMonth in dictionary for k, v in famousbirthdays.items(): if str(birthdayMonth) in famousbirthdays.items(birthdayMonth): print("Your birthday months is the same as", famousbirthdays.month(birthdayMonth).person(birthdayMonth))
修正方案
第一步:修复模块代码
原函数的参数完全多余,直接返回字典即可:
# module25.py def get_famous_birthdays(): return { "January": "Mozart", "February": "Charles Darwin", "March": "Albert Einstein", "April": "Elizabeth II", "May": "Linnaeus", "June": "Josephine Baker", "July": "Frida Kahlo", "August": "Barak Obama", "September": "Beyonce Knowles", "October": "Gandhi", "November": "Marie Curie", "December": "Emily Dickenson" }
第二步:修复主程序代码
需要把数字月份转换成英文月份名,再从字典中匹配:
from module25 import get_famous_birthdays # 假设birthdayObject是已有的datetime对象,若没有可自行创建测试 from datetime import datetime # 测试用例:替换成实际的用户生日对象 # birthdayObject = datetime(2000, 5, 15) # 将数字月份转换为英文全名(如"May") birthdayMonth = birthdayObject.strftime("%B") # 获取名人字典 famous_dict = get_famous_birthdays() # 匹配并输出结果 if birthdayMonth in famous_dict: print(f"你的生日月份和{famous_dict[birthdayMonth]}相同!") else: print("暂无该月份对应的名人信息")
错误原因说明
- 函数与字典混淆:原代码直接对
famousbirthdays函数调用.items(),但它是函数,必须先执行(加())才能得到返回的字典。 - 月份格式不匹配:
strftime("%m")返回两位数字(如"01"),但字典的键是英文月份名,需要用%B获取全名。 - 无效属性调用:
famousbirthdays.month(...)写法错误,函数没有这类自定义属性,应直接操作返回的字典。
内容的提问来源于stack exchange,提问作者Rendevouz
相关产品推荐
相关产品推荐

