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

2 Antworten

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


KarlRanseierIII  23.09.2020, 15:38

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

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.

alfredo153  23.09.2020, 15:34

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

0
alfredo153  23.09.2020, 16:03
@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