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

Python元组打印异常:avboats函数未按预期输出赛艇名称

问题分析与解决方法

1. 函数返回元组列表而非打印赛艇名称

原因:你的avboats函数仅完成了筛选逻辑并返回结果,没有在函数内部添加打印赛艇名称的代码;或者调用函数后,你没有对返回的列表做遍历打印处理。

解决方法:

  • 方法一:在函数内部直接打印符合条件的赛艇名称
    def avboats(available_rowers, available_coxswains, boats):
        filtered_boats = []
        for boat in boats:
            name, crew_size, rowers_needed, needs_coxswain = boat
            # 筛选逻辑
            if rowers_needed <= available_rowers and (not needs_coxswain or available_coxswains >= 1):
                filtered_boats.append(boat)
                print(name)  # 打印赛艇名称
        return filtered_boats
    
  • 方法二:调用函数后,遍历返回的列表打印名称
    # 假设boat_list是你的赛艇元组列表
    result = avboats(8, 1, boat_list)
    # 遍历打印
    for boat in result:
        print(boat[0])
    

2. 元组改字典出现哈希错误

原因:哈希错误(比如TypeError: unhashable type: 'list')本质是你把可变类型(列表、字典等)当作了字典的键,而字典的键必须是可哈希的不可变类型(字符串、数字、内部元素全为不可变的元组)。

解决方法:

  • 调整字典结构,用赛艇名称(字符串,可哈希)作为键,其他属性作为值:
    # 将元组列表转为字典列表
    boat_dicts = [
        {"name": "单人双桨", "crew_size": 1, "rowers_needed": 1, "needs_coxswain": False},
        {"name": "四人单桨", "crew_size": 4, "rowers_needed": 4, "needs_coxswain": True}
    ]
    
    def avboats(available_rowers, available_coxswains, boats):
        filtered = []
        for boat in boats:
            if boat["rowers_needed"] <= available_rowers and (not boat["needs_coxswain"] or available_coxswains >= 1):
                filtered.append(boat)
                print(boat["name"])
        return filtered
    
  • 如果必须用元组相关结构当键,确保元组内所有元素都是不可变的:
    # 错误示例:元组包含列表,无法作为字典键
    # bad_key = ("双人艇", [2, 1])
    
    # 正确示例:元组元素全为不可变类型
    valid_key = ("双人艇", 2, 1, True)
    boat_map = {valid_key: "可用"}
    

内容的提问来源于stack exchange,提问作者Mnurko

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 17:02:50