if else - frage

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
albac4545
User
Beiträge: 3
Registriert: Dienstag 6. Oktober 2020, 21:50

Ich lese ein Python-Buch vom Rheinwerk-Verlag, bin ziemlich am Anfang und es sollte im zu schreibenden Programm festgestellt werden, ob ein Steuersatz von 18 oder 22 Prozent ausgerechnet wird. [mit Idle Python 64-bit-Version, runtergeladen auf python.org] Merkwürdigerweise werden bei einem Gehalt von 2000 Euro anstatt der erwarteten 360 Euro 440 Euro ausgerechnet. Kann man da was dran ändern?
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Wenn man den Code sehen würde, gesetzt in den Code-Tags (der </>-Knopf im vollständigen Editor), dann bestimmt.
albac4545
User
Beiträge: 3
Registriert: Dienstag 6. Oktober 2020, 21:50

Sorry, hab total vergessen, den Code einzufügen. Hier ist er:

sta = 0.18

stb = 0.22

print("Mit diesem Programm können Sie durch Eingabe Ihres monatlichen Gehalts feststellen, welcher Steuersatz zur Anwendung kommt. Bitte geben Sie Ihr monatliches Gehalt ein:")

x = input()

zahl = int(x)

a = zahl * sta

b = zahl * stb

if zahl > 2.500:
print("Es ergibt sich eine Steuer von", b)
else:
print("Es ergibt sich eine Steuer von", a)
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

Hallo,

das Kernproblem liegt daran, dass 2.500 nicht 2500 ist, sondern 2,5. Somit ist 2000 größer als 2,5 und es wird nur b ausgegeben.
Variablen sollten aussagekräftige Namen haben, also statt sta sowas wie STEUERSATZ_ACHTZEHN (Komplett groß geschrieben da Konstanten laut PEP8 komplett groß geschrieben werden) oder ähnliches, sodass man direkt weiß was gemeint ist.
Die Eingabe in einen Integer umwandeln kannst du auch schon direkt beim input, musst also dann keine neue Variable benutzen (Was noch fehlt ist Exceptionhandling, also wenn jemand einen Buchstaben statt einer Zahl eingibt z.B.).
Es macht auch keinen Sinn beide Werte berechnen zu lassen, wenn nur einer davon verwendet wird, also würde ich die Berechnung auch noch in die Fallunterscheidung miteinbeziehen und die Berechnung in eine Funktion auslagern, die das monatliche Gehalt als Paramter übergeben bekommt und das Ergebnis per return zurückgibt.

Code: Alles auswählen

STEUERSATZ_ACHTZEHN = 0.18

STEUERSATZ_ZWEIUNDZWANZIG = 0.22

def berechne_steuer(monatliches_gehalt):
    if monatliches_gehalt > 2500:
        return monatliches_gehalt * STEUERSATZ_ACHTZEHN
    else:
        return monatliches_gehalt * STEUERSATZ_ZWEIUNDZWANZIG


def main():
    print("Mit diesem Programm können Sie durch Eingabe Ihres monatlichen Gehalts feststellen, welcher Steuersatz zur Anwendung kommt.")
    monatliches_gehalt = int(input("Bitte geben Sie Ihr monatliches Gehalt ein: "))
    steuer = berechne_steuer(monatliches_gehalt)
    print(f"Bei einem Gehalt von {monatliches_gehalt} ergibt sich eine Steuer von {steuer}")


if __name__ == "__main__":
    main()
albac4545
User
Beiträge: 3
Registriert: Dienstag 6. Oktober 2020, 21:50

Danke!
Antworten