Seite 1 von 3

Re: Fibonacci-Sequenz darstellen

Verfasst: Samstag 7. Februar 2015, 15:08
von Xfd7887a
Danke :D Habe es zu:

Code: Alles auswählen

 for i in range(10):
        print i, fibonacci_sequence.next()
   
    print fibonacci_sequence.get()
 
    for i in reversed(range(9)):
        print i, fibonacci_sequence.previous()
   
geändert.

Re: Fibonacci-Sequenz darstellen

Verfasst: Samstag 7. Februar 2015, 17:03
von Sirius3
@Xfd7887a: wunderbar, jetzt hast Du Python3-Variante von xrange und das print von Python 2. Was ist der Vorteil der get-Methode? tmp ist unnötig, weil man die Rechnung auch kürzer als

Code: Alles auswählen

self.a, self.b = self.b, self.a + self.b
schreiben kann.

Re: Fibonacci-Sequenz darstellen

Verfasst: Samstag 7. Februar 2015, 17:10
von Xfd7887a
Die aktualisierte Version:

Code: Alles auswählen

class FibonacciIterator(object):
    def __init__(self):
        self.a = self.b = 1

    def next(self):
        self.a, self.b = self.b, self.a + self.b
        return self.a

    def previous(self):
        self.a, self.b = self.b - self.a, self.a
        return self.a

    def __str__(self):
        return "{} {}".format(self.a, self.b)


def main():
    fibonacci_sequence = FibonacciIterator()
    print fibonacci_sequence.a

    for i in xrange(10):
        print i, fibonacci_sequence.next()
   
    print fibonacci_sequence.a
 
    for i in reversed(xrange(9)):
        print i, fibonacci_sequence.previous()
   
    try:
        fibonacci_sequence.previous()
    except Exception as error:
        assert isinstance(error, StopIteration)

if __name__ == "__main__":
    main()

Re: Fibonacci-Sequenz darstellen

Verfasst: Sonntag 8. Februar 2015, 09:59
von Xfd7887a
Muss ich nun den Number Overflow auch in Python beachten?

Re: Fibonacci-Sequenz darstellen

Verfasst: Sonntag 8. Februar 2015, 10:44
von darktrym
Gib doch mal in der Konsole 2**512 ein und was da kommt, klärt vermutlich deine Frage.

Re: Fibonacci-Sequenz darstellen

Verfasst: Sonntag 8. Februar 2015, 10:48
von Xfd7887a
Ja, da kommt "13407...96L" raus. Steht das L am Ende für "long"? Und wie kann ich dieses abfangen?

Re: Fibonacci-Sequenz darstellen

Verfasst: Sonntag 8. Februar 2015, 11:05
von darktrym
Ja. Mach daraus einen String.

Re: Fibonacci-Sequenz darstellen

Verfasst: Sonntag 8. Februar 2015, 11:21
von Xfd7887a

Code: Alles auswählen

    def next(self):
        if str(self.a + self.b)[-1] == "L":
            return ...
        self.a, self.b = self.b, self.a + self.b
        return self.a

    def previous(self):
        if self.b == 1:
            return ...
        self.a, self.b = self.b - self.a, self.a
        return self.a
Sorry wegen meinen vielen Fragen, aber was muss ich jetzt zurückgeben?

Re: Fibonacci-Sequenz darstellen

Verfasst: Sonntag 8. Februar 2015, 11:25
von EyDu
Du willst da ein Problem lösen, welches gar nicht existiert. Integer können in Python beliebig groß werden. Zumindest so groß, bis dein Arbeitsspeicher voll ist.

Re: Fibonacci-Sequenz darstellen

Verfasst: Sonntag 8. Februar 2015, 11:29
von Xfd7887a
Also kann ich dieses Problem doch ignorieren?

Re: Fibonacci-Sequenz darstellen

Verfasst: Sonntag 8. Februar 2015, 11:31
von EyDu
Nee. Es gibt da kein Problem das du ignorieren könntest ;-)

Re: Fibonacci-Sequenz darstellen

