Logo des digitalen Schulbuchs inf-schule.de. Schriftzug in Zustandsübergangsdiagramm eines endlichen Automaten.

Beispiel - Preisberechnungen

Preisberechnung - eine komplizierte Sache

Weißt du, wie der Zahlungsbetrag eines Artikels zustande kommt?

Dialog über Preise: Er: Tolles Gerät! Der Listenpreis beträgt 159€. Mit Mehrwertsteuer und abzüglich 5% Rabatt sowie 2% Skonto kostet das gut Stück nur 176.15€. Sie: Was, so viel![1]

Aufgabe 1

Berechne den Zahlungsbetrag eines Artikels, dessen Listenpreis mit 280€ angegeben ist und der mit 19% Mehrwertsteuer zu versehen ist. Mit dem Händler wurde ein Rabattsatz von 15% und ein Skontosatz von 1.5% vereinbart.

Automatisierung von Preisberechnungen

Für die schnelle Durchführung von Preisberechnungen soll eine Funktion mit folgendem Verhalten entwickelt werden.

<Black-Box-Diagramm><Funktionsname>zahlungsbetrag</Funktionsname><Übergaben><Übergabe><Wert>159.0</Wert><Variable>listenpreis</Variable></Übergabe><Übergabe><Wert>5.0</Wert><Variable>pRabatt</Variable></Übergabe><Übergabe><Wert>19.0</Wert><Variable>pMwSt</Variable></Übergabe><Übergabe><Wert>2.0</Wert><Variable>pSkonto</Variable></Übergabe></Übergaben><Rückgabe><Text>return</Text><Wert>176.15</Wert></Rückgabe></Black-Box-Diagramm>

Für die Funktionsdefinition könnte man einen Berechnungsausdruck entwickeln, der aus den übergebenen Größen direkt den Rückgabewert bestimmt.

def zahlungsbetrag(listenpreis, pRabatt, pMwSt, pSkonto):
    return listenpreis*(1-pRabatt/100)*(1+pMwSt/100)*(1-pSkonto/100)

Bei komplizierteren Berechnungen kann ein solcher Berechnungsausdruck recht lang werden. Der Nachteil eines langen und komplizierten Berechnungsausdrucks ist, dass er schwer zu durchschauen ist.

Zwischenspeichern von Werten

Eine Möglichkeit, die Verständlichkeit von komplizierten Berechnungen zu erhöhen, besteht darin, die Berechnung in Schritte zu zerlegen. Man benutzt dann oft Hilfsvariablen, um bereits berechnete Werte zwischenzuspeichern.

def zahlungsbetrag(listenpreis, pRabatt, pMwSt, pSkonto):
    rabatt = (listenpreis / 100) * pRabatt
    nettopreis = listenpreis - rabatt
    mehrwertsteuer = (nettopreis / 100) * pMwSt
    bruttopreis = nettopreis + mehrwertsteuer
    skonto = (bruttopreis / 100) * pSkonto
    endpreis = bruttopreis - skonto
    return endpreis

Aufgabe 2

(a) Analysiere die Funktionsdefinition. Kannst du jede Programmzeile erklären?

(b) Teste die Funktion im Online Python Tutor. Beobachte, wie hier die Variablen erzeugt und mit Werten versehen werden. Teste die Funktion auch in einer normalen Python-Umgebung.

Überschreiben von Werten

Hier eine weitere Möglichkeit, die Funktion zahlungsbetrag zu definieren.

def zahlungsbetrag(listenpreis, pRabatt, pMwSt, pSkonto):
    rabatt = (listenpreis / 100) * pRabatt
    preis = listenpreis - rabatt
    mehrwertsteuer = (preis / 100) * pMwSt
    preis = preis + mehrwertsteuer
    skonto = (preis / 100) * pSkonto
    preis = preis - skonto
    return preis

Aufgabe 3

(a) Analysiere auch diese Funktionsdefinition. Worin unterscheidet sie sich von der Definition oben? Kannst du auch hier jede Programmzeile erklären?

(b) Teste diese Funktion im Online Python Tutor. Beobachte, wie hier die Variablen erzeugt und mit Werten versehen werden. Beobachte insbesondere, wie sich der Wert der Variablen preis ändert.

Aufgabe 4

Kann man bei der Berechnung des Zahlungsbetrags die Reihenfolge der Berechnungsschritte abändern (z.B. erst Rabatt und Skonto abziehen und dann erst die Mehrwertsteuer hinzuaddieren)? Untersuche diese Frage, indem du die Funktionsdefinition aus Aufgabe 3 geeignet abänderst.

Quellen

X

Fehler melden

X

Suche