我碰巧看到过此编码分配。
这个想法是编写一个函数,该函数将对作为dict传递的值执行前缀操作。前缀操作基于用户提供的表达式。
例如。 +1 2
作为表达式将产生3
。 *+125
应该产生15,并且该函数收到以下两个参数
expression = +*1xy
variables = {'x':(3,7),'y':(2,3)}#3 and 7 are lower an upper bound
然后函数应返回8 ((x*1)+y; max x ==6 and y==2)
。
我的处理方法如下:
def max_result(expression,variables):
exp = expression.split(" ")
var_max = variables[max(variables,variables.get())]
stack = []
total = None
try:
for i in exp:
if i.isdigit():
i=int(i)
if total is None:
total = i
else:
total = calc(stack.pop(0),total,i)
else:
stack.insert(0,i)
total = calc(stack.pop(0),var_max[0],var_max[1])# This is not correct
except:
return None
然后我定义了calc
函数,如下所示
def calc(op,op1,op2):
if op == "*":
return op1 * op2
elif op == "/":
return op1 / op2
elif op == "+":
return op1 + op2
else:
return op1 - op2
当variables
或len(expression)
不超过2并且运算符和数字位数相同时,上述代码可以很好地工作。
如上所述,当variables
作为dict
传递时,上述代码将失败。
谁能对此发表一些看法?