if else - frage
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?
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)
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)
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.
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()