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:
| Befehl | Wirkung |
|---|---|
add | Fragt, was hinzugefügt werden soll, und speichert es |
list | Zeigt die gespeicherten Einträge als nummerierte Liste |
count | Meldet die Anzahl der gespeicherten Einträge |
quit | Verabschiedet 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:
| Situation | Nachricht |
|---|---|
| Nach dem Hinzufügen | Added: read a book |
| Beim Auflisten | 1. read a book, dann 2. water the plants und so weiter |
| Beim Auflisten ohne gespeicherte Einträge | The list is empty. |
| Beim Zählen | Items stored: 2 |
| Beim Beenden | Goodbye. |
| Bei einem unbekannten Befehl | I do not know that command. |
| Nach der Schleife | Final 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:
listim leeren Programm soll melden, dass die Liste leer ist;zweimal
add, jeweils mit einem echten Eintrag;countsoll2melden;ein unsinniger Befehl soll das Programm nicht beenden;
listsoll beide Einträge ab1nummerieren;ADDin Großbuchstaben soll weiterhin funktionieren;ein Eintrag mit umgebenden Leerzeichen soll ohne diese gespeichert werden;
quitsoll 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:
Gib
menu_titleeinen nicht leeren String deiner Wahl und gib ihn einmal vor der Schleife aus.Beginne
itemsals leere Liste.Wiederhole, bis die Person
quiteingibt.Frage mit
Command (add, list, count, quit):nach einem Befehl und bereinige ihn mit.strip().lower().addfragtWhat should I add?, hängt die mit.strip()bereinigte Antwort an und gibtAdded:gefolgt vom Eintrag aus.listgibtThe list is empty.aus, wenn nichts gespeichert ist, und andernfalls jeden Eintrag als nummerierte Zeile ab1.countgibtItems stored:gefolgt von der gespeicherten Anzahl aus.quitgibtGoodbye.aus und verlässt die Schleife.Jeder andere Befehl gibt
I do not know that command.aus, und die Schleife geht weiter.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.