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

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()

关键修改说明

  1. 新增函数调用:在代码末尾加上minavg(),确保函数逻辑被执行。
  2. 先存储所有数据:把乘客数据完整保存后再做筛选,逻辑更清晰,也避免重复读取文件。
  3. 清理字段空格:用列表推导式统一处理每个字段的空格,避免格式问题。
  4. 简洁筛选逻辑:用列表推导式快速筛选符合条件的乘客,代码可读性更高。

运行修正后的代码,就能得到行李重量低于平均值(10)的乘客列表:Bob、Sergey、Jine、Tom。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 00:20:38