Seite 2 von 2

Verfasst: Donnerstag 8. September 2005, 20:56
von jens
Ist ja auch klar, weil deine Funktion keine Parameter erwartet...

Code: Alles auswählen

def test():
  print txt

test( "geht nicht" )
Funktioniert nicht, weil es so gehen muß:

Code: Alles auswählen

def test( txt ):
  print txt

test( "das geht" )
Schau dir mal das an: http://www.pythonwiki.de/PythonDeForum/ ... 9b4deb0f74

Verfasst: Donnerstag 8. September 2005, 20:58
von XT@ngel
Hallo,
ich hab jetzt zwei Lösungen!
Einmal die mit deiner While Schleife natürlich ohne den Fehler (was immer das für ein fehler ist) und eine mit der xlrange() Funktion.

mawe hat dir verdammt viel geholfen und solangsam glaub ich, dass du im Unterrricht nicht aufgepasst hast? ;)
also meinst du jetzt ich soll das alles so eingeben
wo scheibst du das rein? In eine Datei?
dann kommt mal wieder eine fehermeldung
Und ich frage nochmal, was für einen Fehler teilt dir Python mit?
Sollen wir raten? Ist es ein SyntaxError?


MfG
Andreas

Verfasst: Donnerstag 8. September 2005, 21:04
von Gast
ich hab da jetzt mal was eingegeben, so wie ich das jetzt verstanden hab.. und dann kam

-4.5 7.71875
-4.0 7.71875
-4.0 7.71875

und dann immer mir -4.0 weiter. und es hat erst aufgehört, als ich es angealten hab o.O tja, vielleicht hätte ich doch kein informatik wählen sollen :x naja...
also ich hab schon aufgepasst. ich hab wie gesagt, dass alles von der tafel abgschrieben, und dann meinte er, ja und dann könnt ihr jetzt ne wertetabelle damit ausrechnen.... *argh* und dann hat er mit dem nächsten thema weitergemacht... :?
toll... :-(

Verfasst: Donnerstag 8. September 2005, 21:06
von jens
Da scheint wohl ein Fehler in der while-Schleife zu sein... Drum läuft's ewig... Prüfe einfach die Werte und achte darauf, ob while immer True ergibt...

Verfasst: Donnerstag 8. September 2005, 21:10
von Gast
also jetzt war es so, dass er halt alle zahlen von -4.5 bis 5.5 mit schrittweite 0.5 gemacht hat, aber dahinter hat er bei jeder zahl 7.71875 gemacht hat.
also:
-4.5 7.71875
-4.0 7.71875
-3.5 7.71875
usw.

Verfasst: Donnerstag 8. September 2005, 21:13
von mawe
Ich kann Dir schon sagen warum das passiert. Du hast in der while Schleife sicher

Code: Alles auswählen

x = -4.5 + 0.5
geschrieben, stimmts? Naja, da kommt immer -4.0 raus! ;)
Weisst Du was ich nicht ganz verstehe? Dein Lehrer hat Euch das an die Tafel geschrieben:

Code: Alles auswählen

def wertetabelle(a, b, sw):
    x = a
    while  x <= b:
        y = die funktion
        print x, y
        x = x + sw
Und warum tippst Du's nicht ganz einfach so ein? Ok, die funktion muss man noch ersetzen, aber ansonsten ist das das fertige programm!

Verfasst: Donnerstag 8. September 2005, 21:13
von XT@ngel
Also ich hab folgendes:

Code: Alles auswählen

x=-4.5 / y=50.11875
x=-4.0 / y=32.0
x=-3.5 / y=19.29375
x=-3.0 / y=10.8
x=-2.5 / y=5.46875
x=-2.0 / y=2.4
x=-1.5 / y=0.84375
x=-1.0 / y=0.2
x=-0.5 / y=0.01875
x=0.0 / y=0.0
x=0.5 / y=-0.00625
x=1.0 / y=0.0
x=1.5 / y=0.16875
x=2.0 / y=0.8
x=2.5 / y=2.34375
x=3.0 / y=5.4
x=3.5 / y=10.71875
x=4.0 / y=19.2
x=4.5 / y=31.89375
x=5.0 / y=50.0
x=5.5 / y=74.86875
müsste stimmen, wenn nicht :oops:

