Hallo!
Ich bin gerade dabei ein Programm zu schreiben, was Terme lösen soll.
Ich habe im Internet folgendes gefunden: http://www.delphipraxis.net/116233-%5Bp ... -exec.html.
Terme wie "10*10" klappen ja ganz gut, leider soll das Programm auch Terme wie "2a**2" lösen können, was ja leider nicht funktioniert
Im Internet habe ich leider nichts nützliches dazu gefunden :K
Kann mir jemand von Euch einen Tipp geben, wie das funktionieren könnte??
Mit freundlichen Grüßen
akhof
Terme lösen
Zauber doch mal schnell einen Parser für das Auswerten von Ausdrücken unter Berücksichtigung von Variablen her, das wird besser sein als Funktionen wie exec() oder eval() abzusichern. Aber vielleicht bist du ja nicht am Absichern interessiert :K
edit: "Terme lösen" klingt leicht verwirrend oder willst du tatsächlich Gleichungen lösen?
edit: "Terme lösen" klingt leicht verwirrend oder willst du tatsächlich Gleichungen lösen?
Danke ersteinmal für die schnelle Hilfe!
wie z.B.:
eingabe = "x²+x²" oder "x**2+x**2"
ergebnis = "2x²" oder "2x**2"
akhof
was genau willst Du mir damit sagen??webspider hat geschrieben:Zauber doch mal schnell einen Parser für das Auswerten von Ausdrücken unter Berücksichtigung von Variablen her, das wird besser sein als Funktionen wie exec() oder eval() abzusichern. Aber vielleicht bist du ja nicht am Absichern interessiert :K
ich würde gerne soetwas machen wie:webspider hat geschrieben: edit: "Terme lösen" klingt leicht verwirrend oder willst du tatsächlich Gleichungen lösen?
Code: Alles auswählen
eingabe = input("Eingabe: ")
ergebnis = XXX(eingabe)
print(ergebnis)
eingabe = "x²+x²" oder "x**2+x**2"
ergebnis = "2x²" oder "2x**2"
akhof
Zuletzt geändert von akhof am Samstag 28. Januar 2012, 22:15, insgesamt 1-mal geändert.
Schreibe deinen eigenen Parser mit einer lib deiner Wahl (siehe z.B. http://wiki.python.org/moin/LanguageParsing). Achte dabei vor allem auf die Rangfolgen "Punkt vor Strich", potenzieren und Klammern setzen. Außerdem noch, dass + und - nicht nur Infix- sondern auch Prefix-Operatoren sein können und dann nur einen Operanden haben.
Warte, was? Das hat doch nichts mit Lösen zu tun. Du willst Terme vereinfachen.akhof hat geschrieben:ich würde gerne soetwas machen wie:
wie z.B.:Code: Alles auswählen
eingabe = input("Eingabe: ") ergebnis = XXX(eingabe) print(ergebnis)
eingabe = "x²+x²" oder "x**2+x**2"
ergebnis = "2x²" oder "2x**2"
Das bietet z.B. SymPy an (Zitat deren Seite: "basic simplification (like a*b*b + 2*b*a*b -> 3*a*b^2)").
Zuletzt geändert von webspider am Samstag 28. Januar 2012, 22:28, insgesamt 1-mal geändert.
tut mir leid, da habe ich mich wohl falsch ausgedrücktwebspider hat geschrieben:Warte, was? Das hat doch nichts mit Lösen zu tun. Du willst Terme vereinfachen.akhof hat geschrieben:ich würde gerne soetwas machen wie:
wie z.B.:Code: Alles auswählen
eingabe = input("Eingabe: ") ergebnis = XXX(eingabe) print(ergebnis)
eingabe = "x²+x²" oder "x**2+x**2"
ergebnis = "2x²" oder "2x**2"
Du hast recht! die terme sollen vereinfacht werden
akhof
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Guck Dir doch mal sympy an - vielleicht gibt es da einen solchen Vereinfacher
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
nomnom hat geschrieben:Terme vereinfachen sollte mit SymPy gehen.
Edit: Hyperion war wohl schneller.
Danke!