Lösungsansätze für einen Taschenrechner in Python mit mehreren Operationen?

2 Antworten

Um eine Rechnung in einem String auszuführen, schreibe

eval("4*5+5")

Das würde dann 25 ergeben.

>>> eval("4*5+5")
25
Woher ich das weiß:Hobby – Ich programmiere sehr gerne und häufig.

Das ist einerseits richtig, andererseits ein bisschen ein fauler Trick. Kommt natürlich auf die Zielsetzung des FS an...

0
@Tbear44

Ich schätze dass der FS das als Übungsbeispiel macht und lernen will, wie man sowas selber baut, statt sich den Python-Parser auszubirgen.

0

Das Aufspalten ("Tokenisieren", die Grundaufgabe eines Lexers) geht recht bequem mit regulären Ausdrücken: https://docs.python.org/3.8/library/re.html

Wenn dein Rechner aber korrekt sein soll ("Punkt vor Strich") und auch mit Klammern usw. umgehen muss, wird es etwas komplizierter. Da solltest du einen Parser bauen, der einen AST (eine hierarchische Baumdarstellung) des Ausdrucks erzeugt. Eine schöne Übung, aber es gibt dafür auch vorgefertigte Komponenten wie https://github.com/lark-parser/lark

Wobei für arithmetische Ausdrücke ein einfacher Descend-Parser ausreicht, den Baum als intermediate über einen Tokenizer kann ich mir da ansich schenken.

Es ist ja nicht so, daß ich hier eine umfangreiche formale Grammatik habe.

2

Was möchtest Du wissen?