Seite 1 von 3
Re: Fibonacci-Sequenz darstellen
Verfasst: Samstag 7. Februar 2015, 15:08
von Xfd7887a
Danke

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

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?