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
相关产品推荐
相关产品推荐

