Fibonacci-Folge

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
Vision0605
User
Beiträge: 3
Registriert: Donnerstag 25. März 2021, 15:50

Hallo Zusammen.
Ich habe kurz eine Frage. Ich mache für die Schule ein Projekt in dem ich die Fibonacci-Folge programmiere mit Python.
Ich habe zwar ein Skript aber ich verstehe es nicht ganz da ich noch nicht 100% mit der Sprache vertraut bin... könnte mir die einzelnen Befehle erklären warum sie funktionieren und das tun was sie tun? Danke schon im voraus.

Code: Alles auswählen

nterms = int(input("How many terms? "))
et first two terms n1, n2 = 0, 1

count = 0
if nterms <= 0:
print("Please enter a positive integer") elif nterms == 1:
print("Fibonacci sequence upto",nterms,":") print(n1)
else:
print("Fibonacci sequence:")
while count < nterms:
print(n1)
nth = ni + n2
ni = n2
n2 = nth
count += 11
Sirius3
User
Beiträge: 17703
Registriert: Sonntag 21. Oktober 2012, 17:20

Das Skript funktioniert gar nicht, weil weder die Einrückungen, noch die Zeilenumbrüche stimmen. Beides ist in Python wichtig.
›et first two terms n1‹ ist auch kein gültiges Python.
Dann ist `ni` nicht definiert. Und warum wird `count` jeweils um 11 erhöht?
Variablen initialisiert man erst, wenn man sie braucht, und nicht 6 Zeile davor in auf einer ganz anderen Ebene.
Der Fall nterms == 1 ist nicht besonders, sondern schon im else-Block inbegriffen.
Man benutzt keine kryptischen Abkürzungen, das n in nterms sollte ausgeschrieben werden.
`nth` ist ein überflüssiger Zwischenschritt.
Statt der while-Schleife würde man eine for-Schleife benutzen.

Code: Alles auswählen

number_of_terms = int(input("How many terms? "))

if number_of_terms <= 0:
    print("Please enter a positive integer")
else:
    print(f"Fibonacci sequence upto {number_of_terms}:")
    n1, n2 = 0, 1
    for _ in range(number_of_terms):
        print(n1)
        n1, n2 = n2, n1 + n2
Und was konkret verstehst Du an dem Code nicht?
Vision0605
User
Beiträge: 3
Registriert: Donnerstag 25. März 2021, 15:50

Erst mal danke!
Es ging mir weniger um die Zeilenumbrüche, es wurde beim einfügen verschoben. Im Allgemeinen verstehe ich einzelne Befehle, aber der Mathematische Prozess und dieses "elif nterms" habe ich nicht verstanden... :wink: Zudem verstand ich andere dinge nicht. Könnten sie schritt für schritt erklären was geschieht?
TimelordBob
User
Beiträge: 1
Registriert: Donnerstag 1. April 2021, 22:54

Die Fibonacci-Folge ist eine Zahlenfolge bei der die Summe zweier aufeinanderfolgende Zahlen (1. und 2. Vorgänerzahl) die unmittelbar folgende Zahl ergibt. Gestartet wird mit der 0 und 1.

Code: Alles auswählen

# input() gibt einen Text aus und erwartet eine Benutzereingabe. Diese wird als String (Zeichenkette) zurückgegeben.
# int() wandelt diesen Text in ein Integer (ganze Zahl) um
# diese Zahl wird in der Variable 'nterms' gespeichert
# Wieviele Elemente der Fibonacci-Reihe sollen ausgegeben werden?
nterms = int(input("How many terms? ")) 

# das war warscheinlich ursrünglich ein Kommentar
# et first two terms 

# Die beiden ersten Zahlen der Fibonacci-Reihe werden in Variablen gespeichert
# 'n1' enthält den Wert 0
# 'n2' enthält den Wert 1
n1, n2 = 0, 1

# Eine Zählvariable wird festgelegt mit der man die Anzahl der Schleifendurchläufe zählen kann
count = 0

# wenn der Inhalt der Variable 'nterms' kleiner oder gleich null ist ...
if nterms <= 0:

    # Ein Text wird ausgegeben
    print("Please enter a positive integer") 

# sonst, wenn ('elif' ist eine Abkürzung von 'else if') der Inhalt der Variable 'nterms' gleich 1 ist
elif nterms == 1:

    # Ein Text wird ausgegeben
    print("Fibonacci sequence upto",nterms,":") 

    # Das erste Element der Fibonacci-Reihe wird ausgegeben
    print(n1)
	
