Wie verwendet man Plus als Python Variable?
Ich möchte eine Rechnung ausführen. Aber eine mit Variablen. Beispielcode:
X="3"
Y="+"
Z="5"
print(X Y Z)
Dan funktioniert aber nicht. Meine Frage ist jetzt, wie schaffe ich es wenn es so nicht funktioniert?
Ich möchte das Plus zu einer Variable machen, da ich einen Taschenrechner programmiere und die Zeichen Variablen sind.
Liebe Grüße Alex950
Ist zweimal X statt Z Absicht und wieso willst du das Plus zu einer Variable machen?
Das ist nicht absichtlich. W
Meine Frage war aber auch mit dem Code richtig...
3 Antworten
Du mußt das entsprechende Zeichen auf den Operator abbilden. Dafür gibt es grundlegend verschiedene Ansätze und Möglichkeiten.
Hier die Problemverschiebevariante:
>>> a="3"
>>> b="+"
>>> c="9"
>>> eval(a+b+c)
12
Ich lasse also Python den String evaluieren, das ist nicht sonderlich schön, ist aber entsprechend einfach.
a=3
b=4
op="+"
match op:
case '+':
print(a+b)
case '-':
......
usw. usf. - Du könntest das natürlich auch in eien Funktion packen, die dann das passende zurückliefert.
Weitere Option:
>>> ops={'+':lambda x,y:x+y,'-':lambda x,y:x-y }
>>> ops['+'](3,4)
7
>>> ops['-'](9,12)
-3
Anstatt eines dicts, könnte man das selbst in eine Funktion packen.
Es gibt sicherlich noch mehr Optionen, wenn klar ist, was Du eigentlich genau brauchst.
Wie gesagt, die einfachste Variante ist eval(). Solange der String einen Ausdruck enthält, der auch von Python verstanden wird, klappt das problemlos.
Im komplexeren Fall mußt Du den String parsen (recursive descend parser) und evaluieren.
Dein Vorhaben geht nicht. Operatoren können nicht als Variable gesetzt werden
print(X + Y + Z)
Mit print(X Y Z) weiß Python nichts anzufangen. Du musst die einzelnen Strings miteinander verbinden, was in Python auch mit dem Plus-Operator (+) funktioniert.
Aber dann bekomme ich halt "3+5" als Ausgabe. Keine 8. Weil es halt Strings sind. Integers können es aber nicht sein da ich keine Strings mit Integers verbinden kann, und wenn als Integers sind, kann ein Plus kein Integer sein.
Ich verstehe nicht, worauf du hinaus willst. Willst du 3+8 berechnen und ausgeben, wäre das print(3 + 8). Wenn dein Plus ein String ist, kann Python damit nichts anfangen was Berechnungen angeht.
Wenn du - wieso auch immer - alles als String belassen willst, könntest du ein print(eval(X + Y + Z)) draus machen. Wenn in X, Y, oder Z aber Nutzereingaben stehen, wäre das ziemlich unsicher, da ein Nutzer damit dann jeglichen Code ausführen könnte, den er will. Es gibt da also definitiv eine bessere Lösung, die man anhand der begrenzten Infos hier aber nicht erraten kann.
Und Integers kannst du durchaus mit Strings verbinden:
x = 5
y = 8
print(x + y) # gibt 13 aus
print(str(x) + str(y)) # gibt 58 aus
Beziehungsweise anders herum, mit deinen X und Z Variablen, um diese zusammen zu rechnen:
print(int(X) + int(Z))
Damit werden die beiden Strings erst zu Integers konvertiert, dann zusammen addiert und ausgegeben.
Danke.
Diese eval() Methode hat geholfen und es funktioniert jetzt. Es gibt auch kein Ploblem, da die Eingabe eine Variable ist. Der Benutzer kannnur durch Buttons 9 Zahlen und 4 Zeichen hinzufügen.
Strings gemisscht ohne Rechen-Operatoren kann man aber ohne Konvertieren nicht verbinden:
print(int(x) + str(y) + int(z))
Diese Plusse habe ich aber nicht als String gemeint.
Die Mehode
print(int(x) + int(y)) nutze ich nicht da es, wie du schon erraten hast nutzerangaben sind.
Hängt davon ab, was man damit vor hat. Wenn es danach weiter verwendet und die Variable angepasst werden soll, sicherlich. Nur in diesem kleinen Codeschnipsel aber natürlich nicht, da würde auch print("3+5") reichen.
Danke auch. Ich brauche halt genau, das mir das auserechnet wird. Ich entwickle einen Taschenrechner. Soweit war ales in Ordnung. Nun drückt der Benutzer auf den "=" Button. Ich habe jetzt eine Variable, in der z. B. "5+45*65" steht. Ich soll diese Variable jetzt ausrechnen. Weiß aber niicht wie. Ich habe die Werten in eine Liste gepackt und frage jetzt, wie ih diese Werte ausrechnen soll. LB