反向波兰表达式 - 监控输入

Reverse Polish Expression - Monitoring the Input

所以我有了使反向波兰表达式工作的代码

def rpn(x):
    stack = []
    operators=['+', '-', '*']

    for i in x.split(' '):
        if i in operators:
            op1 = stack.pop()
            op2 = stack.pop()
            if i=='+': result = op2 + op1
            if i=='-': result = op2 - op1
            if i=='*': result = op2 * op1
            stack.append(result)
        else:
            stack.append(float(i))

    return stack.pop()


x = str(input("Enter a polish expression:"))
result = rpn(x)
print (result)

但是我正在努力研究如何为特定输入提供一些错误消息 目前此代码仅在我在每个值后有一个 space 时才有效,即 3 4 + 然后我得到的结果是 7

但我想把它变成这样

-自动去除间距

或者代码将只在没有间距的情况下工作,如果有间距则提供错误 我想按照

的方式添加代码
if x contains " ":
   print("error")

我要解决的第二个问题是,限制使用的运算符 所以它只会 运行 如果它有数字和 3 个运算符(+,-,*)的代码,如果有任何其他运算符或字母,它将显示错误。我的想法又是

if x contains something other than "integers and +,-,*:
     then print an error

我再次有了概念,但没有关于如何执行它的 python 关键词知识。

您应该使用 x.split() 而不是 x.split(' '),它会从 x.

中提取除 space 之外的所有内容

split() 将多个连续的 space 视为一个 space(因此一个定界符),而 split(' ') 将一个 space 视为一个定界符。

区别如下:

>>> print('   '.split(' '))
['', '', '', '']
>>> print('   '.split())
[]

鉴于您的代码将只处理个位数:

for i in (_ for _ in x if not _.isspace()):
    # your algorithm

如果您想提出错误:

for i in (_ if not _.isspace() else None for _ in x):
    if i is None:
        raise ValueError("Error!")
    # your algorithm here