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 [2025-04-28 10:18] – [Parallel über zwei Strings] hofgf_informatik:zahlensysteme:binary_collection [2025-05-13 07:38] (aktuell) hof
Zeile 1: Zeile 1:
-## Binärzahlen mit Python+## Binärzahlen in Python: Bausteine 
 +<html><script type="module" src="https://bottom.ch/ksr/ed/bottom-editor.js"></script></html>
  
 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.
Zeile 8: Zeile 9:
  
 *Direkte* Schleife über alle Buchstaben eines Strings (einer Zeichenfolge): *Direkte* Schleife über alle Buchstaben eines Strings (einer Zeichenfolge):
-<code python> +<html><bottom-editor style="min-height: 6lh">b = '100110'
-b = '100110'+
 for digit in b: for digit in b:
-    print(digit) +    print(digit)</bottom-editor></html> 
-</code>+
 #### Parallel über zwei Strings #### Parallel über zwei Strings
  
Zeile 19: Zeile 19:
 *Indirekte* Schleife über die Buchstaben in zwei gleichlangen Strings: *Indirekte* Schleife über die Buchstaben in zwei gleichlangen Strings:
  
-<code python> +<html><bottom-editor>b1 = '10011010'
-b1 = '10011010'+
 b2 = '11110000' b2 = '11110000'
 for index in range(len(b1)): for index in range(len(b1)):
Zeile 26: Zeile 25:
     digit2 = b2[index]     digit2 = b2[index]
     print(digit1, digit2)     print(digit1, digit2)
-</code>+</bottom-editor></html>
  
 Oder mit `while`: Oder mit `while`:
  
-<code python> +<html><bottom-editor>b1 = '10011010'
-b1 = '10011010'+
 b2 = '11110000' b2 = '11110000'
 index = 0 index = 0
Zeile 39: Zeile 37:
     print(digit1, digit2)     print(digit1, digit2)
     index = index + 1     index = index + 1
