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.
diver991
User
Beiträge: 8
Registriert: Mittwoch 26. Januar 2005, 14:54
Wohnort: Dresden

Fibonacci Sequence

Beitragvon diver991 » Mittwoch 26. Januar 2005, 15:22

:?:
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?
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Mittwoch 26. Januar 2005, 15:51

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 Modvoice
Benutzeravatar
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Beitragvon Dookie » Mittwoch 26. Januar 2005, 15:52

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: Alles auswählen

#!/usr/bin/env python
import this
diver991
User
Beiträge: 8
Registriert: Mittwoch 26. Januar 2005, 14:54
Wohnort: Dresden

Beitragvon diver991 » Mittwoch 26. Januar 2005, 16:06

Danke!
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Mittwoch 26. Januar 2005, 16:47

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

Beitragvon Dookie » Mittwoch 26. Januar 2005, 17:28

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: Alles auswählen

#!/usr/bin/env python
import this
Benutzeravatar
powerslide
User
Beiträge: 51
Registriert: Freitag 10. Dezember 2004, 09:05
Wohnort: Erlangen
Kontaktdaten:

Beitragvon powerslide » Donnerstag 27. Januar 2005, 08:55

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

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]