Python 3.6中if判断报错咨询:字符串与整数无法比较
问题分析与解决方案
核心问题:Python 3 与 Python 2 input() 的行为差异
在 Python 3 中,input() 函数会直接返回用户输入的字符串,而你代码里直接拿这个字符串和整数 40 做比较(hours_Worked > 40),自然会抛出 '<' not supported between instances of 'str' and 'int' 的类型不兼容错误。
而 Python 2 的 input() 函数本质上等价于 Python 3 的 eval(input())——它会把用户输入的内容当作 Python 表达式求值,所以如果用户输入数字,会自动转换成数值类型,这就是为什么你的代码在 Python 2.7 里能正常运行的原因。
代码里的其他隐藏问题
除了类型不匹配,你的代码还有两个容易忽略的逻辑错误:
- 加班工资计算错误:你写的
((hours_Worked-40) + (rate*1.5))是把加班时长和加班时薪做加法,这明显不符合薪资计算逻辑,应该是加班时长 × 加班时薪,也就是(hours_Worked-40)*(rate*1.5)。 - 条件分支冗余:你用了两个独立的
if判断,其实改成if-else结构更简洁高效,也能避免不必要的重复判断。
修正后的 Python 3 代码
hours_Worked = float(input("Enter the hours worked\n")) # 将输入转为数值类型 rate = 25.00 if hours_Worked > 40: grosspay = (40 * rate) + ((hours_Worked - 40) * (rate * 1.5)) # 修正加班工资计算逻辑 else: # 用else替代第二个独立if grosspay = hours_Worked * rate print("Gross Pay: ", str(grosspay))
补充提醒
如果需要兼容 Python 2 和 Python 3,建议始终显式转换输入的类型,不要依赖 Python 2 input() 的自动求值行为——这种方式存在安全风险,用户可以输入任意 Python 表达式执行,可能导致代码被恶意注入。
内容的提问来源于stack exchange,提问作者Chaaru Manjuraj
相关产品推荐
相关产品推荐

