You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 01:10:27