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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 03:35:26