Verfasst: Donnerstag 8. September 2005, 21:23
von Gast
nicht ganz mawe. er hat erst die funktion und dann while.
ich weiß ja nich ob das irgendwie relevant ist, aber.. naja.. also ich krieg irgendwie nie die lösung...also so wie du, XT@ngel :oops: :cry: :?

Verfasst: Donnerstag 8. September 2005, 21:27
von Gast
Jo hab grad festgestellt das ich die Formel falsch hab....
hab die von mawe 1 zu 1 kopiert ohne dein post zu lesen :D

Verfasst: Donnerstag 8. September 2005, 21:31
von mawe
Ja, das ist schon relevant.

Code: Alles auswählen

def wertetabelle(a, b, sw):
    x = a
    y = die funktion
    while  x <= b:
        print x, y
        x = x + sw 
Hier wird y nur einmal berechnet, nämlich für den Startwert a.
Wenn Du's innerhalb der while Schleife schreibst, wird's für jeden x-Wert neu berechnet, und so solls ja sein ;)
So, und damit der Abend doch noch erfolgreich endet, hier die Lösung:

Code: Alles auswählen

def wertetabelle(a, b, sw):
    x = a
    while  x <= b:
        y = 0.1*x**4 - 0.1*x**3 - 2.4*x**2 + 0.4*x + 8
        print x, y
        x = x + sw 

wertetabelle(-4.5, 5.5, 0.5)

Verfasst: Donnerstag 8. September 2005, 21:52
von Gast
ja danke sehr...
:)

Verfasst: Donnerstag 8. September 2005, 22:00
von mawe
@XT@ngel: Deine Werte können nicht stimmen. Für x=0 müsste y = 0.1*x**4 - 0.1*x**3 - 2.4*x**2 + 0.4*x + 8 eigentlich 8 ergeben.

Verfasst: Freitag 9. September 2005, 09:38
von Leonidas
Ich hätte es ja so gelöst, das macht mehr Eindruck (finde ich) und ist auch irgendwie simpler (bis auf das xlrange, aber das versteht man auch):

Code: Alles auswählen

#!/usr/bin/env python
# -*- encoding: latin-1 -*-

def xlrange(start,stop=None,step=1):
    """xlrange([start=0,]stop[,step=1]) --> iterator object like xrange for longs"""
    if stop==None:
        stop=start
        start=0
    if step>0:
        while start<stop:
            yield start
            start+=step
    elif step<0:
        while start>stop:
            yield start
            start+=step
    else:
        raise ValueError, "xlrange() arg 3 (step) must not be zero"

def process(x):
    return 0.1 *x ** 4 - 0.1 * x ** 3 - 2.4 * x ** 2 + 0.4 * x + 8

def wertetabelle(start, stop, step):
    for x in xlrange(start, stop + step, step):
        print "x=%0.1f\t y=%0.5f" % (x, process(x))

if __name__ == '__main__':
    wertetabelle(-4.5, 5.5, 0.5)
gibt

Code: Alles auswählen

x=-4.5   y=7.71875
x=-4.0   y=0.00000
x=-3.5   y=-3.50625
x=-3.0   y=-4.00000
x=-2.5   y=-2.53125
x=-2.0   y=0.00000
x=-1.5   y=2.84375
x=-1.0   y=5.40000
x=-0.5   y=7.21875
x=0.0    y=8.00000
x=0.5    y=7.59375
x=1.0    y=6.00000
x=1.5    y=3.36875
x=2.0    y=0.00000
x=2.5    y=-3.65625
x=3.0    y=-7.00000
x=3.5    y=-9.28125
x=4.0    y=-9.60000
x=4.5    y=-6.90625
x=5.0    y=0.00000
x=5.5    y=12.46875
aus.

Verfasst: Freitag 9. September 2005, 10:21
von XT@ngel
@mawe
xt@ngel als gast hat geschrieben:Jo hab grad festgestellt das ich die Formel falsch hab....
hab die von mawe 1 zu 1 kopiert ohne dein post zu lesen :D
:roll:

