Seite 2 von 3

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?

Re: Fibonacci-Sequenz darstellen

Verfasst: Sonntag 8. Februar 2015, 17:23
von Sirius3
So macht man das:

Code: Alles auswählen

         for x in xrange(rabbits):
            label = tk.Label(self.root, image=self.img)
            label.place(x=randint(1, 400), y=randint(1, 400))
            self.hasen.append(label)

Re: Fibonacci-Sequenz darstellen

Verfasst: Sonntag 8. Februar 2015, 17:32
von Xfd7887a
Super :D Da stand ich wohl auf dem Schlauch. Trotzdem kann ich mir nicht erklären, warum bei klicken auf "previous" kann Hase verschwindet. Das letze Listenelement wird doch mit "pop()" gelöscht, oder?

Re: Fibonacci-Sequenz darstellen

Verfasst: Sonntag 8. Februar 2015, 17:44
von BlackJack
@Xfd7887a: Das Element wird aus der Liste entfernt. Das ist alles. Du hast vorher ja nicht mal irgendeines der `Label`-Objekte in einer Liste aufgehoben und trotzdem wurden die dargestellt. Warum sollte das jetzt auf magische Weise anders sein? Du musst die Wigdets mit der dafür vorgesehenen Methode zerstören.

Die -1 beim `pop()`-Aufruf ist übrigens nicht notwendig, ohne Argument bezieht sich das auch auf das letzte Listenelement.

Re: Fibonacci-Sequenz darstellen

Verfasst: Sonntag 8. Februar 2015, 17:57
von Xfd7887a
@BlackJack Stimmt natürlich. Habe es jetzt mit der "destroy" Methode versucht. Klappt auch ganz gut, nur den ersten Hasen bekomme ich nicht weg :(

Edit: Außerdem fällt mir gerade auf, dass meine Folge 1 2 3 5 geht und nicht 1 1 2 3 5. Was habe ich da verändert?

Re: Fibonacci-Sequenz darstellen

Verfasst: Montag 9. Februar 2015, 09:48
von Xfd7887a
Habe das ganze aktualisiert, nun geht auch der erste Hase weg. Nur die Folge verhält sich komisch. Wenn ich das Programm starte und mehrmals auf "next" drücke, ergibt sich 1 2 3 5. Lösche ich dann hingegen alle Hasen und drücke erneut "next" ergibt sich 1 1 2 3 5.