反向波兰语表达式监视Inpu

2024-06-03 11:18:57 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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)

然而,我正在为如何为特定的输入提供一些错误消息而苦苦挣扎 目前这个代码只有在每个值后面有一个空格时才有效。 34+那么我会得到7的结果

但我想让它

-自动删除间距

或者代码只在没有间距的情况下工作,如果有间距,则提供错误 我想添加一些代码

^{pr2}$

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

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

同样,我有关于如何执行它的概念,但没有python关键字知识。在


Tags: 代码inifstack错误运算符resultpop
1条回答
网友
1楼 · 发布于 2024-06-03 11:18:57

您应该使用x.split()而不是x.split(' '),它将从x中提取除了空格之外的所有内容。在

split()将多个连续空格视为一个空格(因此只有一个分隔符),而split(' ')将一个空格视为一个分隔符。在

区别在于:

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

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

^{pr2}$

如果要引发错误:

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

相关问题 更多 >