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

Python新手求助:员工薪资计算代码优化建议

你的代码已经合格,附优化建议

首先明确:你的代码完全符合两项练习要求,逻辑正确、异常处理也做到了优雅退出,是合格的实现。下面给几个让代码更简洁、更Pythonic的优化方向:

1. 封装重复的输入验证逻辑

你现在对hours和rate的输入验证代码几乎完全重复,可以把这部分写成一个函数,避免冗余:

def get_valid_number(prompt):
    user_input = input(prompt)
    try:
        return float(user_input)
    except ValueError:
        print('Please enter a valid number')
        quit()

hours = get_valid_number("Enter hours: ")
rate = get_valid_number("Enter rate: ")

如果想让用户输入错误后可以重试(而非直接退出),可以改成带循环的版本:

def get_valid_number(prompt):
    while True:
        user_input = input(prompt)
        try:
            return float(user_input)
        except ValueError:
            print('Please enter a valid number')

2. 简化薪资计算逻辑

原有的加班薪资计算可以合并成更简洁的表达式,不用单独定义overtime和overpay变量:

if hours > 40:
    pay = 40 * rate + (hours - 40) * rate * 1.5
else:
    pay = hours * rate

甚至可以用一行表达式完成(兼顾可读性的前提下):

pay = 40 * rate + max(hours - 40, 0) * rate * 1.5

3. 使用f-string优化输出格式

原代码用str()拼接字符串的方式比较繁琐,Python 3.6+推荐用f-string,更简洁直观:

print(f"Pay: {pay}")

4. 更精准的异常捕获

原代码的except:会捕获所有异常(比如用户按Ctrl+C触发的KeyboardInterrupt),建议明确捕获ValueError,只处理输入非数字的情况,避免误拦截其他异常。

优化后的完整代码示例

def get_valid_number(prompt):
    user_input = input(prompt)
    try:
        return float(user_input)
    except ValueError:
        print('Please enter a valid number')
        quit()

hours = get_valid_number("Enter hours: ")
rate = get_valid_number("Enter rate: ")

pay = 40 * rate + max(hours - 40, 0) * rate * 1.5
print(f"Pay: {pay}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.11 21:42:11