Wie verwendet man Plus als Python Variable?

GuteFrageXY13  19.06.2022, 21:36

Ist zweimal X statt Z Absicht und wieso willst du das Plus zu einer Variable machen?

Alex950130 
Fragesteller
 19.06.2022, 21:41

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.

Alex950130 
Fragesteller
 20.06.2022, 08:11

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

0
KarlRanseierIII  20.06.2022, 14:32
@Alex950130

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.

1

Dein Vorhaben geht nicht. Operatoren können nicht als Variable gesetzt werden

Alex950130 
Fragesteller
 19.06.2022, 22:04

Gibt es denn gar keine andere Möglichkeit?

0
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.

Woher ich das weiß:Berufserfahrung – Inhaber einer App-Agentur & 15+ Jahre Programmiererfahrung
GuteFrageXY13  19.06.2022, 21:39

Bringt es überhaupt was, "Plus" als String zu setzen?

0
Functional  19.06.2022, 21:40
@GuteFrageXY13

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.

0
Alex950130 
Fragesteller
 19.06.2022, 22:03

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.

0
Functional  19.06.2022, 22:05
@Alex950130

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
0
Functional  19.06.2022, 22:09
@Functional

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.

0
Alex950130 
Fragesteller
 20.06.2022, 07:58
@Functional

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.

0