Frage zu Verzweigungen

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
Cover
User
Beiträge: 2
Registriert: Mittwoch 5. Juli 2017, 18:22

Hallo Zusammen,

ich habe mich in letzter zeit mal mit Python beschäftigt und muss sagen, dass mir die Sprache echt gefällt.
Aber bei einem Programm, welches den zu zahlenden Steuerbetrag berechnen soll, verstehe ich den Syntaxfehler nicht. :K

Im ersten Programm kommt immer eine Fehlermeldung "invalid Syntax". Die Python Shell zeigt dabei auf die letzte Gehaltsvariable nach dem else.
Im zweiten Programm habe ich nichts verändert, außer dass ich die eine elif Abfrage rausgenommen habe. Da funktioniert es problemlos... Ich verstehe den Unterschied aber nicht.

Ich wäre für eure Hilfe sehr dankbar :D

Code: Alles auswählen

#Input
gehalt = float(input("Geben Sie Ihr Bruttogehalt in Euro ein: "))

#Input
fams = int(input("Bitte geben Sie Ihren Familienstand an. (1 = ledig; 2 = verheiratet): "))

#Verzweigung
if gehalt > 4000 and fams == 1:
	steuerbetrag = gehalt * 0.26
elif gehalt > 4000 and fams == 2:
	steuerbetrag = gehalt * 0.22
elif gehalt <=4000 and fams == 1:
	steuerbetrag = gehalt * 0.18
else gehalt <=4000 and fams == 2:
	steuerbetrag = gehalt * 0.22
	
#Ausgabe
print("Es gerbit sich ein Steuerbetrag von", steuerbetrag, "Euro")

#Konsolenfenster bleibt offen
input()

Code: Alles auswählen

#Input
gehalt = float(input("Geben Sie Ihr Bruttogehalt in Euro ein: "))

#Input
fams = int(input("Bitte geben Sie Ihren Familienstand an. (1 = ledig; 2 = verheiratet): "))

#Verzweigung
if gehalt > 4000 and fams == 1:
	steuerbetrag = gehalt * 0.26
elif gehalt <=4000 and fams == 1:
	steuerbetrag = gehalt * 0.18
else:
	steuerbetrag = gehalt * 0.22
	
#Ausgabe
print("Es gerbit sich ein Steuerbetrag von", steuerbetrag, "Euro")

#Konsolenfenster bleibt offen
input()

Cover
User
Beiträge: 2
Registriert: Mittwoch 5. Juli 2017, 18:22

Ich habs grade selbst schon gesehen.. Dummer Fehler :roll:
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

@Cover: da Du es schon herausgefunden hast, hier nochmal für alle: »else« kann mit einer Bedingung nichts anfangen.

Bei Deinen if-Abfragen mischst Du zwei disjunkte Bedingungen, die die zusammengesetzten Bedingungen unnötig kompliziert machen:

Code: Alles auswählen

if gehalt > 4000:
    if fams == 1:
        steuerbetrag = gehalt * 0.26
    else:
        steuerbetrag = gehalt * 0.22
else:
    if fams == 1;
        steuerbetrag = gehalt * 0.18
    else:
        steuerbetrag = gehalt * 0.22
 
und da jetzt noch in jeder Zeile die gleiche Rechnung gemacht wird, wäre es gut, in den Abfragen nur eine Variable steuersatz zu setzen:

Code: Alles auswählen

if gehalt > 4000:
    if fams == 1:
        steuersatz = 0.26
    else:
        steuersatz = 0.22
else:
    if fams == 1;
        steuersatz = 0.18
    else:
        steuersatz = 0.22
steuerbetrag = gehalt * steuersatz
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Das Ermitteln des Steuersatzes lässt sich auch weniger kompliziert formulieren:

Code: Alles auswählen

def gib_steuersatz(gehalt, fams):
    if fams > 2:
        return 0.22
    if gehalt > 4000:
        return 0.26
    return 0.18
...sofern diese Vereinfachung denn steuerrechtlich zutrifft.
BlackJack

Ist `fams` eigentlich eine gängige Abkürzung für `familienstand`? Ich würde das ja ausschreiben.
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Ich hätte gedacht es steht für die Anzahl der Fam.mitglieder. Muss bei meinem Code natürlich if fams > 1 heißen. Aber da sieht man schon wie Missverständnisse mit Abkürzungen entstehen können. Wenn das wirklich für den Fam.stand steht, dann sollte man die Zahlen besser als Konstanten mit sprechenden Namen definieren.
BlackJack

@snafu: Der Text beim `input()` suggeriert das es sich um den Familienstand handelt. :-)
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Alles klar, das hatte ich völlig ausgeblendet.
Antworten