-</code>+</bottom-editor></html>
  
 Elegante Alternative mit [[https://docs.python.org/3/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... 🤐 Elegante Alternative mit [[https://docs.python.org/3/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> +<html><bottom-editor>b1 = '10011010'
-b1 = '10011010'+
 b2 = '11110000' b2 = '11110000'
 for digit1, digit2 in zip(b1, b2): for digit1, digit2 in zip(b1, b2):
     print(digit1, digit2)     print(digit1, digit2)
-</code+</bottom-editor></html
- +
  
 #### Rückwärts #### Rückwärts
Zeile 56: Zeile 53:
 Erste Möglichkeit: Indirekte Schleife mit Umrechnung des Index: Erste Möglichkeit: Indirekte Schleife mit Umrechnung des Index:
  
-<code python> +<html><bottom-editor>b = '111000'
-b = '111000'+
 for index in range(len(b)): for index in range(len(b)):
     reversed_index = len(b) - 1 - index     reversed_index = len(b) - 1 - index
     digit = b[reversed_index]     digit = b[reversed_index]
     print(digit)     print(digit)
-</code>+</bottom-editor></html>
  
 Etwas kompakter: `range` mit einem Step-Argument: Etwas kompakter: `range` mit einem Step-Argument:
  
-<code python> +<html><bottom-editor>b = '111000'
-b = '111000'+
 # range(start, stop, step): Start with len - 1, stop at 0 (so before -1), increment is -1 # range(start, stop, step): Start with len - 1, stop at 0 (so before -1), increment is -1
 for index in range(len(b) - 1, -1, -1): for index in range(len(b) - 1, -1, -1):
     digit = b[index]     digit = b[index]
     print(digit)     print(digit)
-</code>+</bottom-editor></html>
  
 Oder mit `while`: Oder mit `while`:
  
  
-<code python> +<html><bottom-editor>b = '111000'
-b = '111000'+
 index = len(b) - 1  # Letzter gültiger Index index = len(b) - 1  # Letzter gültiger Index
 while index >= 0: while index >= 0:
Zeile 84: Zeile 78:
     print(digit)     print(digit)
     index = index - 1     index = index - 1
-</code>+</bottom-editor></html>
  
 +Noch kompakter: Die Funktion [[https://docs.python.org/3/library/functions.html#reversed|reversed]] (kein Prüfungsstoff) kehrt jede Sequenz (Liste, String) um:
  
-Noch kompakter: Die Funktion [[https://docs.python.org/2.7/library/functions.html#reversed|reversed]] (kein Prüfungsstoff) kehrt jede Sequenz (Liste, String) um: +<html><bottom-editor>b = '111000'
- +
-<code python> +
-b = '111000'+
 for d in reversed(b): for d in reversed(b):
     print(d)     print(d)
-</code>+</bottom-editor></html>
  
 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): 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> +<html><bottom-editor>b = '111000'
-b = '111000'+
 for d in b[::-1]: for d in b[::-1]:
     print(d)     print(d)
-</code>+</bottom-editor></html>
  
  
Zeile 109: Zeile 100:
 Am einfachsten mit `while`: Am einfachsten mit `while`:
  
-<code python> +<html><bottom-editor>b1 = '111000'
-b1 = '111000'+
 b2 = '101010' b2 = '101010'
 index = len(b1) - 1 index = len(b1) - 1
Zeile 119: Zeile 109:
     print(digit1, digit2)     print(digit1, digit2)
     index = index - 1     index = index - 1
-</code>+</bottom-editor></html>
  
 Eleganter mit `reversed` und `zip` (kein Prüfungsstoff): Eleganter mit `reversed` und `zip` (kein Prüfungsstoff):
  
-<code python> +<html><bottom-editor>b1 = '111000'
-b1 = '111000'+
 b2 = '101010' b2 = '101010'
  
 for d1, d2 in zip(reversed(b1), reversed(b2)): for d1, d2 in zip(reversed(b1), reversed(b2)):
     print(d1, d2)     print(d1, d2)
-</code>+</bottom-editor></html> 
 ++++ ++++
  
Zeile 137: Zeile 127:
 Zwei Zahlen `a` und `b` - was gibt $\lfloor a/b\rfloor$ (Ganzzahldivision), und wieviel ist der Rest der Division? Zwei Zahlen `a` und `b` - was gibt $\lfloor a/b\rfloor$ (Ganzzahldivision), und wieviel ist der Rest der Division?
  
-<code python> +<html><bottom-editor>a = 42
-a = 42+
 b = 2 b = 2
 quotient = a // b quotient = a // b
 rest = a % b rest = a % b
-</code>+print(quotient, rest) 
 +</bottom-editor></html>
  
 ### Strings und Integers ### Strings und Integers
Zeile 148: Zeile 138:
 Jeder Ausdruck in Python hat einen Type. Der Type bestimmt, welche Operationen damit ausgeführt werden können: Mit Zahlen können wir rechnen, mit Zeichenketten nicht. Alle Types können auch als Zeichenkette  Jeder Ausdruck in Python hat einen Type. Der Type bestimmt, welche Operationen damit ausgeführt werden können: Mit Zahlen können wir rechnen, mit Zeichenketten nicht. Alle Types können auch als Zeichenkette 
 (String) dargestellt werden, und aus einem String wieder zurückverwandelt werden. (String) dargestellt werden, und aus einem String wieder zurückverwandelt werden.
 +
 #### Zeichenketten (Strings) #### Zeichenketten (Strings)
  
 Ein `string` ist eine Folge von Buchstaben. Die Folge kann auch leer sein (`''`). Strings sind *immutable*, können also nicht verändert werden. Alle anderen Types müssen sich als String darstellen lassen, indem die Funktion `str()` aufgerufen wird. Strings unterstützen den `+` Operator, um zwei Strings zu verketten. Dies kann verwirrend sein, wenn die Absicht ist, Zahlen zu addieren und stattdessen Strings verkettet werden: Ein `string` ist eine Folge von Buchstaben. Die Folge kann auch leer sein (`''`). Strings sind *immutable*, können also nicht verändert werden. Alle anderen Types müssen sich als String darstellen lassen, indem die Funktion `str()` aufgerufen wird. Strings unterstützen den `+` Operator, um zwei Strings zu verketten. Dies kann verwirrend sein, wenn die Absicht ist, Zahlen zu addieren und stattdessen Strings verkettet werden:
  
-<code python> +<html><bottom-editor>digit1 = '1'
-digit1 = '1'+
 digit2 = '1' digit2 = '1'
  
Zeile 160: Zeile 150:
  
 print(int(digit1) + int(digit2))  # Abhilfe: Strings in Zahlen konvertieren print(int(digit1) + int(digit2))  # Abhilfe: Strings in Zahlen konvertieren
-</code>+</bottom-editor></html>
  
 #### Zahlen #### Zahlen
Zeile 168: Zeile 158:
 Strings können in Zahlen umgewandelt werden, wenn der Inhalt des Strings einer Zahl entspricht: Strings können in Zahlen umgewandelt werden, wenn der Inhalt des Strings einer Zahl entspricht:
  
-<code python> +<html><bottom-editor>zahl = int('42'       # OK
-zahl = int('42'       # OK+
 zahl = int('3.14'     # FEHLER! zahl = int('3.14'     # FEHLER!
 zahl = float('3.14'   # OK zahl = float('3.14'   # OK
 zahl = float('foobar' # FEHLER! zahl = float('foobar' # FEHLER!
-</code>+</bottom-editor></html>
  
 Addieren, subtrahieren oder multiplizieren wir zwei Ganzzahlen, resultiert wiederum eine Ganzzahl. Bei der Division hingegen entsteht als Resultat ein `float`. Addieren, subtrahieren oder multiplizieren wir zwei Ganzzahlen, resultiert wiederum eine Ganzzahl. Bei der Division hingegen entsteht als Resultat ein `float`.
Zeile 179: Zeile 168:
 Strings sind *immutable*, anders als bei Listen können wir nicht einfach einen Buchstaben ersetzen in einem String. Aber wir können mit dem `+` Operator zwei Strings verketten, um einen neuen String zu erhalten: Strings sind *immutable*, anders als bei Listen können wir nicht einfach einen Buchstaben ersetzen in einem String. Aber wir können mit dem `+` Operator zwei Strings verketten, um einen neuen String zu erhalten:
  
-<code python> +<html><bottom-editor>s1 = 'foo'
-s1 = 'foo'+
 s2 = 'bar' s2 = 'bar'
 print(s1 + s2)  # prints 'foobar' print(s1 + s2)  # prints 'foobar'
-</code>+</bottom-editor></html>
  
 Dasselbe ist auch praktisch, um Buchstaben in einer Schleife aneinanderzureihen: Dasselbe ist auch praktisch, um Buchstaben in einer Schleife aneinanderzureihen:
  
-<code python> +<html><bottom-editor>def flip_bits(b):
-def flip_bits(b):+
     result = ''                    # start with empty string     result = ''                    # start with empty string
     for digit in b:     for digit in b:
-        if digit = '1':            # if digit is a one...+        if digit == '1':            # if digit is a one...
             result = result + '0'  # ...append a zero             result = result + '0'  # ...append a zero
-        elif digit = '0':+        elif digit == '0':
             result = result + '1'  # otherwise append a one             result = result + '1'  # otherwise append a one
     return result     return result
-</code>+</bottom-editor></html>
  
 **Achtung**: Der `+` Operator für Strings funktioniert nur, wenn beide Operanden Strings sind - falls eine Seite eine Zahl ist, führt das zum Programmabbruch: **Achtung**: Der `+` Operator für Strings funktioniert nur, wenn beide Operanden Strings sind - falls eine Seite eine Zahl ist, führt das zum Programmabbruch:
  
-<code python> +<html><bottom-editor>a = 101       # eine Zahl
-a = 101       # eine Zahl+
 b = '010'     # ein String b = '010'     # ein String
 c = a + b     # Fehler! c = a + b     # Fehler!
Zeile 210: Zeile 196:
 # String umwandeln in Zahl # String umwandeln in Zahl
 c = a + int(b)   # OK: + bedeutet Ganzzahl-Addition, c ist die Ganzzahl (int) 111 c = a + int(b)   # OK: + bedeutet Ganzzahl-Addition, c ist die Ganzzahl (int) 111
-</code>+</bottom-editor></html>
  
 **String mit Nullen auffüllen** **String mit Nullen auffüllen**
Zeile 218: Zeile 204:
 Variante 1: Mit `while`: Variante 1: Mit `while`:
  
-<code python> +<html><bottom-editor>b = '1010'
-b = '1010'+
 n = 8 n = 8
 while len(b) < n: while len(b) < n:
     b = '0' + b     b = '0' + b
-</code>+print(b) 
 +</bottom-editor></html>
  
 Variante 2 (nicht Lernstoff): Strings multiplizieren Variante 2 (nicht Lernstoff): Strings multiplizieren
Zeile 229: Zeile 215:
 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:
  
-<code python> +<html><bottom-editor>b = '1010'
-b = '1010'+
 n = 8 n = 8
 count = n - len(b)    # count = 8 - 4 = 4 count = n - len(b)    # count = 8 - 4 = 4
 zeros = '0' * count   # zeros = '0000' zeros = '0' * count   # zeros = '0000'
 b = zeros + b b = zeros + b
-</code>+print(b) 
 +</bottom-editor></html>
  
  
 Variante 3 (nicht Lernstoff): Eleganter mit [[https://docs.python.org/2.7/library/stdtypes.html?highlight=zfill#str.zfill|zfill]]: Variante 3 (nicht Lernstoff): Eleganter mit [[https://docs.python.org/2.7/library/stdtypes.html?highlight=zfill#str.zfill|zfill]]:
-<code python> + 
-b = '1010'+<html><bottom-editor>b = '1010'
 n = 8 n = 8
-b = b.zfill(n) +print(b.zfill(n)
-</code>+</bottom-editor></html>
  
 ### Funktionen ### Funktionen
  • gf_informatik/zahlensysteme/binary_collection.1745835537.txt.gz
  • Zuletzt geändert: 2025-04-28 10:18
  • von hof