Python函数findNextOpr返回-1异常问题排查求助
你的Python函数问题分析与修复
你遇到的问题根源在于else语句的缩进位置错误,咱们一步步拆解来看:
问题所在
你的代码里,else: return(-1)是和if txt[i] in op:同级缩进的,这意味着第一次循环检查第一个字符时,如果不是运算符,就直接返回-1了,根本不会继续往后遍历后面的字符!
比如调用findNextOpr("1+2+3")时,第一个字符是'1',不满足if条件,直接触发else返回-1,完全没机会检查到后面的'+'。
修复方案
你需要把return(-1)移到整个循环结束之后——也就是等把字符串里所有字符都遍历完,确认没有找到任何运算符的时候,再返回-1。这样只有当所有字符都检查过、确实没有运算符时,才会返回-1。
修复后的代码如下:
def findNextOpr(txt): # txt must be a nonempty string. if len(txt)<=0 or not isinstance(txt,str): print("type error: findNextOpr") return "type error: findNextOpr" # In this exercise +, -, *, / are all the 4 operators # The function returns -1 if there is no operator in txt, # otherwise returns the position of the leftmost operator op=['+','-','*','/'] for i in range(len(txt)): if txt[i] in op: return i # 遍历完所有字符都没找到运算符,才返回-1 return -1
测试验证
现在调用print(findNextOpr("1+2+3")),会正确返回第一个'+'的位置1;如果传入没有运算符的字符串比如"1234",就会返回-1,完全符合你的需求。
另外提个小细节:Python里返回整数时,return i比return(i)更符合常规写法,不过后者也能正常运行~
内容的提问来源于stack exchange,提问作者Shesps
相关产品推荐
相关产品推荐

