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

如何从文件读取浮点数到列表?Python费用统计程序优化求助

解决方案:支持任意数量收据的费用计算程序

核心问题分析

你的现有代码存在两个关键局限:

  • 重复编写三次相同的录入逻辑,无法适配任意数量的收据
  • 将格式化后的字符串存入列表,导致数值计算(如最值、平均值)出错(字符串比较是字典序而非数值序)

优化后的完整代码

def main():
    # 存储所有收据的费用列表(保留float类型用于计算)
    all_expenses = []
    receipt_count = int(input("请输入收据数量:"))
    
    for receipt_num in range(1, receipt_count + 1):
        print(f"\n=== 录入第 {receipt_num} 张收据的费用 ===")
        receipt_expenses = []
        while True:
            try:
                expense = float(input("输入费用(输入0或负数结束当前收据录入):$"))
                if expense <= 0:
                    break
                receipt_expenses.append(expense)
                all_expenses.append(expense)
            except ValueError:
                print("请输入有效的数字!")
        
        # 打印当前收据的汇总信息
        if receipt_expenses:
            receipt_total = sum(receipt_expenses)
            print(f"第 {receipt_num} 张收据总金额:${receipt_total:.2f}")
            print(f"第 {receipt_num} 张收据明细:{[f'${x:.2f}' for x in receipt_expenses]}")
        else:
            print(f"第 {receipt_num} 张收据无有效费用记录")
    
    # 将所有费用写入文件(每行一个数值,保留两位小数)
    with open("expenses.txt", "w") as expense_file:
        for expense in all_expenses:
            expense_file.write(f"{expense:.2f}\n")
    print("\n所有费用已保存到 expenses.txt")
    
    # 从文件读取费用并验证
    read_expenses = []
    with open("expenses.txt", "r") as expense_file:
        for line in expense_file:
            cleaned_line = line.strip()
            if cleaned_line:
                read_expenses.append(float(cleaned_line))
    print(f"从文件读取的费用列表:{[f'${x:.2f}' for x in read_expenses]}")
    
    # 计算并输出整体统计结果
    if all_expenses:
        total_amount = sum(all_expenses)
        entry_count = len(all_expenses)
        average_amount = total_amount / entry_count
        max_amount = max(all_expenses)
        min_amount = min(all_expenses)
        sorted_expenses = sorted(all_expenses)
        
        print("\n=== 整体费用统计 ===")
        print(f"总金额:${total_amount:.2f}")
        print(f"费用条目数量:{entry_count}")
        print(f"平均金额:${average_amount:.2f}")
        print(f"最大金额:${max_amount:.2f},最小金额:${min_amount:.2f}")
        print(f"从小到大排序的费用列表:{[f'${x:.2f}' for x in sorted_expenses]}")
    else:
        print("\n无有效费用记录")

if __name__ == "__main__":
    main()

关键优化点说明

  • 动态适配任意数量收据:通过让用户输入收据数量,循环处理每张收据的录入,彻底摆脱固定数量限制
  • 数值类型存储:所有费用以float类型保存,确保计算逻辑的准确性,仅在输出时格式化为两位小数的字符串
  • 健壮输入处理:添加try-except捕获无效输入,避免程序因非数字输入崩溃
  • 安全文件操作:使用with语句自动管理文件生命周期,每行存储一个费用值,便于后续读取解析
  • 高效统计逻辑:利用Python内置的sum()、len()、max()、min()、sorted()函数,简洁完成所有统计需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 12:56:30