Seite 1 von 1

Billiges Fibonacci Programm...Anfänger braucht Hilfe

Verfasst: Montag 18. August 2014, 19:28
von Püton
Guten Tag!

Ich habe mich heute bei Euch angemeldet, da ich derzeit versuche mich in Python einzulesen bzw es zu lernen.
Ich tippe den Code immer ab, versuche danach ein ähnliches Beispiel nachzuschreiben um auch den Sinn dahinter zu verstehen.
Wenn ich es mal nicht verstehe, gehe ich den Code so oft durch bis ich weiß welche Zeile was bewirkt.
Allerdings beiße ich mir die Zähne aus, da ich schon seit einer halben Stunde grüble und die Antwort wahrscheinlich doch so einfach ist.

PS: Suchfunktion hab ich benutzt, allerdings bekomm ich keine Ergebnisse die mir weiterhelfen können..

Vielleicht kann mir hier jemand erklären wie das Ergebnis zustande kommt:

Code: Alles auswählen

def fib_intervall(x):
    """returns the largest fibonacci
    number smaller than x and the lowest
    fibonacci number higher than x"""
    if x < 0:                               
        return -1
    (old,new, lub) = (0,1,0)
    while True:
        if new < x: 
            lub = new 
            (old,new) = (new,old+new) 
        else:
            return (lub, new) 

while True:
    x = int(input("Your number?: "))
    if x <= 0:
        break
    (lub,sup) = fib_intervall(x)
    print("Lagrest Fibonacci Number smaller than x: " + str(lub))
    print("Smallest Fibonacci Number larger than x: " + str(sup))
    
Ich habs Probeweise mit der Zahl 7 probiert..


Ich weiß, dass wenn ich 0 bzw eine negative Zahl eingebe nichts passiert.

Ich komm ums verrecken nicht ans Ergebnis.. :(

Re: Billiges Fibonacci Programm...Anfänger braucht Hilfe

Verfasst: Montag 18. August 2014, 19:37
von Hyperion
Was genau willst Du denn jetzt von uns wissen? Welche konkrete Frage hast Du? Der Code ist an sich nicht komplex oder kompliziert. Wo genau hast Du denn Schwierigkeiten?

Die Schreibweise mit den unnötigen Klammern um die Tupel wirkt allerdings unschön, und ``lub`` empfinde ich jetzt auch nicht so dolle - was soll das eigentlich heißen? "lowest upper bound"?

Re: Billiges Fibonacci Programm...Anfänger braucht Hilfe

Verfasst: Montag 18. August 2014, 19:46
von Sirius3
@Püton: die Funktion ist ziemlicher Schrott. Vielleicht wird die selbe Funktion in schöner, klarer:

Code: Alles auswählen

def fib_intervall(x):
    """returns the largest fibonacci
   number smaller than x and the lowest
   fibonacci number higher than x"""
    if x < 0:
        raise ValueError('x must be >= 0')
    prev_fib = 0
    next_fib = 1
    while next_fib < x:
        prev_fib, next_fib = next_fib, next_fib + prev_fib
        print(prev_fib, next_fib)
    return prev_fib, next_fib
Ich habe auch noch ein print eingebaut, das die einzelnen Schritte ausgibt.

Re: Billiges Fibonacci Programm...Anfänger braucht Hilfe

Verfasst: Montag 18. August 2014, 19:49
von Püton
Ich komme bis Zeile 7.
Hier wird old = 0, new = 1, und lub = 0 zugewiesen oder?
Dann beginnt die Endlosschleife (While True).
Hier wird abgefragt (if) ob new (das 1 ist?) kleiner als x(in diesem Fall 7)
ist.Zeile 10 überprüft: Wenn ja dann ist lub = new. Haben jetzt lub und new beide jeweils einen Wert von 1??
in Zeile 11 wird jetzt zu old der Wert von new addiert, in dem Fall auch 1.
Ich glaube das ich hier einfach eine falsche vorgehensweiße habe.
Wenn ich 7 eingebe ist die kleinere Fibonacci Zahl 5...Doch wie errechnet sich diese 5??

Das es für Dich einfach ist ist mir klar, nur ich glaube ich stehe grad extrem auf der Leitung...

EDIT: Oh Sirius3 gerade deine Antwort gesehn, werde mich nochmal dahinterklemmen und deinen Code durchgehen! Vorerst danke für die Hilfe!

Re: Billiges Fibonacci Programm...Anfänger braucht Hilfe

Verfasst: Montag 18. August 2014, 19:56
von Hyperion
@Püton: Auch wenn der obige Code nicht der dollste ist, so könntest Du ihn einfach mit ``print``s ergänzen, um Dir die einzelnen Schritte klar zu machen. Da musst Du nicht einmal raten :-)

Re: Billiges Fibonacci Programm...Anfänger braucht Hilfe

Verfasst: Freitag 22. August 2014, 20:37
von BlackJack
@Püton: Der Code ist übrigens fehlerhaft, nämlich genau dann wenn man eine Fibonacci-Zahl eingibt. Dann stimmen die ausgegeben Aussagen nicht.

Re: Billiges Fibonacci Programm...Anfänger braucht Hilfe

Verfasst: Montag 25. August 2014, 20:31
von bb1898
Püton hat geschrieben: Wenn ich 7 eingebe ist die kleinere Fibonacci Zahl 5...Doch wie errechnet sich diese 5??
Das klärst Du am besten, indem Du mal nachsiehst, wie die Fibonacci-Folge definiert ist (hier ist Wikipedia Deine Freundin, die erste Zeile des Artikels tut es schon). Die 5 ist hier völlig richtig.