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:

Code: Alles auswählen

Serie 0 = 0
Serie 1 = 1
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