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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:37:18