Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
de:modul:m319:learningunits:lu10:aufgaben:einleser [2025/06/23 07:45] – gelöscht - Externe Bearbeitung (Unbekanntes Datum) 127.0.0.1de:modul:m319:learningunits:lu10:aufgaben:einleser [2025/06/23 07:45] (aktuell) – ↷ Links angepasst, weil Seiten im Wiki verschoben wurden msuter
Zeile 1: Zeile 1:
 +====== LU10.A02 - Einleser als Modul ======
  
 +===== Ausgangslage =====
 +
 +In vielen der Aufgaben im Modul 319 lesen Sie mit ''input()'' Eingaben eines Benutzers ein. Ist die Eingabe eine Zahl, so müssen Sie die Eingabe mit ''int(input('Zahl eingeben'))'' in eine Ganzzahl oder mit ''float(input('Zahl eingeben'))'' in eine Fliesskommazahl umwandeln. Gibt der Benutzer nun aber anstatt einer ''Zahl'' einen ''Buchstaben'' ein, erhalten Sie einen ''ValueError'' vom Interpreter. Wir möchten uns nun ein Modul mit Funktionen erstellen, welche uns diese Eingaben validieren und im Falle einer falschen Eingabe eine Fehlermeldung ausgeben und den User erneut zur Eingabe auffordern.
 +
 +Der einfachste Weg dieses Problem zu lösen sehen Sie im folgenden abschnitt Pseudocode:
 +
 +<WRAP center round box 60%>
 +<code>
 +Funktion read_float(text_to_display)
 +  Start Endlosschleife:
 +    num = Einlesen_von_konsole(text_to_display)
 +    Versuche:
 +      num = in_float_umwandeln(num)
 +    Ein ValueError wurde ausgelöst:
 +      Fehlermeldung ausgeben
 +      Endlosschleife nochmals durchlaufen
 +    Kein Error:
 +      Die Variable num zurückgeben 
 +</code>
 +</WRAP>
 +
 +Wir können mit unserem jetzigen Wissen aus dem Modul 319 leider noch nicht den ganzen Pseudocode in Python umsetzen. Wir wissen noch nicht wie wir Python etwas versuchen lassen. Um dieses Problem in Python zu lösen muss etwas Wissen aus dem Modul 320 vorgeholt werden. In Python gibt es die Möglichkeit das Programm etwas zu versuchen zu lassen und wenn es Schief geht, dann stürzt das Programm nicht ab sondern läuft weiter. Um dies zu verwirklichen gibt es den Befehl ''try-except''. Ein ''try-except''-Block sieht in etwa so aus:
 +
 +<WRAP center round box 60%>
 +<code python>
 +try:
 +    #Code to try
 +except <Name of Exception>:
 +    #Code if it fails
 +else:
 +    #Code if it works
 +</code>
 +</WRAP>
 +
 +    
 +Im ''try''-Block steht der Code, den Python auszuführen versuchen soll, im ''except''-Block steht der Code der ausgeführt wird, wenn es nicht geklappt hat. Im ''else''-Block steht der Code der ausgeführt wird, wenn es geklappt hat.
 +
 +===== Aufgabe =====
 +Da Sie jetzt den ''try-except''-Block kennen können wir den Pseudocode jetzt komplett in Python umsetzen.
 +
 +==== Teilaufgabe 1 ====
 +Nehmen Sie die Github-Classroom Aufgabe an und clonen Sie das Repository in ihre Entwicklungsumgebung.
 +
 +<WRAP center round box 60%>
 +<file python main.py>
 +def main():
 +    # do something
 +    float = read_float('Please enter a real number> ')
 +    int = read_int('Please enter a whole number> ')
 +
 +    print(float)
 +    print(int)
 +
 +
 +if __name__ == '__main__':
 +    main()
 +</file>
 +
 +<file python input_reader.py>
 +"""
 +input_reader module with input validation
 +"""
 +</file>
 +</WRAP>
 +
 +Erstellen Sie im File ''input_reader.py'' die Funktionsdefinition der Funktionen ''read_float()'' und ''read_int()''.
 +
 +==== Teilauftrag 2 ====
 +Übersetzen Sie den Pseudocode aus der Ausgangslage in Python code für die Funktion ''read_float''.
 +
 +<WRAP center round box 60%>
 +<code python>
 +def read_float(text_to_display):
 +  """
 +  TODO: Erstellen Sie den DocString
 +  """
 +  Start Endlosschleife:
 +    num = Einlesen_von_konsole(text_to_display)
 +    Versuche:
 +      num = in_float_umwandeln(num)
 +    Ein ValueError wurde ausgelöst:
 +      Fehlermeldung "Please, enter a real number!" ausgeben
 +      Endlosschleife nochmals durchlaufen
 +    Kein Error:
 +      Die Variable num zurückgeben 
 +</code>
 +</WRAP>
 +
 +<WRAP center round important 60%>
 +Erstellen Sie einen passenden Docstring wie in [[de:modul:m319:learningunits:lu09:funktionen#dokumentationszeichenkette_docstring|LU09]] erklärt.
 +</WRAP>
 +
 +
 +==== Teilauftrag 3 ====
 +Überlegen Sie sich, was Sie alles ändern müssen, damit die Funktion ''read_int'' sinnvoll funktionieren würde.
 +Ergänzen Sie ihr Modul ''input_reader.py'' mit dieser Funktion.
 +
 +
 +<WRAP center round box 60%>
 +<file python input_reader.py>
 +def read_float(text_to_display):
 +  ...
 +
 +def read_int(text_to_display): # Fehlermeldung: Please, enter a valid whole number!
 +  ...  
 +  
 +</file>
 +</WRAP>
 +
 +
 +==== Teilauftrag 4 ====
 +Importieren Sie ihr ''input_reader'' Modul in ihrem ''main.py'' damit das Programm funktioniert.
 +
 +<WRAP center round box 60%>
 +<code python>
 +# Import the input_reader module here
 +
 +def main():
 +    # do something
 +    float = read_float('Please enter a real number> ')
 +    int = read_int('Please enter a whole number> ')
 +
 +    print(float)
 +    print(int)
 +
 +if __name__ == '__main__':
 +    main()
 +</code>
 +</WRAP>
 +
 +
 +----
 +<details>
 +<summary>//=> GitHub Repo für externe Besucher//</summary>
 +GitHub Repository https://github.com/templates-python/m319-lu10-a02-reader-module
 +
 +//Lernende am BZZ müssen den Link zum GitHub Classroom Assignment verwenden//
 +
 +</details>
 +{{tag>M319-LU10}}
 +[[https://creativecommons.org/licenses/by-nc-sa/4.0/ch/|{{https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png}}]] (c) Kevin Maurizi