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

Python程序需两次输入0退出循环及薪资统计功能实现求助

问题修复与代码优化方案

解决你遇到的两个核心问题

1. 单次输入0即可退出循环

原代码要求必须完成姓名和薪资两次输入后才判断退出条件,导致需要按两次0才能结束程序。修改后逻辑:输入姓名时输0,直接终止循环;若姓名正常输入,薪资输0也会直接退出,无需走完后续流程。

2. 实现平均薪资计算与差值筛选

单独提取薪资数据计算平均值,之后遍历所有员工,筛选出薪资与平均值相差5000元以内的条目(原代码中薪资输入单位是“百”,所以代码里把输入值乘以100转换为实际元,方便直接用5000作为差值阈值)。

优化后的完整代码

from statistics import mean

def main():
    employees = []  # 用列表存储员工姓名+薪资的元组,结构更清晰
    count = 1
    
    while True:
        # 先处理姓名输入,判断退出条件
        name = input(f"Enter Employee {count} Name (press 0 to quit):  ")
        if name.strip() == "0":
            break
        
        # 处理薪资输入,捕获无效数字的异常
        try:
            salary_input = float(input(f"Enter Employee {count} Salary (in hundreds, press 0 to quit):  "))
            if salary_input == 0:
                break
            # 转换为实际薪资(元)
            salary = salary_input * 100
        except ValueError:
            print("请输入有效的数字薪资!")
            continue
        
        employees.append( (name, salary) )
        count += 1
    
    # 处理没有输入任何数据的情况
    if not employees:
        print("没有输入任何员工数据")
        return
    
    # 计算平均薪资
    salaries = [emp[1] for emp in employees]
    avg_salary = mean(salaries)
    print(f"\n平均薪资: {avg_salary:.2f} 元")
    
    # 筛选并打印符合条件的员工
    print("\n与平均薪资相差5000元以内的员工:")
    for name, salary in employees:
        if abs(salary - avg_salary) <= 5000:
            print(f"{name}: {salary:.2f} 元")

if __name__ == "__main__":
    main()

额外的代码优化建议

  • 变量命名:用employees、name这类语义化名称代替原代码的L、e、s,提升代码可读性
  • 异常处理:添加薪资输入的错误捕获,避免用户输入非数字时程序直接崩溃
  • 结构简化:去掉不必要的全局变量,用while True+break替代running标志,逻辑更简洁
  • 边界处理:增加无数据输入的判断,防止计算平均值时报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 21:14:55