Python Taschenrechner

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
wasgeht1023
User
Beiträge: 3
Registriert: Sonntag 19. April 2020, 12:08

hi alle zusammen,

ich habe ein Problem bei dem ihr mir hoffentrlich helfen könnt. ich bin noch nicht so gut in python und soll jetzt einen tascehnrechner programmieren.
er soll mit binärbäumen geschrieben sein und bestimmte Anforderungen erfülen:
es soll Klassen enthalten
das Programm soll eine formel abfragen mit beliebig vielen zahlen durch Input(z.B. 5+6-4+3+9)
und daruaf hin das ausrechnen und die lösung ausgeben
es soll nur + und - rechnen können und sonst eine Fehlermeldung ausgeben

Vielleicht kann mir hier irgenjemand helfen den Code dazu zu schreiben.
ich sitze daran schon eine ganze weile und komme kein stück weiter.
danke schon mal im vorraus

PS bevor ihr fragt ich hab bis jetzt noch nichts weil ich noch nicht mal weiß wie ich anfangen soll.
Mein problem ist das ich nicht verstehe wie ich dazu die Bäume schrieb soll
Vielleicht hat jemand von euch eine Idee oder einen Beispiel Code oder einen fertigen
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Und zu deinem letzen Post hat sich was genau geändert?

Es wird dir hier keiner fertigen Code liefern. Auch nicht beim wiederholten Posten der gleichen Nachricht.

Fang an, die notwendigen Dinge zu programmieren.

Zu Beginn steht die Zerlegung der Eingabe in die erlaubten Token Zahl und Operation.

Ein weiterer Schritt ist die Definition einer Baumstruktur. Ein Knoten darin muss entweder eine Zahl darstellen, oder eine Operation mit einem linken und einem rechten Teilbaum. Jeder knoten hat eine Methode „auswerten“, und die liefert das Ergebnis zurück. Entweder also eine Zahl. Oder das Ergebnis der Operation auf den beiden Teilbäumen.

Und dann sind diese beiden Teile so zu verknüpfen, dass aus den tokens der Baum erstellt wird.
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@wasgeht1023: Ausdrücke kann man als Syntaxbäume darstellen. Wobei das hier ein bisschen ”langweilig” ist wenn man nur zwei Rechenoperationen mit gleichem Rang hat. Denn dann sind die Bäume die man generiert, wenn man das unkompliziert implementiert, letztlich degeneriert und eigentlich nur verkettete Listen.

Vielleicht kommt da ja irgendwann noch eine Folgeaufgabe die das durch mehr Rechenoperationen und vielleicht auch Klammern erweitert.

Also erster Schritt: Schlau machen was Syntaxbäume sind, und wie man zum Beispiel die gegebenen Beispieleingabe als Syntaxbaum darstellen kann.

Danach musst Du Dir überlegen wie man so einen Syntaxbaum als Datenstruktur (mit einer eigenen Klasse) modellieren kann.

Dann folgt die Umwandlung einer Zeichenkette in so eine Datenstruktur inklusive erkennen von Syntaxfehlern. Ich würde da nicht versuchen zu viel auf einmal zu machen und beispielsweise das zerlegen der Eingabe in Token und das bauen des Baums aus einem Tokenstrom in mindestens zwei Funktionen aufteilen.

Das Ausrechnen des Ergebnisses ist eine Methode auf dem Datentyp aus dem der Baum aufgebaut ist und wohl so mit das trivialste an der Aufgabe.

Und dann ist man auch schon fertig. 😎
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Das Thema geht hier weiter: viewtopic.php?f=1&t=49581
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten