Python
Wir wollen ein einfaches Formularprogramm schreiben, welches mittels Terminalbefehlen eine Formulardatei erzeugt und diese wieder lesen kann.
https://l.itsnameless.de/pyrepo
Versuche möglichst immer, Type Annotations für die Argumente und Rückgabewerte von Funktionen zu nutzen.
Zunächst benötigen wir ein Modul, in welchem wir unser Projekt erstellen.
- Erstelle ein Python Modul (aka. eine Python Datei) mit dem Namen
assistant.pyim Ordnerformular. - Erstelle eine Methode
run()welche keine Argumente erhält und zunächst einfachHello, Formular Assistant!auf der Konsole ausgibt. - Erstelle im root-Verzeichnis eine Datei
main.pyund importiere dierun()-Methode ausassistant.py. Führe diese aus und teste den Code.
Nun benötigen wir eine Möglichkeit, den Nutzer ein Formular erstellen zu lassen. Dafür wollen wir dem Nutzer Fragen stellen.
- Erstelle eine Funktion
ask_for_form(), welche keine Argumente erhält und dem Nutzer die Möglichkeit gibt, Fragen für ein Formular einzugeben.- Schreibe einen entsprechenden Docstring.
- Frage den Nutzer wiederholt
Gib eine Frage ein (oder 'fertig' zum Beenden):- wenn der Nutzer
fertigschreibt, brich aus der Schleife ab - wenn der Nutzer etwas anderes schreibt, speichere die Frage in einer Liste.
- wenn der Nutzer
- gebe am Ende die Liste zurück.
- Führe die Funktion in
run()aus:- Speichere die Fragen dort in einer Variablen
- gib diese zunächst auf der Konsole aus.
- Teste den Code.
Jetzt möchten wir die Fragen in einer Datei speichern, damit der Nutzer diese ausfüllen kann.
- Erstelle eine Funktion
create_form(), welche eine Listequestionsund einen Dateinamenfilenameerhält:- Ist der Dateiname nicht gegeben, soll dieser
form.txtbetragen.
- Ist der Dateiname nicht gegeben, soll dieser
- Öffne die Datei
filenameim Schreibmodus (w) mittels eines Kontext-Managers (with). - Schreibe nun jede Frage in eine neue Zeile, wobei die Antwort mittels eines
:separiert werden soll:Frage? : \n- Bonus: Nutze
f-Strings.
- Teste die Funktion.
Jetzt möchten wir die Antworten extrahieren und auf der Konsole ausgeben können.
- Erstelle eine Funktion
read_form(), welche einen Dateinamenfilenameerhält:- Ist der Dateiname nicht gegeben, soll dieser
form.txtbetragen.
- Ist der Dateiname nicht gegeben, soll dieser
- Öffne die Datei
filenameim Lesemodus (r) mittels eines Kontext-Managers. - Erstelle ein Dictionary
answers, welches als Key die Fragen und als Value die jeweilige Antwort erhalten soll.
- Lies nun die Datei Zeile für Zeile aus:
- Stelle sicher, dass Leerzeichen, Tabs, Newlines, ... entfernt werden (
strip()) - Separiere die Zeilen entsprechend deinem Trenner (
split()) - Speichere die Werte im Dictionary (Frage als
key, Antwort alsvalue).
- Stelle sicher, dass Leerzeichen, Tabs, Newlines, ... entfernt werden (
- Gib das Dictionary zurück.
- Teste die Funktion und gib die Daten zunächst auf der Konsole aus.
- Kommentiere die Aufrufe von
ask_for_form()undcreate_form()aus, um nurread_form()zu nutzen. - Beachte: Vor dem Ausführen musst du die Fragen beantworten!
- Kommentiere die Aufrufe von
Es ist umständlich, ständig im Code das Erstellen und Lesen Ein- und Auszukommentieren. Dafür können wir aber Terminal-Argumente nutzen!
- Importiere das Modul
argparseund erstelle inrun()einen neuenparsermit derdescription"Formular Assistant". - Erstelle eine mutually-exclusive Gruppe, mit den Argumenten:
-c (--create)welches ein Boolean Value speichert, wenn die Flag existiert (action="store_true")-r (--read)welches ein Boolean Value speichert, wenn die Flag existiert.
- Füge dem Parser nun noch ein Argument (
-f (--file)) hinzu:- der Type muss
strsein - es muss optional mit dem Default-Value
form.txtsein.
- der Type muss
- Lies nun die Argumente aus (
parse_args()). - Bei der Flag
-c:- Frage den Nutzer nach Fragen
- Speichere die Fragen ab
- Schreibe "Formular erstellt."
- Bei der Flag
-r:- Lies das Formular aus
- Iteriere über die Fragen und Antworten und gib diese wie folgt aus:
- Format
- Frage : Antwort - Fragen in Großbuchstaben
- Format
- Teste dein Programm.
Hat euch diese Stunde sehr gut gefallen? War sie absolut schrecklich? Das ist mir nicht egal! Also lasst Feedback da!
https://l.itsnameless.de/practice








