[Python] mathematischen Term/Funktion in Programm einlesen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
tegula
Beiträge: 440
Registriert: 04.06.2004 13:51:04
Lizenz eigener Beiträge: MIT Lizenz

[Python] mathematischen Term/Funktion in Programm einlesen

Beitrag von tegula » 11.06.2008 22:12:33

Hallo,
gibt es bei Python irgendeine Möglichkeit einen Term mit nur einer Variabel (z.B 5**x+5*x+3) aus der Eingabe direkt ist Programm zu nehmen.
Ich habe es so versucht:

Code: Alles auswählen

a = lambda x : input()
Aber das scheint nicht zu Klappen, da bei der Ausführung dieser Zeile der Benutzer noch nichts eingeben muss und bei der Ausführung eines darauf folgenden

Code: Alles auswählen

#hier muss/kann man dann erst etwas eingeben
a(zahl)
schon ein Wert vom Typ integer zurückgegeben wird, statt einem von Typ function oder so.

Weiß jemand hier vielleicht, was man da machen muss, damit es klappt?

Benutzeravatar
Mr_Snede
Beiträge: 2323
Registriert: 08.07.2003 13:48:49
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Ruhrpott

Re: [Python] mathematischen Term/Funktion in Programm einlesen

Beitrag von Mr_Snede » 11.06.2008 22:45:46

Jupp man kann mit Python einen Wert über die Kommandozeile einlesen und in einer Formel berechnen.

Code: Alles auswählen

PyCrust 0.9.5 - The Flakiest Python Shell
Python 2.5.2
>>> wert = 3
>>> ergebnis = 5*(wert*wert)+5*wert+3
>>> print ergebnis
>>> 63
Kannst du bitte deinen ganzen Quelltext zeigen? Wenn er länger ist, bitte nach NoPaste damit.
Software Finder - Software in Kategorien Debian ohne Ballast - Tipps für ein schlankes Debian

Benutzeravatar
tegula
Beiträge: 440
Registriert: 04.06.2004 13:51:04
Lizenz eigener Beiträge: MIT Lizenz

Re: [Python] mathematischen Term/Funktion in Programm einlesen

Beitrag von tegula » 11.06.2008 23:36:25

Hallo,
das Programm soll Nullstellen mit dem Newton-Verfahren berechnen.
Ich habe auch mal versucht Zeile 27 bis 31 wegzulassen. Ich haben dann Python im Interaktiven Modus gestartet und die die Variabeln Funktion und Ableitung direkt definiert und schließlich die newton-Funktion gestartet. Da kam auch nichts gescheides raus. Habe wohl auch im eigentlichen "Programmkern" Fehler gemacht.
Wäre cool wenn ihr mal gucken könntet was ich falsch gemacht habe.

http://nopaste.debianforum.de/8833

Benutzeravatar
Mr_Snede
Beiträge: 2323
Registriert: 08.07.2003 13:48:49
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Ruhrpott

Re: [Python] mathematischen Term/Funktion in Programm einlesen

Beitrag von Mr_Snede » 14.06.2008 11:41:55

hmm,
gib bitte mal eine Beispielfunktion incl Ableitung an, so wie du sie dir als Eingabe vorstellst.
... es könnte sein, dass das etwas komplizierter wird, als du es dir vorstellst.

spring mal rüber ins python-forum.de und schmeiß dort die Suche mit "Nullstelle" an.
Mindestens die Beiträge von Uruk-kai und Dookie (möge er in Frieden ruhen) sind lesenswert.

Du lernst Python gerade erst oder?

Code: Alles auswählen

File "newton_dfde.py", line 21
	if (i <= 10)
				   ^
SyntaxError: invalid syntax        
---> Da fehlt ein Doppelpunkt am Ende der Zeile

Warum jagst du input() durch eine Lambdafunktion?
Software Finder - Software in Kategorien Debian ohne Ballast - Tipps für ein schlankes Debian

Benutzeravatar
npi
Beiträge: 567
Registriert: 03.08.2003 17:52:10

Re: [Python] mathematischen Term/Funktion in Programm einlesen

Beitrag von npi » 14.06.2008 13:30:57

Wenn du nur Polynome als Funktionen hast, kannst du die Koeffizienten der Terme der Reihe nach einlesen, in ein Array schreiben und daraus dann den Wert der Funktion berechnen.

Alternativ könntest du die Funktion in ein python-File schreiben und dieses dann importieren.
zB so:

Code: Alles auswählen

f=raw_input("Bitte Funktion eingeben:")
tmp_file = open("tmp.py",'w')
tmp_file.write("def funktion(x):\n\treturn "+f)
tmp_file.close()
import tmp
Dann kannst du dir mit tmp.funktion() den Wert ausrechnen lassen zB

Code: Alles auswählen

x=4
y = tmp.funktion(x) 
Allerdings ist das wahrscheinlich ne weniger gute Idee, da du ja dann den User-Code direkt ausführst, es macht also dein Programm fehleranfälliger.

gruß,
npi
"Bis zur Unendlichkeit, und noch viel weiter!"
--Buzz, Toystory

dino
Beiträge: 19
Registriert: 26.04.2008 19:17:29

Re: [Python] mathematischen Term/Funktion in Programm einlesen

Beitrag von dino » 21.06.2008 12:41:31

oder so:

Code: Alles auswählen

from math import *
func_text = raw_input('f(x) = ')
eval(compile('def f(x): return %s' % func_text, 'function', 'exec'))

func_text = raw_input('f\'(x) = ')
eval(compile('def fa(x): return %s' % func_text, 'function', 'exec'))
newton(f, fa)

Antworten