Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
talit:generators [2025-08-15 07:36] – [Aufgabe 4: Pre-Order Traversierung] hoftalit:generators [2026-04-27 12:48] (aktuell) hof
Zeile 1: Zeile 1:
 # Iteratoren und Generatoren in Python # Iteratoren und Generatoren in Python
- 
-<html><script type="module" src="https://bottom.ch/ksr/ed/bottom-editor.js"></script></html> 
    
 Eine [[wpde>Folge_(Mathematik)|Folge]] ist in der Mathematik _eine Auflistung von endlich oder unendlich vielen fortlaufend nummerierten Objekten (beispielsweise Zahlen)_. Nur, wie gehen wir praktisch in Python mit dieser Unendlichkeit um? Und könnte uns das Prinzip auch anderweitig weiterhelfen? Eine [[wpde>Folge_(Mathematik)|Folge]] ist in der Mathematik _eine Auflistung von endlich oder unendlich vielen fortlaufend nummerierten Objekten (beispielsweise Zahlen)_. Nur, wie gehen wir praktisch in Python mit dieser Unendlichkeit um? Und könnte uns das Prinzip auch anderweitig weiterhelfen?
Zeile 13: Zeile 11:
 Unser erster Versuch: Schreibe eine Funktion, die die ersten `n` Elemente der Fibonacci-Folge generiert und in einer Liste zurückgibt. Untenstehender Code funktioniert nur für $n\le10$ -- ändere den Code so, dass er für beliebig grosse $n$ das richtige Resultat zurückgibt! Unser erster Versuch: Schreibe eine Funktion, die die ersten `n` Elemente der Fibonacci-Folge generiert und in einer Liste zurückgibt. Untenstehender Code funktioniert nur für $n\le10$ -- ändere den Code so, dass er für beliebig grosse $n$ das richtige Resultat zurückgibt!
  
-<html><bottom-editor>def fibonacci(n=10):+<bottom-editor>def fibonacci(n=10):
     first_few = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]     first_few = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
     result = []     result = []
Zeile 20: Zeile 18:
     return result     return result
  
-print(fibonacci(10))</bottom-editor></html>+print(fibonacci(10))</bottom-editor>
  
 <nodisp 0> <nodisp 0>
Zeile 59: Zeile 57:
 Analysiere den untenstehenden Code und führe ihn aus. Ändere den Code, so dass die erste Fibonacci Zahl ausgegeben wird, die grösser als 1000 ist! Analysiere den untenstehenden Code und führe ihn aus. Ändere den Code, so dass die erste Fibonacci Zahl ausgegeben wird, die grösser als 1000 ist!
  
-<html><bottom-editor>class FiboIterator:+<bottom-editor>class FiboIterator:
     def __init__(self, limit = -1):     def __init__(self, limit = -1):
         # Constructor - hier wird der Initial-Zustand gespeichert         # Constructor - hier wird der Initial-Zustand gespeichert
Zeile 76: Zeile 74:
 print(next(iterator)) print(next(iterator))
 print(next(iterator)) print(next(iterator))
-print(next(iterator))</bottom-editor></html>+print(next(iterator))</bottom-editor>
  
  
Zeile 112: Zeile 110:
 Untenstehender Code fügt dem bestehenden Iterator ein Iterable hinzu, so dass wir eine for-Schleife nützen können: Untenstehender Code fügt dem bestehenden Iterator ein Iterable hinzu, so dass wir eine for-Schleife nützen können:
  
-<html><bottom-editor>class FiboIterator:+<bottom-editor>class FiboIterator:
     def __init__(self, limit = -1):     def __init__(self, limit = -1):
         # Hier wird der Zustand gespeichert         # Hier wird der Zustand gespeichert
Zeile 136: Zeile 134:
         print(f'Erste Fibonacci-Zahl grösser als 1000 ist {num}')         print(f'Erste Fibonacci-Zahl grösser als 1000 ist {num}')
         break         break
-</bottom-editor></html>+</bottom-editor>
  
 Die Funktionen `__iter__` und `__next__` dürfen auch von derselben Klasse implementiert werden. Die Funktionen `__iter__` und `__next__` dürfen auch von derselben Klasse implementiert werden.
Zeile 149: Zeile 147:
 Ein Generator ist ein Iterable und kann damit auch als Ausdruck nach `in` in einer `for ... in <expression>` stehen. Ein Generator ist ein Iterable und kann damit auch als Ausdruck nach `in` in einer `for ... in <expression>` stehen.
  
-<html><bottom-editor>def fibo():+<bottom-editor>def fibo():
     one = 0     one = 0
     two = 1     two = 1
Zeile 160: Zeile 158:
         print(f'Erste Fibonacci-Zahl grösser als 1000 ist {num}')         print(f'Erste Fibonacci-Zahl grösser als 1000 ist {num}')
         break         break
-</bottom-editor></html>+</bottom-editor>
  
 ### Iteration beenden ### Iteration beenden
Zeile 171: Zeile 169:
 Der folgende Code soll also `143` ausgeben: Der folgende Code soll also `143` ausgeben:
  
-<html><bottom-editor>def fibo(limit=-1):+<bottom-editor>def fibo(limit=-1):
     pass     pass
  
 n=10 n=10
 print(f'Summe der ersten {n} Fibonacci-Zahlen: {sum(fibo(n))}') print(f'Summe der ersten {n} Fibonacci-Zahlen: {sum(fibo(n))}')
-</bottom-editor></html>+</bottom-editor>
  
 ## Yield From ## Yield From
Zeile 189: Zeile 187:
 Eine rekursive Umsetzung könnte wie folgt aussehen - beachte, wie `yield from` eingesetzt wird, um die rekursive Traversierung zu erreichen. Eine rekursive Umsetzung könnte wie folgt aussehen - beachte, wie `yield from` eingesetzt wird, um die rekursive Traversierung zu erreichen.
  
-<html><bottom-editor>class Node:+<bottom-editor>class Node:
     def __init__(self, key, left=None, right=None):     def __init__(self, key, left=None, right=None):
         self.key = key         self.key = key
Zeile 206: Zeile 204:
  
 for node in tree.in_order_traversal(): print (node.key) for node in tree.in_order_traversal(): print (node.key)
-</bottom-editor></html>+</bottom-editor> 
 ### Aufgabe 4: Pre-Order Traversierung ### Aufgabe 4: Pre-Order Traversierung
  
  • talit/generators.1755243364.txt.gz
  • Zuletzt geändert: 2025-08-15 07:36
  • von hof