Seite 1 von 1

Fibonacci-Folge

Verfasst: Donnerstag 25. März 2021, 15:57
von Vision0605
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

Re: Fibonacci-Folge

Verfasst: Samstag 27. März 2021, 21:50
von Sirius3
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?

Re: Fibonacci-Folge

Verfasst: Donnerstag 1. April 2021, 14:44
von Vision0605
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?

Re: Fibonacci-Folge

Verfasst: Freitag 2. April 2021, 00:06
von TimelordBob
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.

Re: Fibonacci-Folge

Verfasst: Donnerstag 6. Mai 2021, 14:51
von Vision0605
Danke viel Mals. Deine Erklärung war perfekt und jetzt verstehe ich alles und kann es auch anderweitig anwenden. Schönen Tag noch

Re: Fibonacci-Folge

Verfasst: Donnerstag 6. Mai 2021, 21:39
von /me
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.