CS50 Python作业:为何相似输入得到不同变量赋值结果?
问题分析:减法运算符切片导致的数值符号异常
场景与代码
我正在解决哈佛CS50 Python课程第一套作业中的“Math Interpreter”问题,要求程序接收格式为x y z的算术表达式(x、z为整数,y为+、-、*、/),计算并输出保留一位小数的浮点结果。编写的代码如下:
expression=input("Enter the expression: ").replace(" ","") if "+" in expression: operation="+" elif "-" in expression: operation="-" elif "*" in expression: operation="*" else: operation="/" position=expression.find(operation) x=int(expression[:position]) y=int(expression[position:]) print(x) print(operation) print(y)
问题现象
输入55 + 6时,y的输出为6;输入55 - 6时,y的输出为-6,不符合预期。
原因解析
问题出在切片逻辑上:
- 当运算符是
+时,处理后的字符串是55+6,position为2,expression[position:]取到的是+6。Python的int()函数会自动忽略正号,所以int('+6')结果为6。 - 当运算符是
-时,处理后的字符串是55-6,position为2,expression[position:]取到的是-6。int()函数会保留负号,所以int('-6')结果为-6。
本质是你截取第二个数时把运算符也包含进去了,而正负号在int()中的解析规则不同,导致两种场景出现差异。
修复方案
修改第二个数的切片逻辑,从运算符的下一个位置开始截取,避免包含运算符:
y=int(expression[position+1:])
这样不管是哪种运算符,都只会截取后面的数字部分,y就能得到正确的6,之后再根据operation变量执行对应的算术运算即可。
内容的提问来源于stack exchange,提问作者nirraya
相关产品推荐
相关产品推荐

