Variablen als Befehl nutzen

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
Cr4cker
User
Beiträge: 2
Registriert: Samstag 7. Februar 2015, 16:47

Hey,
ich schreibe ein Programm in dem die Eingabe als Rechnung verwendet werden soll. Bedeutet der Benutzer gibt z.b. 'calc:1+1' ein und dann wird die Lösung von 1+1 ausgegeben(calc ist der Befehl mit dem das Programm erkennt, dass es rechnen muss) So sieht es ungefähr aus:

Code: Alles auswählen

eingabe = input()

if ":" in eingabe:
  (befehl, rechnung) = eingabe.split(":", 1)
  if befehl == "calc":
    #jetzt der Teil mit dem Fehler!(es soll die Rechnung ausführen, aber weil die Variable ein string ist geht das natürlich nicht.
    rechnung
Meine Frage ist also ob man eine Variable zu einem Befehl machen kann oder wie man es sonst schaffen kann, dass die Rechnung ausgeführt wird! Danke für jede Hilfe

LG Cr4cker
Zuletzt geändert von Anonymous am Samstag 7. Februar 2015, 17:34, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Probier mal:

Code: Alles auswählen

import ast
ast.literal_eval(rechnung)
Das ist auf die Schnelle ganz praktisch, jedoch unsauber. Besser wäre es, einen Parser für mathematische Ausdrücke zu nutzen. Dazu müsste man dann aber entsprechend tiefer in das Thema einsteigen. Und man hätte auch deutlich mehr Code zu schreiben. Außer, man findet einen fertigen Mathe-Formel-Parser, der in einem Rutsch auch das Ergebnis ausspucken kann.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

@snafu: SymPy kann das. Das sind dann natürlich schon die richtig großen Geschütze.

Code: Alles auswählen

>>> import sympy.parsing.sympy_parser as parser
>>> parser.parse_expr("10+a").evalf(subs=dict(a=42))
52.0000000000000
Das Leben ist wie ein Tennisball.
Cr4cker
User
Beiträge: 2
Registriert: Samstag 7. Februar 2015, 16:47

Danke für die schnelle Antwort! Funktioniert super :D

LG
Antworten