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.
ich würde gerne durch eine Eingabe des Nutzer eine Berechnung durchführen. Allerdings sollte die Eingabe durch Variablen erfolgen. In einer Liste oder Dictionary sollen die Variablen mit den entsprechenden Werten abgespeichert sein.
Ein einfaches Beispiel:
eval() würde ich nicht verwenden, weil die Benutzer da alles Mögliche eingeben (und ausführen!) können, um auf deinem Rechner Schaden anzurichten.
Statt dessen benutze entweder ast.literal_eval() oder bau dir einen einfachen Interpreter für arithmetische Formeln. Zum Beispiel nach dieser Anleitung: https://www.booleanworld.com/building-r ... n_grammars
Vielen Dank für die Antwort.
Leider kann ich Pardon nicht benutzen, ich arbeite mit Python 3.9. Trotzdem sehr guter Ansatz, wird mir sehr hilfreich sein.
Um nochmals mein Problem etwas genauer zu schildern:
Der User soll bspw. durch die Eingabe (Input) von
@Expanse: Wie sollen denn die Eingaben genau aussehen? Wir sind ja bisher davon ausgegangen, dass da beliebige Ausdrücke mit den Operatoren "+", "-", "*", und "/" stehen dürfen und das Punkt- vor Strichrechnung gilt. Vielleicht solltest Du erst einmal *genau* spezifizieren was das Programm am Ende können soll. Inklusive was passieren soll wenn der Benutzer etwas falsches eingibt.
So wie Du Dir das mit ``if`` und ``relif`` gedacht hast, wird das sicher nicht funktionieren, denn wenn der Benutzer "A + B" eingibt, dann ist das nicht im Wörterbuch und "+" wäre auch in "+" enthalten, oder in "+AB" oder "AB+".
“It is easier to optimize correct code than to correct optimized code.” — Bill Harlan
Das Problem ist eigentlich, dass ich eine Sammlung von Variablen habe, mit denen ich Rechenoperationen durchführen lassen will (durch den User).
Die Variablen (A, B, C ... G) sind float-Werte (+ und - ) und sollen entweder in einer Liste oder Dictionary aufgelistet sein. Bisher bin ich mit Dictionary besser voran gekommen.
Die Rechenoperationen sollen einfachste Rechnungen sein: Add und Sub. Mul und Div wären Zusatz und kein Muss, in meinem Fall. Genauso auch mathematische Regeln wie Minus-Klammer kein muss.
Du musst dir eben einen parser schreiben. Wenn weder Klammern noch andere Operatoren ausser + und - vorkommen, ist das ja trivial: du tokenisierst die Eingabe, und gehst die von links nach rechts durch. Am Anfang ist das Ergebnis 0, die erste Variable setzt es dann auf den Wert der Variablen, dann kommt ein Operator, den du dir merkst, und dann kommt die naechste Variable, und zusammen mit dem Operator berechnest du das neue Ergebnis. Etc.
Ja genau, so habe ich es anfangs auch gemacht. Allerdings soll jede Berechnung mit einer einzigen Eingabe erfolgen (also in einer Zeile).
Also: A + B + C
und nicht als getrennte Inputs:
A
+
B
+
C
Gibt es hierzu auch eine Möglichkeit? Mit der split() Funktion habe ich auch versucht. Bin damit aber auch nicht weitergekommen
Ja, aber input ist mit einer For-Schleife der Länge einer bestimmten Liste verknüpft. Der User soll dementsprechend die Variablen bzw. Variablenberechnungen eingeben können und die Ergebnisse sollen wiederum in einer Liste abgespeichert werden. Deswegen müsste jede Berechnung in einer Zeile erfolgen
@Expanse: Ich verstehe nicht so recht was Du uns damit sagen willst. __deets__ hat beschrieben wie man für eine Rechnung vorgehen muss. Wenn Du das hast, kannst Du das ja ganz einfach für jede Zeile aufrufen.
“It is easier to optimize correct code than to correct optimized code.” — Bill Harlan