Übung 6

ℹ️
Bearbeitungszeitraum: 16. Dezember - 12. Januar.
⚠️
In einigen Übungsaufgaben geht es um Objektorientierte Programmierung und das Testen mit pytest. Diese Themen werden in Short-Videos behandelt, die im Bearbeitungszeitraum veröffentlicht werden.
  1. Bearbeiten Sie Lesbarkeit (Python).
  2. Bearbeiten Sie Veraltet.
  3. Bearbeiten Sie Keksdose.

Warm-Up-Aufgaben

Erstellen Sie für jede Übungseinheit jeweils eine eigene Datei für die Warm-Up-Aufgaben in dem Projektverzeichnis, in dem Sie auch die Übungsaufgaben bearbeiten werden.

Weitere Informationen finden Sie in diesem FAQ (Warm-Up-Aufgaben).

Als kompilierbares Codegerüst können Sie zu Beginn folgendes Snippet in Ihre Datei kopieren:

from cs50 import get_string

if __name__ == "__main__":
    # Hierhin schreiben Sie Ihren Code

Beachten Sie insbesondere den Import der CS50-Bibliothek und der “Standard Input and Output”-Bibliotheken.

Hinweise zur Konstruktion if __name__ == "__main__" finden Sie in einem Short-Video.

Die nun folgenden Warm-Up-Aufgaben kommen Ihnen bereits bekannt vor. Sie haben diese in Woche 1 und Woche 2 bereits in C implementiert.

Warm-Up 1

Erinnern Sie sich noch an die Hello, It’s Me Aufgabe von Übungsblatt 1?

In dieser Aufgabe implementieren wir dieses Programm in Python. Wie auch in dem C-Programm aus Übungsblatt 1 wird der Benutzer nach seinem Namen gefragt und dann Hallo Name ausgegeben. Wenn der Name des Benutzers zum Beispiel Adele ist, sollte Ihr Programm Hallo, Adele ausgeben. In Python müssen Sie keinen \n am Ende einer Zeile hinzufügen, da die print-Funktion automatisch einen Zeilenumbruch erzeugt.

Nutzen Sie dazu die get_string-Funktion der cs50-Bibliothek. Mit dieser Funktion können Sie einen str von einem Benutzer abfragen. Nutzen Sie anschließend print, um einen str auszugeben.

