反向波兰表达式 - 监控输入
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
所以我有了使反向波兰表达式工作的代码
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
.
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