mitmario.dev

Synthese: Tarifrechner

Python Sandbox 3 Min Lesezeit 3 BeispieleLektion 6 von 7

Bei einem kleinen Kino gelten diese Preise:

  • Der Grundpreis ist 11 Euro.
  • Kinder unter 12 zahlen 6 Euro.
  • Studierende zahlen 9 Euro.
  • Dienstags gibt es auf jeden Preis 2 Euro Nachlass.
  • Aber kein Ticket kostet weniger als 5 Euro.

Fünf Regeln, und jede für sich ist einfach. Schwierig wird es erst, wenn mehrere auf einmal gelten. Was zahlt ein Kind am Dienstag?

So eine Preisliste mit Ausnahmen kennst du, auch wenn du nie darüber nachgedacht hast. Für das Programm dazu reichen die Teile aus diesem Abschnitt: Vergleiche, if, elif und else, dazu and, or und not.

Erst die Regeln sortieren

Wie beim Spritkostenrechner lohnt sich ein Blick auf die Liste, bevor eine Zeile Code entsteht. Du willst wissen, welche Regeln sich gegenseitig ausschließen und welche obendrauf kommen.

Die ersten drei schließen sich aus. Jeder Gast hat genau einen Grundpreis, 11, 9 oder 6 Euro, nie zwei davon. Das ist eine Entscheidung mit mehreren Wegen, also if, elif und else.

Die letzten beiden kommen obendrauf. Der Dienstagsnachlass gilt für alle, egal welcher Grundpreis gerade gilt, und die Untergrenze gilt am Ende für jedes Ticket. Das sind zwei eigene Entscheidungen, jede mit ihrem eigenen if, nacheinander. Es ist der Fall aus Lektion 3.3, in dem mehrere einzelne if richtig sind, weil mehrere Regeln gleichzeitig zutreffen dürfen.

Der Grundpreis

Der Grundpreis
alter = 35
studierend = "n"

if alter < 12:
    preis = 6
elif studierend == "j":
    preis = 9
else:
    preis = 11
print(f"Grundpreis: {preis} Euro")

Der erste Teil ist eine Kette aus if, elif und else, und auch hier ist die Reihenfolge eine Entscheidung. Wer unter 12 ist, bekommt den Kinderpreis. Ob jemand mit zehn Jahren studiert, wird gar nicht erst gefragt, weil die Frage nach dem Studium erst kommt, wenn jemand kein Kind mehr ist.

Mit einem Alter von 8 oder 25 und "j" oder "n" für das Studium kommen die anderen Preise heraus. Am Ende hat preis in jedem Fall genau einen Wert, und auf dem baut alles Weitere auf.

Gerechnet wird hier übrigens in ganzen Euro. preis = 11 ist eine ganze Zahl, und deshalb steht in der Ausgabe 11 und nicht 11.0. Bei Preisen mit Cent bräuchte es wieder :.2f, hier nicht.

Die Reihenfolge der Abzüge

Bleiben die beiden Regeln, die obendrauf kommen. An ihnen hängt die Frage nach dem Kind am Dienstag. Sein Grundpreis ist 6 Euro, mit dem Nachlass werden 4 daraus, und wegen der Untergrenze sind es am Ende wieder 5. So jedenfalls, wenn man die Regeln in der richtigen Reihenfolge anwendet.

Erst deckeln, dann abziehen
preis = 6
tag = "Dienstag"

if preis < 5:
    preis = 5
if tag == "Dienstag":
    preis = preis - 2
print(f"Das Ticket kostet {preis} Euro.")

Hier steht die Untergrenze zuerst. Gefragt wird, ob der Preis unter 5 liegt. Bei 6 Euro nicht, also passiert nichts. Danach kommt der Dienstag, und 2 Euro gehen ab. Am Ende steht ein Ticket für 4 Euro da, das es laut Preisliste gar nicht geben dürfte. Die Untergrenze wurde ja geprüft. Nur eben zu früh.

Erst abziehen, dann deckeln
preis = 6
tag = "Dienstag"

if tag == "Dienstag":
    preis = preis - 2
if preis < 5:
    preis = 5
print(f"Das Ticket kostet {preis} Euro.")

Andersherum stimmt es. Erst kommt der Nachlass, dann die Prüfung, ob der Preis zu tief gerutscht ist. Eine Untergrenze ist eine Kontrolle am Schluss. Sie soll auffangen, was durch die Regeln davor passiert ist, und das geht nur, wenn die schon fertig sind.

Regeln, die aufeinander aufbauen, haben also eine Reihenfolge. In der Preisliste steht nur, was gilt, aber nicht, in welcher Reihenfolge man es ausrechnet. Davon hängt aber ab, ob am Ende herauskommt, was gemeint war. Beim Kind am Dienstag sind das 5 Euro und nicht 4.

Was die Aufgabe will

Zur Kinokasse kommt eine Regel dazu, die hier noch fehlt, nämlich ein Aufschlag am Wochenende mit einer eigenen Grenze. Auch bei ihm ist die Frage, an welcher Stelle er gerechnet wird. Unter den sechs Gästen, mit denen geprüft wird, ist wieder das Kind am Dienstag.

Zum Mitnehmen

Erst kommen die Regeln als Liste, dann wird jede ein eigener Schritt. Regeln, die sich ausschließen, landen zusammen in einer Kette aus if, elif und else, und jede Regel, die obendrauf kommt, bekommt ihr eigenes if. Bei diesen ifs hängt das Ergebnis an der Reihenfolge.

Jetzt du

Basis Konto, kostenlos

Zu dieser Lektion gehört eine Aufgabe. Du schreibst den Code selbst, und nach jedem Lauf sagt dir eine Prüfliste, was schon stimmt.

Dafür brauchst du das Basis Konto. Es kostet nichts, und ein Passwort gibt es auch nicht.

In diesem Kurs läuft dein Code auf einem Server. Dafür hat das Basis Konto 1 Stunde im Monat, mehr Zeit gibt es mit dem Premium Konto.

Was in dieser Lektion steckt

  • Artikel mit 3 Beispielen zum Ausprobieren

    Steht hier, ohne Konto lesbar.

  • Aufgabe, dein Code läuft auf einem Server

    Öffnet sich mit dem Basis Konto.