Denken Sie daran, dass Sie formatierte Zeichenfolgen in Python erstellen können, indem Sie einer Zeichenfolge f voranstellen. Beispielsweise setzt (“interpoliert") f"{name}" den Wert der Variable name dort ein, wo Sie {name} geschrieben haben.

Schritt für Schritt

Öffnen Sie VS Code entsprechend Ihrem Setup.

Führen Sie cd in Ihrem Terminalfenster aus. Die Eingabeaufforderung Ihres Terminalfensters sollte wie folgt aussehen:

$

Sie können nun Folgendes ausführen:

code warmup_aufgaben_6.py

um eine Datei namens warmup_aufgaben_6.py zu erstellen, in die Sie Ihren Code schreiben können. Achten Sie darauf, dass diese Datei mit .py endet und nicht mehr mit .c.

Ausführen des Python-Programms

Wenn Sie mit dem Programm fertig sind, können Sie es mit folgendem Befehl ausführen:

python warmup_aufgaben_6.py
Wo zu finden?
Sollten Sie noch Verständnisprobleme haben, was bei einer solchen Aufgabenstellung generell zu tun ist, kann es hilfreich sein Übungsblatt 1 zu wiederholen. Bei Problemen und Unklarheiten bezüglich der Python Syntax, schauen Sie sich am besten die Notizen aus der Vorlesung an. Weitere Erklärungen finden Sie auch in der Section 6.

Warm-Up 2

Mit der get_string-Funktion der cs50-Bibliothek kann man also einen str vom Benutzer abfragen. Nun wollen wir aber einen float erhalten. Das ist mit der get_float-Funktion, welche ebenfalls aus der cs50-Bibliothek stammt, möglich. Im Folgenden wollen wir diese Funktion nutzen. Wir orientieren uns hierfür wieder an einer C-Aufgabe von Übungsblatt 1.

Erinnern Sie sich noch an die Bargeld Aufgabe von Übungsblatt 1? Schauen Sie sich Ihren Code zu dieser Aufgabe am besten nochmal an, bevor Sie fortfahren.

Implementieren Sie nun ein Python-Programm, das den Benutzer fragt, wie viel Wechselgeld er hat, und dann die Mindestmenge an Münzen ausgibt, mit denen das Wechselgeld herausgegeben werden kann. Sie können genauso vorgehen wie in Übungsblatt 1, außer dass Ihr Programm diesmal in Python geschrieben sein soll. Gehen Sie davon aus, dass der Benutzer sein Wechselgeld in Dollar einwirft (z.B. 0.50 Dollar statt 50 Cent).

Gehen Sie dafür wie folgt vor:

  1. Eingabe mit get_float:
    • Verwenden Sie die Funktion get_float aus der cs50-Bibliothek, um die Eingabe des Benutzers zu erhalten.
    • Die Eingabe soll einen Betrag in Dollar und Cent repräsentieren. Dabei:
      • Muss das Dollarzeichen ($) nicht eingegeben werden.
      • Beispiele für gültige Eingaben:
        • 9.75 für 9 Dollar und 75 Cent
        • 9 oder 9.00 für genau 9 Dollar
      • Ungültige Eingaben, wie $9.75 oder 975$ sollen vermieden werden.
  2. Verarbeitung der Eingabe:
    • Ihr Programm sollte sicherstellen, dass der Benutzer einen positiven Betrag eingibt:
    • Falls der Benutzer einen negativen oder ungültigen Wert eingibt, soll er wiederholt zur Eingabe eines gültigen Betrags aufgefordert werden.
  3. Verwendung von Münzen:
    • Nehmen Sie an, dass folgende Münzen zur Verfügung stehen:
      • Vierteldollarmünzen (25 ¢)
      • Zehncentstücke (10 ¢)
      • Fünfcentstücke (5 ¢)
      • Eincentstücke (1 ¢)
    • Ihr Programm soll den eingegebenen Betrag so aufteilen, dass die geringstmögliche Anzahl an Münzen verwendet wird.
Testen

Führen Sie Ihr Programm mit python cash.py aus und warten Sie auf eine Eingabeaufforderung. Geben Sie nun die folgenden Eingaben ein und prüfen Sie, wie sich Ihr Programm verhält:

  • Test 1
    • Eingabe: 0.41
    • Erwartetes Verhalten: 4
  • Test 2
    • Eingabe: 0.01
    • Erwartetes Verhalten: 1
  • Test 3
    • Eingabe: 0.15
    • Erwartetes Verhalten: 2
  • Test 4
    • Eingabe: 1.60
    • Erwartetes Verhalten: 7
  • Test 5
    • Eingabe: 23
    • Erwartetes Verhalten: 92
  • Test 6
    • Eingabe: 4.2
    • Erwartetes Verhalten: 18
  • Test 7
    • Eingabe: -1
    • Erwartetes Verhalten: Die Eingabe sollte als ungültig abgelehnt werden, und das Programm sollte den Benutzer auffordern, eine andere Nummer einzugeben.
  • Test 8
    • Eingabe: foo
    • Erwartetes Verhalten: Die Eingabe sollte als ungültig abgelehnt werden, und das Programm sollte den Benutzer auffordern, eine andere Nummer einzugeben.
  • Test 9
    • Eingabe: nichts (nur Drücken der Eingabetaste)
    • Erwartetes Verhalten: Die Eingabe sollte als ungültig abgelehnt werden, und das Programm sollte den Benutzer auffordern, eine andere Nummer einzugeben.
Wo zu finden?
Sollten Sie noch Verständnisprobleme haben, was bei einer solchen Aufgabenstellung generell zu tun ist, kann es hilfreich sein Übungsblatt 1 zu wiederholen. Bei Problemen und Unklarheiten bezüglich der Python Syntax, schauen Sie sich am besten die Notizen aus der Vorlesung an. Weitere Erklärungen finden Sie auch in der Section 6.