Fibonacci-Sequenz darstellen
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
In Ordnung 
Hier noch mal der bisherige Stand:
Kann ich jetzt versuchen, eine GUI aufzusetzen?

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()
Ja. Dabei solltest du FibonacciIterator aber nirgends verändern.Xfd7887a hat geschrieben:Kann ich jetzt versuchen, eine GUI aufzusetzen?
Der Code ist ein wenig sinnlos:
Code: Alles auswählen
try:
fibonacci_sequence.previous()
except Exception as error:
assert isinstance(error, StopIteration)
Das Leben ist wie ein Tennisball.
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.
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?
@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.
Habe es aktualisiert: https://github.com/toxinman/zeug/blob/master/t.py. Aber in der Liste befinden sich nur "None"s
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)
@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.
Die -1 beim `pop()`-Aufruf ist übrigens nicht notwendig, ohne Argument bezieht sich das auch auf das letzte Listenelement.
@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?

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?
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.