如何修复get_laureates函数无法返回多名诺奖得主结果的问题
问题解决:返回所有符合条件的诺贝尔奖得主
你的代码核心问题是找到第一个符合条件的得主就直接return终止了循环,所以只能拿到单个结果。另外原函数的参数也完全不符合需求——没有接收要求的dict_prizes位置参数,year和category也没设置默认值。
下面是完全满足需求的修改后的代码:
import json # 读取数据文件 f = open('/content/laureate.json') dict_laureates = json.load(f) f.close() # 记得关闭文件,避免资源泄漏 def get_laureates(dict_prizes, year=None, category=None): laureate_names = [] # 初始化空列表存储所有符合条件的得主 for element in dict_prizes['laureates']: # 处理没有surname的情况(比如有些得主只有名字) firstname = element.get('firstname', '') surname = element.get('surname', '') full_name = f"{firstname} {surname}".strip() for prize in element['prizes']: # 构建匹配条件,兼容未指定年份/类别的场景 match_year = (year is None) or (prize['year'] == year) match_category = (category is None) or (prize['category'] == category) if match_year and match_category: if full_name not in laureate_names: # 避免同一得主多次获奖重复加入 laureate_names.append(full_name) break # 该得主已匹配,无需检查其他奖项 return laureate_names # 调用示例 # 指定2018年和平奖 print(get_laureates(dict_laureates, year="2018", category="peace")) # 输出: ['Denis Mukwege', 'Nadia Murad'] # 指定2005年化学奖 print(get_laureates(dict_laureates, year="2005", category="chemistry")) # 获取所有物理学奖得主 print(get_laureates(dict_laureates, category="physics")) # 获取2020年所有奖项得主 print(get_laureates(dict_laureates, year="2020")) # 获取所有诺贝尔奖得主 print(get_laureates(dict_laureates))
关键修改点说明:
- 参数合规:按照要求设置了
dict_prizes位置参数,year和category设为带默认值None的关键字参数。 - 结果收集:用列表存储所有符合条件的得主,循环结束后统一返回,避免中途终止流程。
- 场景兼容:处理了
year/category为None的场景,支持单独指定年份、单独指定类别、同时指定两者,或都不指定的情况。 - 边界处理:用
element.get()避免缺失firstname或surname导致报错,同时去重同一得主因多次获奖重复出现的情况。
内容的提问来源于stack exchange,提问作者Thomas
相关产品推荐
相关产品推荐

