2017-11-13 1 views
2

So arbeiten habe ich diesen Code:Python3 - Warum einen Bediener von einem dict Aufruf nicht

def evaluate(expression): 
    if any(not (c.isdigit() or c.isspace() or c in '(){}[]+-*/') for c in expression): 
     return 
    newexp = expression.split() 
    stack = Stack() 
    for i in newexp: 
     if i in ')]}': 
      arg2 = stack.pop() 
      operator = stack.pop() 
      arg1 = stack.pop() 
      if stack.pop() not in '([{': 
       return 
      stack.push({'+': add}[operator](arg1,arg2)) 
     else: 
      stack.push(i)  

    #checking 
    while not stack.is_empty(): 
     print(stack.pop()) 

n = input('Input expression: ') 
evaluate(n) 

wenn ich

verwenden

'(5 + 2)'

als Eingabe wird die Ausgabe

I

als Antwort bekommen soll.

Dadurch 7 erhalten wird:

print({'+': add}['+'](5,2)) 

aber ist es nicht eigentlich das gleiche? Kannst du mir sagen, welcher Teil meines Codes falsch ist?

Danke.

+5

Weil Sie mit Streichern arbeiten, keine Zahlen. – wim

+0

oh ja, vielen Dank. – garjted

Antwort

0

Nehmen Sie diese Änderung stack.push({'+': add}[operator](int(arg1),int(arg2)))

Verwandte Themen