【问题标题】:Reverse Polish Expression - Monitoring the Input反向波兰表达式 - 监控输入
【发布时间】:2016-11-12 16:31:14
【问题描述】:

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

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)

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

但我想做到这一点

-自动删除间距

或者代码只能在没有间距的情况下工作,并且如果有间距则提供错误 我想按照以下方式添加代码

if x contains " ":
   print("error")

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

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

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

【问题讨论】:

  • 没有空格如何确定一个数字何时结束?除非每个数字都是一个数字。
  • 啊,我应该提到的,确实只有个位数
  • 你可以迭代 x.strip() 并丢弃空格。

标签: python expression postfix-notation


【解决方案1】:

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

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

这就是区别:

>>> 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

【讨论】:

  • 这确实有道理,但现在假设我们作为输入 (34+) 输入它会显示错误,因为我正在尝试将字符串转换为浮点数。那么删除间距真的可以解决我的问题吗?或者这是否意味着除非有空格,否则我的代码无法工作?
  • 但是34+ 没有任何意义。这与34 + WHAT?? 相同。
  • 就 RPM 而言,34+ 将与 3 + 4 相同
  • 不会,但3 4+ 会。注意空格。
  • @Xrin,下划线只是一个变量名,这里没什么特别的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多