Python新手求助:程序无法输出行李重量低于平均值的乘客列表
问题分析与修复
你的代码存在几个关键问题,导致运行后没有输出:
核心错误点
- 未调用定义的函数:你只写了
minavg()函数的定义,但没有在代码末尾调用它,函数里的逻辑根本没执行。 - 筛选逻辑位置错误:判断行李重量是否低于平均值的代码被放在了文件读取循环的外面,此时
line和field4只保留了最后一行(Tom那行)的数据,完全没遍历所有乘客做筛选。 - 判断条件逻辑混乱:
if a < b in line.split()这个表达式完全不符合需求,你需要的是判断当前乘客的行李重量是否小于平均值,而非这种逻辑混乱的写法。 - 未处理字段空格:文件里的字段用
,分隔,split后每个字段带有空格,虽然转int时不报错,但会给后续数据处理埋下隐患。
修正后的代码
def minavg(): print("\n" * 5) print(" List of passengers with baggage weight below average:") from tabulate import tabulate # 第一步:读取所有乘客数据,同时计算总重量和人数 all_passengers = [] total_weight = 0 count = 0 with open('list.txt','r', encoding="utf-8") as f: for line in f: # 分割字段并清理每个字段的空格 name, id_num, place, weight_str = [field.strip() for field in line.split(',')] weight = int(weight_str) # 保存完整的乘客数据 all_passengers.append([name, id_num, place, weight]) total_weight += weight count += 1 # 计算平均值(按需求取整) avg_weight = round(total_weight / count) # 第二步:筛选出行李重量低于平均值的乘客 filtered_data = [passenger for passenger in all_passengers if passenger[3] < avg_weight] # 输出结果表格 print(tabulate(filtered_data, tablefmt='grid', headers=('Name', 'ID', 'Place', 'Baggage Weight'))) # 调用函数执行逻辑 minavg()
关键修改说明
- 新增函数调用:在代码末尾加上
minavg(),确保函数逻辑被执行。 - 先存储所有数据:把乘客数据完整保存后再做筛选,逻辑更清晰,也避免重复读取文件。
- 清理字段空格:用列表推导式统一处理每个字段的空格,避免格式问题。
- 简洁筛选逻辑:用列表推导式快速筛选符合条件的乘客,代码可读性更高。
运行修正后的代码,就能得到行李重量低于平均值(10)的乘客列表:Bob、Sergey、Jine、Tom。
内容的提问来源于stack exchange,提问作者TermalQuake
相关产品推荐
相关产品推荐