Noch eine Lösung

Verfasst: Freitag 9. September 2005, 14:07
von 1-1-1
Hallo Jeanne!

Erstens ist es gut, daß Du Fragen dort stellst, wo auch qualifizierte Antworten zu erwarten sind; nur dadurch kannst Du eine Programmiersprache erlernen und später richtig anwenden ...

Zweitens möchte ich Dir eine (wiederverwertbare) Lösung liefern, ohne die Keule der OOP objektorientierten Programmierung auszupacken.

Code: Alles auswählen

def funktion(x): #1
    return (0.1*(x**4)) - (0.1*(x**3)) - (2.4*(x**2)) + (0.4*x) + 8.0 #2

def wertetabelle(f,start,stop,schritt): #3
	h = start #4
	while h <= stop: #5
		print h,'   ',f(h) #6
		h += schritt #7

wertetabelle(funktion,-4.5,5.5,0.5) #8
#1: Die Funktion "funktion" definiere ich selbständig, ist immer gut!
#2: Schaut zwar nach zu vielen Klammern aus, kann manchmal aber
hilfreich sein, wenn Du unerwartete Ergebnisse bekommst.
#3: Hier die Wertetabelle. Der erste Parameter ist die Funktion "f".
#4: "h" ist der momentane Schrittwert beginnend mit "start"
#5: Die "while"-Anweisung solange "h" kleiner oder gleich Endwert
#6: Ausgabe der momentanen "x"/"y"-Paares
#7: Erhöhen um Schrittweite (bzw. h = h + schritt)
#8: Aufruf der "wertetabelle". Der erste Parameter ist die Funktion
  • Ergebnisse:
    -4.5 7.71875
    -4.0 1.7763568394e-015
    -3.5 -3.50625
    -3.0 -4.0
    -2.5 -2.53125
    -2.0 8.881784197e-016
    -1.5 2.84375
    -1.0 5.4
    -0.5 7.21875
    0.0 8.0
    0.5 7.59375
    1.0 6.0
    1.5 3.36875
    2.0 8.881784197e-016
    2.5 -3.65625

    3.0 -7.0
    3.5 -9.28125
    4.0 -9.6
    4.5 -6.90625
    5.0 0.0
    5.5 12.46875
Mein Ziel war nicht(!) die Lösung Deiner Hausaufgabe. Du hattest Probleme, bei den Grundlagen und bei der Realisierung.
Meine "Hausaufgabe" an Dich: Diese paar Zeilen Quelltext verstehen! Das hast Du geschafft, wenn Du dieses kleine Grundgerüst für andere Aufgaben mal schnell umstricken kannst.

Viel Spaß

Michael

Verfasst: Freitag 9. September 2005, 14:27
von mawe
@XT@ngel: Sorry, hab nicht gewusst dass Du das warst (war gestern einfach schon zu spät für mich :))

Verfasst: Freitag 9. September 2005, 23:29
von BlackJack
Leonidas hat geschrieben:Ich hätte es ja so gelöst, das macht mehr Eindruck (finde ich) und ist auch irgendwie simpler (bis auf das xlrange, aber das versteht man auch):

Code: Alles auswählen

#!/usr/bin/env python
# -*- encoding: latin-1 -*-

def xlrange(start,stop=None,step=1):
    """xlrange([start=0,]stop[,step=1]) --> iterator object like xrange for longs"""
Wollte nur mal anmerken das die Doku zu der Funktion etwas zu einschränkend ist. Wie man in diesem Fall sieht ist sie nicht auf `long` beschränkt sondern funktioniert auch prima mit `float`.

Verfasst: Samstag 10. September 2005, 12:34
von Leonidas
BlackJack hat geschrieben:Wollte nur mal anmerken das die Doku zu der Funktion etwas zu einschränkend ist. Wie man in diesem Fall sieht ist sie nicht auf `long` beschränkt sondern funktioniert auch prima mit `float`.
Ja, durchaus, aber ich habe sie einfach 1:1 von Milan kopiert ohne mir über die Doku Gedanken zu machen.