python.casapython.casa
Home
  • Thema 1 - Einführung Programmiersprache
  • Thema 2 - Variablen und Datentypen
  • Thema 3 - Boolsche Algebra und Zeichenketten
  • Thema 4 - Datum und Zeit
  • Thema 5 - Kontrollstrukturen und Listen
  • Thema 6 - Funktionen und Flowcharts
  • Thema 7 - Objektorientierte Programmierung
  • Thema 8 - Ein- und Ausgabe
  • Thema 9 - Module und Import
  • Thema 10 - Datenbanken
  • Thema 11 - Grafische Benutzeroberfläche
  • Thema 12 - Webapplikation mit Python Flask
  • Thema 13 - Versionskontrolle mit Git
  • Thema 14 - Dokumentation mit Markdown
  • Thema 15 - Jupiter-Notebooks, SciPy und Matplotlib
GitHub
Home
  • Thema 1 - Einführung Programmiersprache
  • Thema 2 - Variablen und Datentypen
  • Thema 3 - Boolsche Algebra und Zeichenketten
  • Thema 4 - Datum und Zeit
  • Thema 5 - Kontrollstrukturen und Listen
  • Thema 6 - Funktionen und Flowcharts
  • Thema 7 - Objektorientierte Programmierung
  • Thema 8 - Ein- und Ausgabe
  • Thema 9 - Module und Import
  • Thema 10 - Datenbanken
  • Thema 11 - Grafische Benutzeroberfläche
  • Thema 12 - Webapplikation mit Python Flask
  • Thema 13 - Versionskontrolle mit Git
  • Thema 14 - Dokumentation mit Markdown
  • Thema 15 - Jupiter-Notebooks, SciPy und Matplotlib
GitHub
  • Stundenplan
  • Teil 1

    • Thema 1 - Einführung Programmiersprache
      • Slides Thema 1
      • Übungen Thema 1
    • Thema 2 - Variablen und Datentypen
      • Slides Thema 2
      • Übungen Thema 2
    • Thema 3 - Boolsche Algebra und Zeichenketten
      • Slides Thema 3
      • Übungen Thema 3
    • Thema 4 - Datum und Zeit
      • Slides Thema 4
      • Übungen Thema 4
    • Thema 5 - Kontrollstrukturen und Listen
      • Slides Thema 5
      • Übungen Thema 5
    • Thema 6 - Funktionen und Flowcharts
      • Slides Thema 6
      • Übungen Thema 6
    • Thema 7 - Objektorientierte Programmierung
      • Slides Thema 7
      • Übungen Thema 7
    • Thema 8 - Ein- und Ausgabe
      • Slides Thema 8
      • Übungen Thema 8
        • Aufgaben
          • Aufgabe 8.1: Fehler abfangen
          • Aufgabe 8.2: Datentyp-Fehler behandeln
          • Aufgabe 8.3: Datei verarbeiten
          • Aufgabe 8.4: JSON zu CSV
          • Aufgabe 8.5: Erste Website
          • Aufgabe 8.6: Dynamische Website
          • Aufgabe 8.7: Webserver
          • Aufgabe 8.8: Intranet
  • Teil 2

    • Thema 9 - Module und Import
      • Slides Thema 9
      • Übungen Thema 9
    • Thema 10 - Datenbanken
      • Slides Thema 10
      • Übungen Thema 10
    • Thema 11 - Grafische Benutzeroberfläche
      • Slides Thema 11
      • Übungen Thema 11
    • Thema 12 - Webapplikation mit Python Flask
      • Slides Thema 12
      • Übungen Thema 12
    • Thema 13 - Versionskontrolle mit Git
      • Slides Thema 13
      • Übungen Thema 13
    • Thema 14 - Dokumentation mit Markdown
      • Slides Thema 14
    • Thema 15 - Jupiter-Notebooks, SciPy und Matplotlib
      • Slides Thema 15
      • Übungen Thema 15
  • Prüfung

    • Wissensprüfung 1
    • Wissensprüfung 2
    • Leistungsnachweis

Übungen Thema 8

Aufgaben

Aufgaben zum Thema.

Aufgabe 8.1: Fehler abfangen

Sie erhalten ein einfache Liste und möchten das erste und das letzte Element ausgeben:

l = ['ZeroDivisionError', 'NameError', 'IndentationError', 'IOError', 'EOFError', 'IndexError']
print(l[0])
print(l[6])

Sie haben sicher verzählt und das Programm wirft einen Fehler. Fangen Sie den Fehler mit einen try-catch Bock ab

try:
	
except:
	print('Es gibt einen Fehler im Code!')

⭐ Fehler abfangen

Aufgabe 8.2: Datentyp-Fehler behandeln

Wir nehmen an Sie haben diese Python-Funktion:

def pluszwei(zahl):
	return (zahl + 2)

Und verwenden sie in ihrem Programm.

print(pluszwei(2))
print(pluszwei('3'))

Bei der Ausführung erhalten Sie einen Fehler vom Typ TypeError. Fangen Sie diesen Fehlertyp in ihrem Programm mithilfe von try and except ab und geben Sie einen Hinweis zur Korrektur des Programms aus.

