Python薪资程序报错修复:列表与字典存储数据需求
修复后的薪资程序代码及说明
完整可运行代码
# 初始化员工记录列表和总计数据字典 employee_records = [] total_data = { "employee_count": 0, "total_hours": 0.0, "total_gross_pay": 0.0, "total_income_tax": 0.0, "total_net_pay": 0.0 } while True: # 接收用户输入员工姓名,输入END终止程序 name = input("请输入员工姓名(输入END终止程序):").strip() if name.upper() == "END": break # 接收薪资周期起止日期 pay_period_start = input("请输入薪资周期开始日期(如2024-01-01):").strip() pay_period_end = input("请输入薪资周期结束日期(如2024-01-15):").strip() # 接收并转换工时、时薪、税率为数值类型 try: hours_worked = float(input("请输入员工工时:")) hourly_rate = float(input("请输入员工时薪:")) tax_rate = float(input("请输入税率(如0.15表示15%):")) except ValueError: print("输入的数值无效,请重新输入该员工信息。") continue # 计算薪资相关数据 gross_pay = hours_worked * hourly_rate income_tax = gross_pay * tax_rate net_pay = gross_pay - income_tax # 构造员工详细记录字典 emp_detail = { "name": name, "pay_period_start": pay_period_start, "pay_period_end": pay_period_end, "hours_worked": hours_worked, "hourly_rate": hourly_rate, "tax_rate": tax_rate, "gross_pay": gross_pay, "income_tax": income_tax, "net_pay": net_pay } # 添加到员工列表 employee_records.append(emp_detail) # 更新总计数据 total_data["employee_count"] += 1 total_data["total_hours"] += hours_worked total_data["total_gross_pay"] += gross_pay total_data["total_income_tax"] += income_tax total_data["total_net_pay"] += net_pay # 输出所有员工记录 print("\n--- 员工薪资记录 ---") for idx, emp in enumerate(employee_records, 1): print(f"\n员工 {idx}:") print(f"姓名: {emp['name']}") print(f"薪资周期: {emp['pay_period_start']} 至 {emp['pay_period_end']}") print(f"工时: {emp['hours_worked']:.2f}") print(f"时薪: {emp['hourly_rate']:.2f}") print(f"税率: {emp['tax_rate']:.2%}") print(f"税前薪资(Gross Pay): {emp['gross_pay']:.2f}") print(f"所得税(Income Tax): {emp['income_tax']:.2f}") print(f"税后薪资(Net Pay): {emp['net_pay']:.2f}") # 输出总计数据 print("\n--- 所有员工总计数据 ---") print(f"员工总数: {total_data['employee_count']}") print(f"总工时: {total_data['total_hours']:.2f}") print(f"总税前薪资: {total_data['total_gross_pay']:.2f}") print(f"总所得税: {total_data['total_income_tax']:.2f}") print(f"总税后薪资: {total_data['total_net_pay']:.2f}")
关键修复点说明
- 解决
EmpDetail未定义错误:原代码未定义对应数据类型,这里改用字典emp_detail存储单条员工的所有信息,无需额外定义类,简洁易实现。 - 初始化总计数据结构:提前创建
total_data字典并预设所有总计项的初始值,避免后续更新时出现键不存在的错误。 - 输入合法性校验:添加
try-except捕获数值输入错误,防止因输入非数字导致程序崩溃,提升鲁棒性。 - 循环终止逻辑:判断用户输入的姓名为
END(不区分大小写)时终止循环,符合需求。 - 格式化输出:使用
:.2f和:.2%格式化数值,让输出更规范易读;通过enumerate给员工记录添加序号,增强可读性。 - 正确更新总计:每添加一条员工记录后,同步更新总计字典中的各项数据,确保最终统计准确。
内容的提问来源于stack exchange,提问作者cindy
相关产品推荐
相关产品推荐

