2016-04-01 19 views
0

Ich muss einen Ausdruck aus einer Zeichenfolge wie "(19 + ((91 -96) -13))" aber ich muss den Algorithmus selbst machen, was ich kann " t verwende eval() oder etwas ähnliches.Bewerten mathematischen Ausdruck aus String - Python

Ich habe eine Menge mit diesem Code versucht worden, aber es gibt mir Probleme mit negativen Zahlen:

while counter < 1: 
    chunks = [] 
    counter2 = 1 

    for character in operation: 
     if character.isdigit(): 
      if chunks[-1].isdigit(): # If the last chunk is already a number 
       chunks[-1] += character # Add onto that number 
      else: 
       chunks.append(character) # Start a new number chunk 
     elif character in '+-/*()': 
      chunks.append(character) # This doesn't account for `1 ++ 2`. 

    for e in reversed(chunks): 
     if e == '(': 
      counter2 = len(chunks) - counter2 
      break 
     else: 
      counter2 = counter2 + 1 

    if chunks[counter2+2] == '+': 
     result2 = int (chunks[counter2+1]) + int (chunks[counter2+3]) 
    elif chunks[counter2+2] == '-': 
     result2 = int (chunks[counter2+1]) - int (chunks[counter2+3]) 
    elif chunks[counter2+2] == '*': 
     result2 = int (chunks[counter2+1]) * int (chunks[counter2+3]) 
    elif chunks[counter2+2] == '/': 
     result2 = int (chunks[counter2+1])/int (chunks[counter2+3]) 


    chunks[counter2] = '' 
    chunks[counter2 + 1] = '' 
    chunks[counter2 + 2] = str (result2) 
    chunks[counter2 + 3] = '' 
    chunks[counter2 + 4] = '' 

    operation = ''.join(chunks) 

Achten Sie nicht auf die während Bedingung zahlen, ich bin zu aktualisieren, wie ich zu überprüfen, nur zu müssen

+0

Verwenden eines geeigneten Lexing-Parsing-Tools wie [PLY] (http://www.dabeaz.com/ply/ply .html) oder sogar Lex/Yacc würde dein Leben viel einfacher machen ... –

+0

die Sache ist, ich kann nicht, ich muss den ganzen Algorithmus machen. – Wrong

+0

Welche spezifischen Probleme mit negativen Zahlen hast du mit diesem Code? –

Antwort

0

Sie sollten versuchen, mehr Code auf eigene Faust zu debuggen. Das Problem, das Sie haben, ist die Int-Konvertierung erfolgt auf "-" und nicht "-5". Sie müssen "-" und Integer als nächstes in der Sequenz kombinieren und das in int konvertieren und verwenden. temp = str (Chunks [Zähler2 + 3]) + Str (Chunks [Zähler2 + 4])

+0

das reparierte ich irgendwie aber jetzt es gibt seltsame Ergebnisse – Wrong