# sonst ... (wenn 'nterms' größer 1 ist ...)
else:
    
    # Eine Textausgabe
    print("Fibonacci sequence:")
	
    # solange der Wert der Zählvariable 'count' kleiner ist als der der Variable 'nterms'
    while count < nterms:
	
        # drucke die erste Zahl aus
        print(n1)
		
        # 'nth' ist der Nachfolger von der 1. und 2. Zahl (also deren Summe)
        nth = n1 + n2
		
        # wir rutschen die Reihe weiter hoch, die 2. Zahl wird zur 1. Zahl (also Vorgängerzahl 1)
        n1 = n2
		
        # der ehemalige Nachfolger wird zur 2. Vorgängerzahl
        n2 = nth
		
        # Die Zählvariable wird um eins erhöht.
        count += 1
Ein Beispiel:

0, 1, 1, 2, 3, 5, 8, 13, 21, 34 sind die ersten 10 Zahlen der Fibonacci-Reihe. Wir nehmen mal an der Benutzer hat eine 10 eingegebn.
Im Programm läuft fogendes ab:
- nterms = 10
- n1 = 0 (erste Zahl der Folge)
- n2 = 1 (zweite Zahl der Folge)
- count = 0
- das Programm schaut ob 'nterms' kleiner oder gleich 0 ist
- der Inhalt von 'if nterms <= 0' wird übersprungen, da 'nterms' > 0 ist
- das Programm schaut ob 'nterms' gleich 1 ist
- der Inhalt von 'if nterms == 1' wird übersprungen, da 'nterms' > 0 ist
- der Inhalt von 'else' wird ausgeführt
- 'Fibonacci sequence:' wird ausgegeben
- das Programm schaut ob 'count' kleiner als 'nterms' ist
- da 0 < 10 wird die while Schleife ausgeführt
- n1 (0) wird ausgegeben (1. Element der Reihe)
- nth = n1 + n2 wird zu nth = 0 + 1 (Die Summe der Vorgängerzahlen ergeben ihren Nachfolger)
- nth = 1 (Das ist jetzt die 3. Zahl der Folge)
- um die 4. Zahl der Folge, im nächsten Schleifendurchlauf, zu berechnen ändern sich jetzt die Vorgängerzahlen
- n1 = n2 wird zu n1 = 1 (2. Zahl der Folge)
- n2 = nth wird zu n2 = 1 (3. Zahl der Folge)
- zur Zählvariable 'count' wird 1 hinzuaddiert (count += 1 ist das Gleiche wie count = count + 1)
- count = 0 + 1 = 1

- es beginnt ein neuer Schleifendurchlauf

- das Programm schaut ob 'count' kleiner als 'nterms' ist
- da 1 < 10 wird die while Schleife ausgeführt
- n1 (1) wird ausgegeben (2. Element der Reihe)
- nth = n1 + n2 wird zu nth = 1 + 1 (Die Summe der Vorgängerzahlen ergeben ihren Nachfolger)
- nth = 2 (Das ist jetzt die 4. Zahl der Folge)
- um die 5. Zahl der Folge, im nächsten Schleifendurchlauf, zu berechnen ändern sich jetzt die Vorgängerzahlen
- n1 = n2 wird zu n1 = 1 (3. Zahl der Folge)
- n2 = nth wird zu n2 = 2 (4. Zahl der Folge)
- zur Zählvariable 'count' wird 1 hinzuaddiert (count += 1 ist das Gleiche wie count = count + 1)
- count = 1 + 1 = 2

- es beginnt ein neuer Schleifendurchlauf
...

ansonsten kann ich mich meinem Vorredner nur anschließen.
Vision0605
User
Beiträge: 3
Registriert: Donnerstag 25. März 2021, 15:50

Danke viel Mals. Deine Erklärung war perfekt und jetzt verstehe ich alles und kann es auch anderweitig anwenden. Schönen Tag noch
Benutzeravatar
/me
User
Beiträge: 3552
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Vision0605 hat geschrieben: Donnerstag 6. Mai 2021, 14:51 Danke viel Mals. Deine Erklärung war perfekt und jetzt verstehe ich alles und kann es auch anderweitig anwenden.
Anders ausgedrückt: Wenn der Lehrer jetzt fragt, dann kann ich wahrscheinlich erfolgreich so tun, als hätte ich den Code, den ich von irgendwoher kopiert habe, selber geschrieben.
Antworten