Fibonacci Sequence

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
diver991
User
Beiträge: 8
Registriert: Mittwoch 26. Januar 2005, 14:54
Wohnort: Dresden

:?:
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?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

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
Zuletzt geändert von Dookie am Mittwoch 26. Januar 2005, 16:30, insgesamt 1-mal geändert.
[code]#!/usr/bin/env python
import this[/code]
diver991
User
Beiträge: 8
Registriert: Mittwoch 26. Januar 2005, 14:54
Wohnort: Dresden

Danke!
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Sowas, ich habe schon wieder schön kompliziert enumerate() nochmal programmiert. Shame on me!
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

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
[code]#!/usr/bin/env python
import this[/code]
powerslide
User
Beiträge: 51
Registriert: Freitag 10. Dezember 2004, 09:05
Wohnort: Erlangen
Kontaktdaten:

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
How many people can read hex if only you and dead people can read hex?

There are 10 types of people in the world: Those who understand binary, and those who don't...
Antworten