⭐ Datentyp-Fehler abfangen

Aufgabe 8.3: Datei verarbeiten

Erstellen Sie eine Datei Limerick.txt mit diesen Inhalt:

Python was a language for you and for me
It was simple and clean, but slow we agree.
But that was ok,
We loved it anyway.
Until it went from version 2 to version 3.

Im selben Verzeichnis erstellen Sie ein Programm Limerick.py mit diesem Inhalt

with open('Limerick.txt') as f:
	for line in f:
		print(line, end='')

Ersetzten Sie das Wort Python mit C# in der Ausgabe von line.

Wenn das zu eifnach war, machen Sie das umkehrte:

  • Speichern Sie den Limerick in der Variable limerick
  • Schreiben Sie den Inhalt der Variable limerick in die Datei Limerick.txt

⭐ Datei verarbeiten

Aufgabe 8.4: JSON zu CSV

Sie erhalten das folgende JSON-Dokument people.json:

[
    {
        "name": "Jason",
        "gender": "M",
        "age": 27
    },
    {
        "name": "Rosita",
        "gender": "F",
        "age": 23
    },
    {
        "name": "Leo",
        "gender": "M",
        "age": 19
    }
]

Damit Sie es verarbeiten können brauche Sie es im CSV-Format.

Entwickeln Sie ein Programm, dass dieses JSON-Dokuments zu einem CSV konvertiert.

Dazu diese Inputs:

import json
import csv
with open('people.json') as f:
    data = json.load(f)
print(data)
for person in data:
    print(f"name: {person['name']}")
with open('people.csv', 'w') as file:
    csv_writer = csv.writer(file, delimiter=',', quotechar='"')
    csv_writer.writerow(['Name', 'Gender', 'Age'])
    for person in data:
        csv_writer.writerow(person.values())

⭐ JSON zu CSV

Aufgabe 8.5: Erste Website

Erstellen Sie eine persönliche Website mit einem HTML-Dokument. Nennen Sie das Dokument mypage.html.

Fügen Sie in der Website mithilfe des <pre> HTML-Tag Python-Code ein.

<!DOCTYPE html>
<html>
<head>
  <title>Python-Code in HTML</title>
</head>
<body>
  <h2>Python-Code in HTML</h2>
  <pre>
with open('index.html', 'w') as file:
	file.write(html)
  </pre>
</body>
</html>

Öffnen Sie das Dokument im Browser und testen Sie weitere HTML-Tags.

⭐ mypage

Aufgabe 8.6: Dynamische Website

Sie erhalten ein Programm um eine Website zu erstellen:

from datetime import datetime 

html = f"""
<!DOCTYPE html>
<html>
<head>
  <title>HTML mit Erstelldatum</title>
</head>
<body>
  <p>Erstellt am {datetime.today()}.</p>
</body>
</html>
"""

with open('website.html', 'w') as file:
	file.write(html)

Führen Sie das Programm aus.

Öffnen Sie das Dokument website.html im Browser und führen Sie abwechslungsweise das Programm aus und aktualisieren die Seite mit F5

⭐ Dynamische Website

Aufgabe 8.7: Webserver

Die Website von Aufgabe 8.5: Erste Website wollen wir nun publizieren. Dazu erstellen wir einen HTTP-Server. Dieser lädt unsere Website und stellt Sie für andere Computer bereit.

Führen Sie das folgende Programm Webserver.py aus.

import http.server
import socketserver

class HttpRequestHandler(http.server.SimpleHTTPRequestHandler):
    def do_GET(self):
        if self.path == '/':
            self.path = 'mypage.html'
        return http.server.SimpleHTTPRequestHandler.do_GET(self)

# Erstelle ein Objekt anhand der obigen Klasse
handler = HttpRequestHandler

server = socketserver.TCPServer(('', 1234), handler)

# Starte den Server
server.serve_forever()

Und öffnen Sie diesen Link http://localhost:1234/.

In der Python-Konsole sehen Sie nun die Website-Aufrufe.

Nun möchten wir das Programm anpassen. Ändern Sie den Port von 1234 auf den HTTP-Standardport 80 und zeigen Sie die Website unter dieser Adresse/Port an.

Warnung

Falls Sie beim Starten des Webservers aufgrund der Portänderung einen Fehler erhalten, belassen Sie den Port bei 1234.

⭐ Webserver

Aufgabe 8.8: Intranet

Wenn ihr Computer und der ihrer Nachbaren im selben WLAN bzw. Netzwerk sind, sind die Voraussetzungen für ein Intranet gegeben.

Haben ihre Nachbaren die Website gestartet, können Sie anhand der IP-Adresse und der Port-Nummer anzeigen..

Zeigen Sie ihre lokale IPv4-Adresse über die Netzwerkeinstellungen des Computers an. Dazu ein Beispiel wie das auf einem Linux-Computer aussieht:

Tauschen Sie die IP-Adresse mit ihrem Nachbarn aus und rufen Sie die Website im Browser damit auf. Beispiel: http://192.168.1.104:1234.

Edit this page
Last Updated:
Contributors: Janik von Rotz
Prev
Slides Thema 8