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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 23:35:49