Python字典列表处理:筛选高价书籍并计算平均重量及代码修正
代码修正与解释
需求回顾
筛选价格超过800的书籍,显示其名称,并计算这类书籍的平均重量。
原代码存在的问题
- 函数
calcWeight逻辑偏离需求:遍历所有书籍的重量并判断重量≥800,而非针对价格超过800的书籍计算平均重量,且硬编码除以2,未动态统计符合条件的书籍数量。 - 外层循环冗余且逻辑错误:遍历书籍的键值对查找价格,每找到一本价格≥800的书就调用
calcWeight,导致重复计算所有书籍的重量,而非仅统计符合条件的书籍。 - 变量未初始化:
totalWeight未定义初始值,运行时会抛出NameError。 - 缩进错误:
if value >= 800:后的代码未缩进,不符合Python语法规范。
修正后的代码
# 初始化变量:存储符合条件的书籍名称、总重量、数量 qualified_books = [] total_weight = 0 count = 0 books = [ {"name": "textbook", "weight": 500, "price": 800}, {"name": "notebook", "weight": 100, "price": 200}, {"name": "storybook", "weight": 700, "price": 1000} ] # 遍历所有书籍,筛选价格超过800的 for book in books: if book["price"] > 800: # 需求是"超过800",所以用>而非>= qualified_books.append(book["name"]) total_weight += book["weight"] count += 1 # 显示符合条件的书籍名称 print("价格超过800的书籍名称:") for name in qualified_books: print(name) # 计算并显示平均重量(避免除以0错误) if count > 0: avg_weight = total_weight / count print(f"这类书籍的平均重量:{avg_weight}") else: print("没有价格超过800的书籍")
修正逻辑说明
- 直接遍历每本书籍,通过
book["price"] > 800精准筛选符合需求的书籍,无需嵌套遍历键值对,代码更简洁高效。 - 用
qualified_books存储符合条件的书名,total_weight累加重量,count统计数量,动态计算平均重量,避免硬编码的不合理性。 - 添加了空值判断,防止没有符合条件书籍时出现除以0的运行错误。
- 严格遵循Python缩进规范,变量提前初始化,避免未定义错误。
内容的提问来源于stack exchange,提问作者beginner programmer
相关产品推荐
相关产品推荐

