0%

Arbeit mit Schleifen wiederholen · Abschlussprojekt

Abschlussprojekt: Projekt: Erstelle ein interaktives Menü

Die vorherige Lektion fragte weiter, bis sie eine brauchbare Antwort erhielt, und stoppte dann. Dieses Projekt arbeitet nach jeder erfolgreichen Aktion weiter, bis die Person sagt, dass sie fertig ist.

Das ist eine deutliche Veränderung. Eine Menüschleife ist das Grundmuster hinter sehr viel Software, vom Kommandozeilenwerkzeug bis zur App auf deinem Telefon: auf eine Anweisung warten, sie ausführen, wieder warten.

Alles Nötige kennst du bereits: eine Liste für die Daten, eine Schleife zum Weiterlaufen, if und elif zur Auswahl einer Aktion, break zum Aussteigen auf Wunsch und eine for-Schleife zum Anzeigen der Sammlung.

Was das Programm tut

Dein Programm verwaltet eine Liste von Einträgen. Das Thema wählst du selbst: Bücher zum Lesen, Pflanzen zum Kaufen, Reiseziele, Lieder zum Lernen oder etwas anderes, das dir gefällt.

Es versteht vier Befehle:

BefehlWirkung
addFragt, was hinzugefügt werden soll, und speichert es
listZeigt die gespeicherten Einträge als nummerierte Liste
countMeldet die Anzahl der gespeicherten Einträge
quitVerabschiedet sich und beendet die Schleife

Bei allem anderen gibt es eine höfliche Nachricht und einen weiteren Versuch.

Der genaue Wortlaut

Die Befehle, Eingabeaufforderungen und Nachrichten sind festgelegt, damit dein Programm automatisch geprüft werden kann. Alles andere, einschließlich Titel und Einträgen, gehört dir.

Frage mit genau dieser Eingabeaufforderung nach einem Befehl:

Command (add, list, count, quit): 

Frage mit genau dieser Eingabeaufforderung nach einem neuen Eintrag:

What should I add? 

Gib diese Nachrichten genau aus, mit den tatsächlichen Werten anstelle der Beispiele:

SituationNachricht
Nach dem HinzufügenAdded: read a book
Beim Auflisten1. read a book, dann 2. water the plants und so weiter
Beim Auflisten ohne gespeicherte EinträgeThe list is empty.
Beim ZählenItems stored: 2
Beim BeendenGoodbye.
Bei einem unbekannten BefehlI do not know that command.
Nach der SchleifeFinal count: 2

Bereinige jede Antwort mit .strip(). Bereinige den Befehl zusätzlich mit .strip().lower(), damit sowohl ADD als auch add funktionieren. Behalte den Eintragstext ansonsten so bei, wie er eingegeben wurde, abgesehen von umgebenden Leerzeichen. Wer The Left Hand of Darkness hinzufügt, sollte nicht the left hand of darkness in seiner Liste finden.

Baue es in fünf Schritten auf

Führe dein Programm nach jedem Schritt aus. Eine Menüschleife lässt sich viel leichter in Teilen erstellen als auf einmal.

1. Die Schleife, die endet

Gib deinen Titel aus. Schreibe dann eine while True-Schleife, die nach einem Befehl fragt und nur bei quit mit break aussteigt. Füge die Zeile Final count: nach der Schleife hinzu.

Führe sie aus. Tippe quit. Wenn das Programm endet, steht das Grundgerüst.

2. Der unbekannte Befehl

Ergänze den else-Zweig, der I do not know that command. ausgibt. Führe das Programm aus, tippe etwas Unsinniges und prüfe, ob du einen weiteren Versuch bekommst, statt dass es abstürzt.

3. Hinzufügen

Ergänze den Zweig add. Er stellt die zweite Frage, hängt die bereinigte Antwort an items an und gibt die Bestätigung aus. Gib vorübergehend len(items) aus, um zu prüfen, ob die Liste tatsächlich wächst. Entferne diese Diagnose, bevor du die Anzeige erstellst.

