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
gf_informatik:zahlensysteme:binary_collection [2023-05-09 07:00] – [Zeichenketten (Strings)] hofgf_informatik:zahlensysteme:binary_collection [2024-05-20 07:38] (aktuell) hof
Zeile 2: Zeile 2:
  
 Das Dossier enthält mehrere Programmieraufgaben, um Binärzahlen mit Python-Code zu manipulieren. Hier findest du Übungen, Hinweise und Ideen, wie die Umsetzung der Algorithmen in Python gelingen könnte. Das Dossier enthält mehrere Programmieraufgaben, um Binärzahlen mit Python-Code zu manipulieren. Hier findest du Übungen, Hinweise und Ideen, wie die Umsetzung der Algorithmen in Python gelingen könnte.
 +
 ### Schleifen ### Schleifen
 +
 +Bei der *direkten* Schleife ist der Ausdruck hinter `in` die Sequenz der uns interessierenden Elemente (z.B. ein String mit den Binär-Nennwerten `0` oder `1`). Die Schleifenvariable (der Name zwischen `for` und `in`) wird in jedem Schleifendurchgang auf das nächste Element gesetzt.
  
 *Direkte* Schleife über alle Buchstaben eines Strings (einer Zeichenfolge): *Direkte* Schleife über alle Buchstaben eines Strings (einer Zeichenfolge):
Zeile 10: Zeile 13:
     print(digit)     print(digit)
 </code> </code>
- 
  
 #### Parallel über zwei Strings #### Parallel über zwei Strings
 +
 +Bei der _indirekten_ Schleife steht der Ausdruck hinter `in` für die Liste der Indices, ist also eine Ganzzahl (`int`). Die Schleifenvariable heisst meistens `index` oder kurz `i`. Um auf das uns interessierende Element zuzugreifen, müssen wir einen Listenzugriff programmieren, z.B. `liste[index]`. Mit dem Index kann auch gerechnet werden, um zum Beispiel jedes zweite Element oder die Elemente in umgekehrter Richtung zu erhalten.
  
 *Indirekte* Schleife über die Buchstaben in zwei gleichlangen Strings: *Indirekte* Schleife über die Buchstaben in zwei gleichlangen Strings:
Zeile 25: Zeile 29:
 </code> </code>
  
-Elegante Alternative mit [[https://docs.python.org/2.7/library/functions.html#zip|zip]]:+Oder mit `while`: 
 + 
 +<code python> 
 +b1 = '10011010' 
 +b2 = '11110000' 
 +index = 0 
 +while index < len(b1): 
 +    digit1 = b1[index] 
 +    digit2 = b2[index] 
 +    print(digit1, digit2) 
 +    index = index + 1 
 +</code> 
 + 
 +Elegante Alternative mit [[https://docs.python.org/2.7/library/functions.html#zip|zip]] (nicht Prüfungsstoff)_Zip_ ist das englische Wort für Reissverschluss, wir nehmen also abwechslungsweise von jedem Argument ein Element... 🤐 
  
 <code python> <code python>
Zeile 33: Zeile 51:
     print(digit1, digit2)     print(digit1, digit2)
 </code> </code>
 + 
 +
 #### Rückwärts #### Rückwärts
  
Zeile 55: Zeile 75:
 </code> </code>
  
-Noch kompakter: Die Funktion [[https://docs.python.org/2.7/library/functions.html#reversed|reversed]] kehrt jede Sequenz (Liste, String) um:+Oder mit `while`: 
 + 
 + 
 +<code python> 
 +b = '111000' 
 +index = len(b) - 1  # Letzter gültiger Index 
 +while index >= 0: 
 +    digit = b[index] 
 +    print(digit) 
 +    index = index - 1 
 +</code> 
 + 
 + 
 +Noch kompakter: Die Funktion [[https://docs.python.org/2.7/library/functions.html#reversed|reversed]] (kein Prüfungsstoff) kehrt jede Sequenz (Liste, String) um:
  
 <code python> <code python>
Zeile 63: Zeile 96:
 </code> </code>
  
-Noch kompakter (aber auch leserlich?), die Verwendung von [[https://stackoverflow.com/questions/509211/how-slicing-in-python-works/509295#509295|String Slicing]]:+Noch kompakter (aber auch leserlich?), die Verwendung von [[https://stackoverflow.com/questions/509211/how-slicing-in-python-works/509295#509295|String Slicing]] (kein Prüfungsstoff):
  
 <code python> <code python>
Zeile 70: Zeile 103:
     print(d)     print(d)
 </code> </code>
 +
 +
 #### Rückwärts über zwei Strings? #### Rückwärts über zwei Strings?
  
 ++++Lösung| ++++Lösung|
 +Am einfachsten mit `while`:
 +
 +<code python>
 +b1 = '111000'
 +b2 = '101010'
 +index = len(b1) - 1
 +
 +while index >= 0:
 +    digit1 = b1[index]
 +    digit2 = b2[index]
 +    print(digit1, digit2)
 +    index = index - 1
 +</code>
 +
 +Eleganter mit `reversed` und `zip` (kein Prüfungsstoff):
 +
 <code python> <code python>
 b1 = '111000' b1 = '111000'
Zeile 107: Zeile 158:
  
 summe = digit1 + digit2   # Absicht: Summe soll die Zahl 2 sein summe = digit1 + digit2   # Absicht: Summe soll die Zahl 2 sein
-print(summe)              # Resultat: Summe ist der String '11'+print(summe)              # Resultat: String-Verkettung zu '11'
  
-print(int(digit1) + int(digit2))  # Abhilfe: String in Zahl konvertieren+print(int(digit1) + int(digit2))  # Abhilfe: Strings in Zahlen konvertieren
 </code> </code>
  
Zeile 151: Zeile 202:
  
 <code python> <code python>
-a = 111       # eine Zahl +a = 101       # eine Zahl 
-b = '000    # ein String +b = '010    # ein String 
-c = a + b  # Fehler!+c = a + b     # Fehler!
  
 # Zahl umwandeln in String # Zahl umwandeln in String
-c = str(a) + b   # OK: + bedeutet String-Verkettung, c ist der String '111000'+c = str(a) + b   # OK: + bedeutet String-Verkettung, c ist der String '101010'
  
 # String umwandeln in Zahl # String umwandeln in Zahl
Zeile 175: Zeile 226:
 </code> </code>
  
-Variante 2: Strings multiplizieren+Variante 2 (nicht Lernstoff): Strings multiplizieren
  
 Strings können übrigens auch mit dem `*` Operator verknüpft werden - zum Beispiel um die Anzahl fehlender Nullen zu erstellen: Strings können übrigens auch mit dem `*` Operator verknüpft werden - zum Beispiel um die Anzahl fehlender Nullen zu erstellen:
Zeile 188: Zeile 239:
  
  
- +Variante 3 (nicht Lernstoff): Eleganter mit [[https://docs.python.org/2.7/library/stdtypes.html?highlight=zfill#str.zfill|zfill]]:
-Variante 3: Eleganter mit [[https://docs.python.org/2.7/library/stdtypes.html?highlight=zfill#str.zfill|zfill]]:+
 <code python> <code python>
 b = '1010' b = '1010'
  • gf_informatik/zahlensysteme/binary_collection.1683615645.txt.gz
  • Zuletzt geändert: 2023-05-09 07:00
  • von hof