关于代码的简短说明:
我必须做一个将评估前缀,后缀或中缀表达式的类。它必须确定它是pre / post / infix并将它们转换为postfix,例如prefixTOpostfix()
(其他人现在不需要删除)方法在代码中转换为' / x7'到' x7 /',表达式在方法edit()
中编辑,来自' x7 /'至' x 7 /'。这两种方法都运行良好,在多个示例上进行测试(不是在这里发布整个代码和分配,但也不需要它们。问的问题只是我得到的错误,不要担心我不是要求解决我的任务)。还有assign
方法,因为可以有变量,例如' a = 3',它可以在表达式中的某个位置。
问题:当我运行print(v.evaluate('x 7/'))
(后缀中已有的内容),x = 14
时,它会返回2
。但是,当我运行print(v.evaluate('/x 7'))
(前缀中的内容)时,它会返回None
。 这两个表达式在完成他们的方法之后看起来完全相同' x 7 /' (我在代码中测试了prints
),两个堆栈都是相同的。首先是'14'
,然后是'14 7'
,最后是'2'
。当我将return(s.pop())
更改为return(s.top())
时,两个表达式都会被评估为'2'
。那么为什么return(s.pop())
没有与第二个一起工作?如果有更多关于代码的问题或者某些内容不够清楚,请告诉我,我会尝试以不同的方式解释它。
class MyClass:
class Stack:
...
def __init__(self):
self.table = {}
def __repr__(self):
...
def assign(self, variable, exp):
if '+-*/%' in exp: # temporary solution
exp = self.evaluate(exp)
self.table[variable] = exp
def evaluate(self, exp):
if exp[0] in '+-*/%': # Prefix
new_exp = self.prefixTOpostfix(exp)
self.evaluate(new_exp)
elif exp[len(exp)-1] in '+-*/%': # Postfix
s = self.Stack()
exp = self.edit(exp) # from 'x7/' to 'x 7 /'
for item in exp.split():
if item == '+':
s.push(s.pop() + s.pop())
... # other operations
elif prvok == '/':
temp = s.pop()
if temp == 0:
return None
s.push(s.pop() // temp) # it has to be // !
else: # if it is number / variable
if item in self.table:
s.push(int(self.table[item]))
else:
s.push(int(item))
s.printOUT()
return(s.pop())
else: # Infix
...
def prefixTOpostfix(self, exp):
...
def edit(self, exp):
...
答案 0 :(得分:1)
if exp[0] in '+-*/%': # Prefix
new_exp = self.prefixTOpostfix(exp)
self.evaluate(new_exp)
您需要return
递归调用的结果。
if exp[0] in '+-*/%': # Prefix
new_exp = self.prefixTOpostfix(exp)
return self.evaluate(new_exp)