--- jupytext: formats: md:myst text_representation: extension: .md format_name: myst kernelspec: display_name: Python 3 (ipykernel) language: python name: python3 --- Herumspielen mit Mengen, Listen, Dicts ========== erste Fingerübungen ---- Gegeben sei ein String x, z.B. `x = "1234"`. Diesen String nun umwandeln in * eine Zahl (Was passiert, wenn x keine Zahl ist?) * Menge, Liste * sortierte Menge * Quersumme, iterierte Quersumme * dict mit Häufigkeit jeder Ziffer Mengen ----- ```{code-cell} ipython3 prim_19 = [ 2, 3, 5, 7, 11, 13, 17, 19 ] # 1 ist per Def keine Primzahl odd_19 = [ 1, 3, 5, 7, 9, 11, 13, 15, 17, 19 ] # EN odd: ungerade ``` Mit Mengen einfach zu lösen: * ungerade Zahlen, die auch prim sind * ungerade Zahlen, die nicht prim sind * Primzahlen, die nicht ungerade sind Listen --- Erzeuge programmatisch: * obige Liste `odd_19` programmatisch * alle geraden Zahlen von 1 bis 20, die keine Primzahlen sind * Liste von Primzahlen, die einen Nachfolger mit Abstand 2 haben: `[ 3, 5, 11, 17 ]` * Liste von 2-Tupeln von Primzahlen mit Abstand 2: `[ (3, 5), (5, 7), ... ]` Erzeuge: * Eine Liste mit n verschiedenen Integer-Zufallszahlen zwischen 10 und 20, mit verschiedenen Funktionen aus Elemente hinzufügen / entfernen --- ```{code-cell} ipython3 Ziffern = { '0', '1' } # eine Menge Zahlen = [ 1, 3, 2 ] # eine Liste ``` * wie viele Elemente sind enthalten? * ist die `9` (resp. die `'9'`) enthalten? * jeweils die `4` (resp. die `'4'`) hinzufügen * die Menge `{'5', '6'}` (resp. die Liste `[ 5, 6 ]`) hinzufügen Alles auch "kreuzweise", d.h. die Menge zur Liste hizufügen etc. Dicts ----- ```{code-cell} ipython3 Sprechen = { # ein dict von dicts 1: {'de': 'eins', 'en': 'one' }, 2: {'de': 'zwei', 'en': 'two' }, 3: {'ru': 'три', 'gr': 'τρία' }, 0: {'ru': 'ноль' }} ``` Variablen miteinander abgleichen: * Welche Zahlen gibt es in `Sprechen`? * Welche Sprachen gibt es in `Sprechen`? * Wie viele verschiedene Sprachen gibt es in `Sprechen`? * Welche Zahlen aus `Sprechen` kommen in `Zahlen` nicht vor? * Ist `7` in `Sprechen` enthalten? * `Sprechen[7]` ist undefiniert und wirft einen Fehler: Wie gibt man einen Defaultwert `None` zurück? Gesucht ist ein Dictionary `Sprechen_ru`, in dem zu allen russischen Zahlen die Aussprache genannt ist, z.B. `Sprechen_ru = {3: 'три', 0: 'ноль'}`: * Erzeuge dieses Dict automatisch aus `Sprechen`. * Mache das für alle Sprachen, erzeuge also ein dict: `Aussprache = { 'ru' : {3: 'три', 0: 'ноль'}, 'en' : ... }` Bingo ------ Fingerübungen zur Bingo-Aufgabe aus Python 1 Die "Bingo-Aufgabe": Erzeugen Sie Lose für das Spiel [Bingo](https://de.wikipedia.org/wiki/Bingo). Repräsentieren Sie ein Los als eine Liste von Listen mit jeweils 5 verschiedenen Zahlen, die die *Spalten* eines Bingo-Loses repräsentieren: Erste Spalte 5 Zahlen zwischen 1 und 15, zweite Spalte 5 Zahlen zwischen 16 und 30, usw. ![](https://upload.wikimedia.org/wikipedia/commons/thumb/a/ae/Bingo_card.jpg/154px-Bingo_card.jpg) ``` bingo_los = [ [15, 9, 2, 12, 6], [27, 16, ...], ... ] ``` ### Vorübung Gegeben sei ein dict `listen_dict`: ``` prim = [2, 3, 5, 7, 11, 13] listen_dict = {} listen_dict["prim"] = prim ``` * selektieren Sie die zweite Primzahl aus dem dict `listen_dict` * fügen Sie zu `prim` die Primzahl `17` hinzu * wie lautet nun die höchste Primzahl im `listen_dict`? ### Listen erzeugen Erzeuge: * a) eine (sortierte) Liste mit Zahlen von 16-30 Sei `liste_a = ...` Ihre Lösung aus Teilaufgabe a). Ändern Sie Ihren Code so, dass Sie nicht für jede Teilaufgabe eine eigene Variable anlegen, sondern mit dem dict `listen_dict` arbeiten: `listen_dict['a'] = ...`. Konsultiere , dann weitere Aufgaben: * b) Erzeugen Sie eine Liste mit 5 zufälligen Zahlen "mit zurücklegen" zwischen 16 und 30 (`random.randint()`) * c) Schütteln Sie die (sortierte) Liste `listen_dict['a']` durcheinander (`random.shuffle()`) * d) Erzeugen Sie eine Liste mit Zahlen zwischen `1` und `61` mit Schrittweite `15` nachlesen: * `random.choices()` * `random.shuffle()` * `random.sample()` Aus einer Liste von Zahlen: * wiederholt eine bestimmte Zahl auswählen: `random.choice()` * ... und entfernen * zufällig ein n bestimmen, und die n-te Zahl herausnehmen: `pop()` * die Liste shuffeln, und dann die ersten 5 Zahlen auswählen. Werden Sie selbst kreativ: Versuchen Sie, für die 5-er Liste auf Basis Methoden aus dem Paket random möglichst viele weitere Lösungen zu finden! ### Dict von Listen erzeugen Erzeugen Sie ein Dict, * dessen keys Zahlen zwischen `1` und `61` mit Schrittweite `15` sind, * und die zugehörige Werte leere Listen sind Gehen Sie das dict in einer Schleife durch: füllen Sie in einer inneren Schleife für jeden Key die leere Liste an: * als Liste mit 5 zufälligen Zahlen "mit zurücklegen" * als Liste mit 5 zufälligen Zahlen "ohne zurücklegen": * solange die Liste noch keine 5 Elemente enthält: * neue Zufallszahl erzeugen * falls nicht schon 'drinn in der Liste: hinzufügen * eleganter, mit Hilfe einer der Lösungen von oben: eine Liste mit 5 zufälligen Zahlen "ohne zurücklegen" Bingo?!