Python 如何处理表达式解析输入数组中的空格

Python 如何处理表达式解析输入数组中的空格,python,algorithm,Python,Algorithm,我正在用python的stack制作表达式解析算法,当我输入没有空格的方程时,比如“1+2*3+10”,它不能正常工作,有时给出错误结果,有时给出错误,应该像“1+2*3+10”一样输入才能工作 def应用程序(a、b、op): 如果op='+':返回a+b 如果op='-':返回a-b 如果op='*':返回a*b 如果op=='/':返回a//b def评估(令牌): 值=堆栈() ops=Stack() i=0 而i

我正在用python的stack制作表达式解析算法,当我输入没有空格的方程时,比如“1+2*3+10”,它不能正常工作,有时给出错误结果,有时给出错误,应该像“1+2*3+10”一样输入才能工作

def应用程序(a、b、op): 如果op='+':返回a+b 如果op='-':返回a-b 如果op='*':返回a*b 如果op=='/':返回a//b def评估(令牌): 值=堆栈() ops=Stack() i=0 而i=优先级(令牌[i]): val2=values.pop() val1=values.pop() op=ops.pop() 值推送(applyOp(val1,val2,op)) 操作推送(令牌[i]) i+=1 而ops.peek()!=无: val2=values.pop() val1=values.pop() op=ops.pop() 值推送(applyOp(val1,val2,op)) 返回值。peek()
我不确定这是否是唯一的问题,但是

elif tokens[i].isdigit(): 
        val = 0
        while (i < len(tokens) and
            tokens[i].isdigit()): 
            val = (val * 10) + int(tokens[i]) 
            i += 1
        values.push(val)

你是如何输入值的?我在你的代码中看不到它。“它不能正常工作”是什么意思?是否有错误消息,它是否给出了错误的输出,是无限循环还是其他什么?请看。我认为最好使用编译器(解析器生成器)。然后编写语法,让编译器来完成工作。@kaya3我在帖子中进行了编辑。您的编辑没有添加任何必需的信息。什么错误消息,什么错误结果,什么输入?
elif tokens[i].isdigit(): 
        val = 0
        while (i < len(tokens) and
            tokens[i].isdigit()): 
            val = (val * 10) + int(tokens[i]) 
            i += 1
        values.push(val)
elif tokens[i].isdigit():
    val = int(tokens[i])
    while i+1 < len(tokens) and tokens[i+1].isdigit():
        i += 1
        val = (val * 10) + int(tokens[i])
    values.append(val)