4. Zählen und auflisten

Ergänze den Zweig count, dann list. Behandle innerhalb von list zuerst die leere Liste. Andernfalls durchlaufe die Einträge und führe neben der Schleife einen Zähler nach dem Akkumulatormuster aus Lektion 6: Starte ihn vor der Schleife bei 1, gib ihn aus und addiere am Ende jedes Durchlaufs 1.

5. Persönlich gestalten

Wähle deinen Titel und dein Thema. Füge drei oder vier echte Einträge hinzu und lies die Ausgabe so, wie ein Benutzer sie lesen würde. Wirkt etwas abrupt oder unklar?

Teste vor der Abgabe

Gehe diese Folge von Hand durch und prüfe jede Antwort:

  1. list im leeren Programm soll melden, dass die Liste leer ist;

  2. zweimal add, jeweils mit einem echten Eintrag;

  3. count soll 2 melden;

  4. ein unsinniger Befehl soll das Programm nicht beenden;

  5. list soll beide Einträge ab 1 nummerieren;

  6. ADD in Großbuchstaben soll weiterhin funktionieren;

  7. ein Eintrag mit umgebenden Leerzeichen soll ohne diese gespeichert werden;

  8. quit soll die Verabschiedung und die endgültige Anzahl ausgeben.

Submit führt dein Programm mit eigenen vorbereiteten Antworten aus und durchläuft denselben Weg, ohne dass du etwas eintippst.

Wenn dein Tarif Guided enthält, ist jetzt ein guter Moment, Monty zu bitten:

Lies meine Menüschleife und sag mir, ob jeder Zweig tut, was sein Befehl verspricht. Zeige mir eine Stelle, die ich klarer machen könnte, ohne sie für mich umzuschreiben.

Nach bestandener Prüfung

Probiere einen eigenen fünften Befehl aus, etwa first, um nur den ersten Eintrag zu zeigen. Du wirst merken, dass die Programmstruktur leicht Platz dafür bietet. Das spricht für einen guten Aufbau.

Sieh dir dann das gesamte Programm an und beachte, wie lang der Schleifenrumpf geworden ist. Jeder Zweig ist kurz, aber sie stehen untereinander. Um einen davon zu verstehen, musst du an den anderen vorbeilesen. Das nächste Kapitel gibt dir das passende Werkzeug: eigene benannte Funktionen. So können add, list und count jeweils zu einer einzelnen Zeile in der Schleife und einem kleinen, separat lesbaren Codeabschnitt werden.

Du hast ein Programm erstellt, das offen bleibt, sich Informationen merkt, auf Anweisungen reagiert und sich auf Wunsch beendet. Das ist eine deutlich andere Art von Programm als die aus Kapitel 1.

Aufgabe

Erstelle das interaktive Menü aus der Lektion.

Anforderungen:

  1. Gib menu_title einen nicht leeren String deiner Wahl und gib ihn einmal vor der Schleife aus.

  2. Beginne items als leere Liste.

  3. Wiederhole, bis die Person quit eingibt.

  4. Frage mit Command (add, list, count, quit): nach einem Befehl und bereinige ihn mit .strip().lower().

  5. add fragt What should I add? , hängt die mit .strip() bereinigte Antwort an und gibt Added: gefolgt vom Eintrag aus.

  6. list gibt The list is empty. aus, wenn nichts gespeichert ist, und andernfalls jeden Eintrag als nummerierte Zeile ab 1.

  7. count gibt Items stored: gefolgt von der gespeicherten Anzahl aus.

  8. quit gibt Goodbye. aus und verlässt die Schleife.

  9. Jeder andere Befehl gibt I do not know that command. aus, und die Schleife geht weiter.

  10. Gib nach der Schleife Final count: gefolgt von der gespeicherten Anzahl aus.

Wähle deinen eigenen Titel und deine eigenen Einträge. Alles in der Tabelle mit den genauen Nachrichten muss übereinstimmen.