Verfasst: Sonntag 8. Februar 2015, 11:40
von Xfd7887a
In Ordnung :D
Hier noch mal der bisherige Stand:

Code: Alles auswählen

class FibonacciIterator(object):
    def __init__(self):
        self.a = self.b = 1

    def next(self):
        self.a, self.b = self.b, self.a + self.b
        return self.a

    def previous(self):
        self.a, self.b = self.b - self.a, self.a
        return self.a

    def __str__(self):
        return "{} {}".format(self.a, self.b)


def main():
    fibonacci_sequence = FibonacciIterator()
    print fibonacci_sequence.a

    for i in xrange(10):
        print i, fibonacci_sequence.next()
   
    print fibonacci_sequence.a
 
    for i in reversed(xrange(9)):
        print i, fibonacci_sequence.previous()
   
    try:
        fibonacci_sequence.previous()
    except Exception as error:
        assert isinstance(error, StopIteration)

if __name__ == "__main__":
    main()
Kann ich jetzt versuchen, eine GUI aufzusetzen?

Re: Fibonacci-Sequenz darstellen

Verfasst: Sonntag 8. Februar 2015, 11:45
von EyDu
Xfd7887a hat geschrieben:Kann ich jetzt versuchen, eine GUI aufzusetzen?
Ja. Dabei solltest du FibonacciIterator aber nirgends verändern.

Der Code ist ein wenig sinnlos:

Code: Alles auswählen

try:
    fibonacci_sequence.previous()
except Exception as error:
    assert isinstance(error, StopIteration)
Da kann gar keine StopIteration auftreten. Und wenn du nur die StopIteration-Exception abfangen willst, dann kannst du das einfach in die dritte Zeile schreiben.

Re: Fibonacci-Sequenz darstellen

Verfasst: Sonntag 8. Februar 2015, 12:00
von BlackJack
An der Stelle sollte aber eine `StopIteration` auftreten können, zumindest Ich würde den Code nämlich nicht vor den Häschen-Urknall ins Negative laufen lassen sondern in dem Fall eine Ausnahme auslösen.

Re: Fibonacci-Sequenz darstellen

Verfasst: Sonntag 8. Februar 2015, 12:26
von Xfd7887a
OK, also kann ich nun versuchen eine GUI draufzusetzen. Da ich damit wenig erfahren bin, werden hier sicherlich noch einige Fragen meinerseits folgen :)

Re: Fibonacci-Sequenz darstellen

Verfasst: Sonntag 8. Februar 2015, 16:37
von Xfd7887a
Mein bisheriger Stand: https://github.com/toxinman/zeug/blob/master/t.py. Wie schaffe ich es nun, dass der Screen bei jedem Klicken auf "next" oder "previous" aktualisiert wird? Ist dieses ständige aktualisieren überhaupt eine gute Idee?

Re: Fibonacci-Sequenz darstellen

Verfasst: Sonntag 8. Februar 2015, 16:52
von BlackJack
@Xfd7887a: Du müsstest Dir die `Label`-Exemplare irgendwo merken, zum Beispiel in einer Liste und dann jeweils die Differenz zwischen der Anzahl der `Label` und der Anzahl der darzustellenden Hasen an neuen `Label`-Exemplaren zusätzlich erstellen oder zerstören.

Re: Fibonacci-Sequenz darstellen

Verfasst: Sonntag 8. Februar 2015, 17:01
von Xfd7887a
Habe es aktualisiert: https://github.com/toxinman/zeug/blob/master/t.py. Aber in der Liste befinden sich nur "None"s

Re: Fibonacci-Sequenz darstellen

Verfasst: Sonntag 8. Februar 2015, 17:03
von Sirius3
@Xfd7887a: da sind Nones drinnen, weil Du den Rückgabewert von place in die Liste schreibst.

Re: Fibonacci-Sequenz darstellen

Verfasst: Sonntag 8. Februar 2015, 17:06
von Xfd7887a
Habe das place jetzt entfernt. Muss ich jetzt noch eine eigene Methode zur Darstellung der Liste schreiben oder wie macht man das?