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:python_intro [2025-02-24 15:32] – [Lösungen] scatalit:python_intro [2025-04-28 12:38] (aktuell) – [8. List Comprehensions] hof
Zeile 212: Zeile 212:
   * Im Zweifelsfall: [[https://docs.python.org/3/tutorial/|docs.python.org]]   * Im Zweifelsfall: [[https://docs.python.org/3/tutorial/|docs.python.org]]
  
-=== Auftrag ===+=== Auftrag ===
  
-   1. Lade das "Ortschaftenverzeichnis Kanton Thurgau 2023" im **JSON-Format** herunter: https://opendata.swiss/de/dataset/ortschaftenverzeichnis-kanton-thurgau-2023 ... +   1. Lade den Datensatz `plz_schweiz.json` im **JSON-Format** herunter {{ :talit:plz_schweiz.json.zip |}} und **entzippe** diesen
-   1. ... und lege es in einem (noch zu erstellenden) Unterordner `data` in deinem Repo `talit_python` ab.+   1. Lege das JSON-File in einem (noch zu erstellenden) Unterordner `data` in deinem Repo `talit_python` ab.
    1. Erstelle ein neues Jupyter-Notebook (im obersten Ordner des Repos, *nicht* in `data`) mit Namen `dictionaries_json.ipynb`: Beantworte hier die Fragen von weiter unten mithilfe von Dictinaries.    1. Erstelle ein neues Jupyter-Notebook (im obersten Ordner des Repos, *nicht* in `data`) mit Namen `dictionaries_json.ipynb`: Beantworte hier die Fragen von weiter unten mithilfe von Dictinaries.
    1. Dokumentiere parallel die wichtigsten Befehle im *Portfolio*.    1. Dokumentiere parallel die wichtigsten Befehle im *Portfolio*.
 +
 +**Fragen zu PLZ Schweiz:**
 +
 +Lies das JSON-File "plz_schweiz.json" ein und speichere es in einem Dictionary, z.B. mit Namen `data`. Schreibe dann Code, um folgende Fragen zu beantworten:
 +
 +   1. Welche Ortschaft hat die PLZ 6983?
 +   1. Finde die PLZ von Samedan.
 +   1. Wie viele Postleitzahlen gibt es für Zürich?
 +   1. Erstelle eine Liste mit allen PLZ (1000-9999), welche noch nicht vergeben sind.
 +   1. Du gründest deine eigene Ortschaft. Gib ihr einen Namen, wähle eine der freien PLZ und trage sie im Dictionary ein.
 +   1. Wie viele 6000er Postleitzahlen gibt es?
 +   1. In einer Volksabstimmung haben die Bewohnerinnen und Bewohner von Weinfelden beschlossen, dass die Stadt ab jetzt "Winefielden" heissen soll. Passe das Dictionary entsprechend an.
 +   1. Die SalmsacherInnen haben beschlossen, sich Romanshorn anschliessen zu wollen. Entferne Salmsach aus dem Dictionary.
 +   1. Welche Ortschaft hat den längsten Namen? Welche PLZ hat diese Ortschaft?
 +   1. Wie viele Ortschaften fangen mit "W" an?
 +   1. Speichere das Dictionary in einem neuen JSON `plz_schweiz_modifiziert.json`.
 +
 +=== Auftrag II ===
 +
 +   1. Lade das "Ortschaftenverzeichnis Kanton Thurgau 2023" im **JSON-Format** herunter: https://opendata.swiss/de/dataset/ortschaftenverzeichnis-kanton-thurgau-2023 ...
 +   1. ... und lege wieder in Unterordner `data` in deinem Repo `talit_python` ab.
 +   1. Erstelle ein neues Jupyter-Notebook (im obersten Ordner des Repos, *nicht* in `data`) mit Namen `dictionaries_json.ipynb`: Beantworte hier die Fragen von weiter unten mithilfe von Dictinaries.
  
 **Fragen zum Datensatz Ortschaftenverzeichnis:** **Fragen zum Datensatz Ortschaftenverzeichnis:**
Zeile 271: Zeile 293:
  
 === Aufgabe 1: try-except === === Aufgabe 1: try-except ===
 +
 +Löse diese Aufgabe in eine neues File `try_except.ipynb`.
  
 Starte mit dem Code-Block: Starte mit dem Code-Block:
Zeile 302: Zeile 326:
  
 === Aufgabe 3: Guess Number === === Aufgabe 3: Guess Number ===
 +
 +Löse diese Aufgabe auch wieder im File `try_except.ipynb`.
  
    * **Kurz:** Programmiere ein Zahlenratespiel, bei dem eine bestimmte Zahl in möglichst wenig Versuchen erraten werden soll.    * **Kurz:** Programmiere ein Zahlenratespiel, bei dem eine bestimmte Zahl in möglichst wenig Versuchen erraten werden soll.
Zeile 324: Zeile 350:
  
 **Auftrag:** **Auftrag:**
 +
 +Löse Auftrag in Dokument `text_processing.ipynb`.
  
    1. Wähle einen der folgenden **langen Texte**, lade diesen herunter und entzippe diesen. Schreibe deinen Code unten so, dass er ohne Anpassungen auch für die anderen Text funktioniert.    1. Wähle einen der folgenden **langen Texte**, lade diesen herunter und entzippe diesen. Schreibe deinen Code unten so, dass er ohne Anpassungen auch für die anderen Text funktioniert.
Zeile 363: Zeile 391:
 ===== - List Comprehensions ===== ===== - List Comprehensions =====
  
-**Idee:** Listen in einer Zeile erstellen mit List Comprehensions+**Idee:** Listen in einer Zeile erstellen mit [[https://docs.python.org/3/tutorial/datastructures.html#list-comprehensions|List Comprehensions]].
  
 **Programmierskills:** **Programmierskills:**
Zeile 374: Zeile 402:
      1. Liste mit den ersten $20$ ungeraden Zahlen.      1. Liste mit den ersten $20$ ungeraden Zahlen.
      1. Liste mit den ersten $20$ Quadratzahlen: 1,4,9,...      1. Liste mit den ersten $20$ Quadratzahlen: 1,4,9,...
-     1. String in Liste mit chars umwandeln: "KSR2024" -> ['K','S','R','2','0','2','4']. Verwendung von Funktion `list(...)` ist verboten.+     1. String in Liste mit chars umwandeln: `"KSR2024"-> `['K','S','R','2','0','2','4']`. Verwendung von Funktion `list(...)` ist verboten.
      1. Liste mit $10$ Zufallszahlen im Bereich $0$ bis $100$.      1. Liste mit $10$ Zufallszahlen im Bereich $0$ bis $100$.
-     1. Gib Liste mit Strings vor. Erstelle Liste, die Anzahl chars der einzelnen Strings angibt: ["Hallo","ksr","Romanshorn","7"] -> [5,3,10,1]\\ \\+     1. Gib Liste mit Strings vor. Erstelle Liste, die Anzahl chars der einzelnen Strings angibt: `["Hallo","ksr","Romanshorn","7"]-> `[5,3,10,1]`\\ \\
    1. **List Comprehensions mit Conditions:**    1. **List Comprehensions mit Conditions:**
      1. Gib eine Liste mit Zahlen vor. Erstelle eine Teilliste, welche nur die geraden Zahlen der ursprünglichen Liste beinhaltet.      1. Gib eine Liste mit Zahlen vor. Erstelle eine Teilliste, welche nur die geraden Zahlen der ursprünglichen Liste beinhaltet.
-     1. Gib eine Liste mit einzelnen Buchstaben vor. Erstelle Teilliste, welche nur Grossbuchstaben der ursprünglichen Liste beinhaltet. ['r','O','M','A','n','s','h','o','r','n',] -> ['O','M','A']+     1. Gib eine Liste mit einzelnen Buchstaben vor. Erstelle Teilliste, welche nur Grossbuchstaben der ursprünglichen Liste beinhaltet. `['r','O','M','A','n','s','h','o','r','n',]-> `['O','M','A']`
      1. Gleich wie letzte Aufgabe, nur soll ein String vorgegeben und erstellt werden: `"rOMAnshorn"` -> `"OMA"`. Idee: Erstelle *Liste* mit Grossbuchstaben und setzt diese dann zu einem String zusammen. Tipp: mit `''.join(my_list)` werden die Elemente in der Liste `my_list` zu einem String zusammengesetzt.\\ \\      1. Gleich wie letzte Aufgabe, nur soll ein String vorgegeben und erstellt werden: `"rOMAnshorn"` -> `"OMA"`. Idee: Erstelle *Liste* mit Grossbuchstaben und setzt diese dann zu einem String zusammen. Tipp: mit `''.join(my_list)` werden die Elemente in der Liste `my_list` zu einem String zusammengesetzt.\\ \\
    1. **Zusatzaufgaben (anspruchsvoll):**    1. **Zusatzaufgaben (anspruchsvoll):**
-     1. Liste mit allen Primzahlen bis $100$. Verwende die Funktion `all(...)` (nutze KI als Tutor).+     1. Liste mit allen Primzahlen bis $100$
 +       1. Nutze KI als Tutor! 
 +       1. Schreibe eine List-Comprehension, die alle Teiler einer Zahl erzeugt. 
 +         1. Primzahlen haben keinen Teiler ausser 1 und sich selbst.. 
 +       1. Verwende die Funktion `all(...)`
  
  
Zeile 542: Zeile 574:
 ++++ ++++
  
 +</nodisp>
  
 +<nodisp 1>
 +++++Dictionaries & JSON Auftrag I|
 +
 +<code python>
 +import json
 +import os
 +import random
 +
 +PATH_DATA_LOAD = os.path.join('data','plz_schweiz.json') # so stellt sicher, dass Code auf Mac und Windows funktioniert
 +PATH_DATA_SAVE = os.path.join('data','plz_schweiz_modifiziert.json')
 +
 +with open(PATH_DATA_LOAD, 'r', encoding="utf-8") as json_file:
 +    data = json.load(json_file) # lade File in Dictionary data
 +
 +print("1.")
 +print(data['6983'])
 +
 +print("2.")
 +for plz,ort in data.items():
 +    if ort == "Samedan":
 +        print(plz)
 +        break
 +
 +print("3.")
 +count = 0
 +for plz,ort in data.items():
 +    if ort == "Zürich":
 +        count += 1
 +print(count)
 +
 +print("4.")
 +plz_frei = []
 +for i in range(1000,10000):
 +    if not str(i) in data:
 +        plz_frei.append(str(i))
 +print(plz_frei)
 +
 +print("5.")
 +data[plz_frei[7]] = "Schärertown"
 +for plz,ort in data.items():
 +    if ort == "Schärertowns":
 +        print(plz)
 +        break
 +
 +print("6.")
 +count = 0
 +for plz in data:
 +    if int(plz) // 1000 == 6:
 +        count += 1
 +print(count)
 +
 +print("7.")
 +for plz,ort in data.items():
 +    if ort == "Weinfelden":
 +        break
 +data[plz] = "Winefielden"
 +print(data[plz])
 +
 +print("8.")
 +for plz,ort in data.items():
 +    if ort == "Salmsach":
 +        print(plz)
 +        del data[plz]
 +        break
 +print(data.get('8599','Not found'))
 +
 +print("9.")
 +# loese in zwei Schritten: zuerst max, Laenge suchen, dann alle Orte finden mit dieser Laenge. 
 +max_length = 0
 +for ort in data.values():
 +    if len(ort) > max_length:
 +        max_length = len(ort)
 +print(max_length)
 +
 +for plz,ort in data.items():
 +    if len(ort) == max_length:
 +        print(plz,ort)
 +
 +print("10.")
 +with open(PATH_DATA_SAVE, "w", encoding="utf-8") as json_file:
 +    json.dump(data,json_file,indent=4,ensure_ascii=False) # Speichere Dictionary in JSON File
 +</code>
 +
 +++++
 +</nodisp>
 +
 +<nodisp 2>
 ++++Ausnahmebehandlung mit try-except| ++++Ausnahmebehandlung mit try-except|
  
Zeile 608: Zeile 728:
  
 ++++ ++++
 +
 +</nodisp>
 +
 +<nodisp 2>
  
 ++++Text Processing| ++++Text Processing|
  • talit/python_intro.1740411162.txt.gz
  • Zuletzt geändert: 2025-02-24 15:32
  • von sca