Seite 1 von 1
Fibonacci Sequence
Verfasst: Mittwoch 26. Januar 2005, 15:22
von diver991
Hi!
Ich bin ein absoluter Newbie und fange gerade an mit Programmierung im allgemeinen und Python im besonderen.
Ich bin grad bei der Programmierung der Fibonacci Sequence
Code: Alles auswählen
def fibo(n):
... alist = [0,1]
... while len(alist) < n:
... alist.append(alist[-2] + alist[-1])
... return alist
...
>>> fibo(20)
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181]
Jetzt wuerde ich das Programm gerne so veraendern, das nach dem Ausdruck der Liste folgendes auf dem Bildschirm steht:
usw.
Koennt ihr mir dabei helfen? Bitte mit Erklaerung, da ich auch verstehen will.
Sorry fuer so eine simple Frage.
Diver
Edit (Leonidas): Code in Tags gesetzt. Vielleicht auch verschieben in Allgemeine Fragen?
Verfasst: Mittwoch 26. Januar 2005, 15:51
von Leonidas
Vier Zeilen hinzufügen:
Code: Alles auswählen
def fibolist():
flist = fibo(20)
for (series, number) in zip(range(1, len(flist) + 1), flist):
print "Serie %i = %i" % (series, number)
Damit haben wir eine neue Funktion, die genau das machst, was du wolltest.
Erst erstellen wir eine fibo-liste mit 20 Zahlen, dann gehen wir mit einer for Schleife durch. In der for Schleife zeigen wir schließlich die Werte an.
Verfasst: Mittwoch 26. Januar 2005, 15:52
von Dookie
Hi diver991,
da bietet sich ein Konstrukt mit enumerate an:
Code: Alles auswählen
fibos = fibo(20)
for i, n in enumerate(fibos):
print "Serie %3d = %d" % (i, n)
Zur Erklärung: enumerate macht aus einem Iterable (liste, tuple, ...) einen Iterator mit Paaren. Die Paare enthalten als erstes Element die Position und als zweites Element den Wert aus dem Iterable.
Code: Alles auswählen
>>> list(enumerate([0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55]))
[(0, 0),
(1, 1),
(2, 1),
(3, 2),
(4, 3),
(5, 5),
(6, 8),
(7, 13),
(8, 21),
(9, 34),
(10, 55)]
Diese werden dann nacheinander schön formatiert ausgegeben.
Gruß
Dookie
Verfasst: Mittwoch 26. Januar 2005, 16:06
von diver991
Danke!
Verfasst: Mittwoch 26. Januar 2005, 16:47
von Leonidas
Sowas, ich habe schon wieder schön kompliziert enumerate() nochmal programmiert. Shame on me!
Verfasst: Mittwoch 26. Januar 2005, 17:28
von Dookie
Hi nochmal,
fibo kann man aber auch mit einer Forschleife realisieren, dürfte etwas performanter sein.
Code: Alles auswählen
def fibo(n):
alist = [0, 1]
for i in xrange(2, n):
alist.append(alist[-2] + alist[-1])
return alist
Gruß
Dookie
Verfasst: Donnerstag 27. Januar 2005, 08:55
von powerslide
bzgl fibo hab ich noch folgenden interssanten code gefunden:
Code: Alles auswählen
def fib():
x = 0
y = 1
while 1:
x, y = y, x + y
yield x
if __name__ == '__main__':
g = fib()
for i in range(9):
print g.next()
print
mfg
slide