以下代码的功能如下:" eqn"转换字符串:" d"这是一个数学表达式,根据反向波兰表示法列入其整数和运算符列表,其中"添加","减去","乘以"并且"划分"分别代表+, - ,*和/。还有"否定"取任何正整数并将其转换为负整数的运算符。示例输入和输出:
但是使用否定函数,如果没有正确使用(不是在数字之后),那么函数应该返回第一个错误"否定"的索引号。
例如:
eqn(" 2 4添加否定")应该产生3
的输出def eqn(d):
extrac = []
for e in eqnStr.split():
if len(e) == 0:
continue
try:
extrac.append(int(e))
continue
except ValueError:
pass
try:
extrac.append(float(e))
continue
except ValueError:
pass
extrac.append(e)
return extrac
问题在于否定功能不起作用。不是将整数更改为负数,而是将其作为"否定"在输出中,基本上它应该“消失”。例如:
eqn(" 5 6 add 2 negate divide")应该产生[5,6,"添加", - 2,"除以"]但相反产生[5,6,"添加",2,"否定","划分"]如何解决此问题以及如何让它显示第一个无效否定的索引号?
答案 0 :(得分:2)
您需要添加一个特殊情况来处理否定。尝试这样的事情:
/usr/bin/R
输出:
def eqn(d):
extrac = []
for e in d.split():
if len(e) == 0:
continue
try:
extrac.append(int(e))
continue
except ValueError:
pass
try:
extrac.append(float(e))
continue
except ValueError:
pass
if e == 'negate':
if isinstance(extrac[-1], str):
return len(extrac)
else:
extrac[-1] *= -1
continue
extrac.append(e)
return extrac
答案 1 :(得分:1)
这是RPN的错误方法,它应该包括在解析列表时将操作数推入和弹出堆栈。
例如,eqn([1, 2, 3, '+', '*'])
会执行(3 + 2) * 1
。内置的python'list'类型支持追加(推送)和弹出。
有关RPN的更多信息,请访问:https://en.wikipedia.org/wiki/Reverse_Polish_notation