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
相关产品推荐
相关产品推荐

