如何从文件读取浮点数到列表?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
相关产品推荐
相关产品推荐

