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
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 ... –
die Sache ist, ich kann nicht, ich muss den ganzen Algorithmus machen. – Wrong
Welche spezifischen Probleme mit negativen Zahlen hast du mit diesem Code? –