Forum: PC-Programmierung Mathematische Funktion in Python


von Ole L. (olel)


Lesenswert?

Hallo,
ich bin gerade dabei mir ein kleines Skript zu schreiben, welches 
mathematische Funktionen plottet. Das Funktioniert auch schon sehr gut. 
Nun will ich aber das der Nutzer am anfang des Programms eingeben soll, 
welche funktion er denn geplottet haben möchte (bisher muss dafür der 
Code verändert werden). Also brauche ich eine Art Variable in der roher 
Code (sowas wie 2*pow(x,2)+2, oder so) drin steht, damit der Nutzer 
nicht bei jedem Neuaufruf der Funktion alles neu eingeben muss.

Gibt es so etwas?? Und wenn ja, wäre es super mir kurz zu erklären wie 
es geht

Danke und Grüße
Ole

von Keks (Gast)


Lesenswert?

Methoden/Funktionen??
Aber ich glaube ich hab die Frage nicht verstanden.

von Silvan K. (silvan) Benutzerseite


Lesenswert?

Die eingebaute Funktion "exec" ermöglicht die Ausführung von 
Python-Code, der in einem String gespeichert ist.
Du musst bei der Benutzung halt bedenken, dass dem Nutzer dadurch die 
Möglichkeit gegeben wird, eine beliebige Python-Funktion auszuführen. 
Die Verwendung dieser Funktion ist also nicht ganz sicher ;-)
1
a=1
2
exec( 'print(a+1)')
3
# Ausgabe: 2

von Ole L. (olel)


Lesenswert?

Vielen Dank. Hat mir sehr geholfen...

Grüße

von Yalu X. (yalu) (Moderator)


Lesenswert?

Man kann dynamisch auch eine Funktion erzeugen, die dann genauso wie
eine hartcodierte aufgerufen wird:

1
# Beispiel für Funktion mit den Argumenten x und y
2
3
# Funktionsausdruck definieren
4
expr = 'x*y'
5
6
# Daraus eine Funktion f erzeugen
7
f = eval('lambda x, y: ' + expr)
8
9
# Funktion aufrufen
10
z = f(2.5, 3.5)
11
12
print(z)

Da bei der eigentlichen Berechnung der Funktionswerte die langsame
eval-Funktion nicht mehr aufgerufen werden muss, ist diese Lösung sehr
schnell (sogar noch etwas schneller, als wenn man die Funktion mit

1
def f(x, y):
2
  return x * y

hartcodiert.

von Sebastian (Gast)


Lesenswert?

Wenn du in dem, was der Benutzer eingibt, nur Ausdrücke haben willst 
(also z.B. keine neu definierten Funktionen), dann passt eval besser als 
exec:
1
>>> import math
2
>>> names = dict(math.__dict__) # Kopie, damit das Original im folgenden nicht geändert wird
3
>>> names['x'] = 2
4
>>> eval('3*sin(x)', names)
5
2.727892280477045

Das dictionary von math brauchst du, wenn du in dem Ausdruck so 
Funktionen wie "sin" verwenden willst.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.