Seite 1 von 1

Frage zu Verzweigungen

Verfasst: Mittwoch 5. Juli 2017, 18:39
von Cover
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()


Re: Frage zu Verzweigungen

Verfasst: Mittwoch 5. Juli 2017, 18:46
von Cover
Ich habs grade selbst schon gesehen.. Dummer Fehler :roll:

Re: Frage zu Verzweigungen

Verfasst: Mittwoch 5. Juli 2017, 19:05
von Sirius3
@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

Re: Frage zu Verzweigungen

Verfasst: Mittwoch 5. Juli 2017, 22:57
von snafu
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.

Re: Frage zu Verzweigungen

Verfasst: Mittwoch 5. Juli 2017, 23:14
von BlackJack
Ist `fams` eigentlich eine gängige Abkürzung für `familienstand`? Ich würde das ja ausschreiben.

Re: Frage zu Verzweigungen

Verfasst: Donnerstag 6. Juli 2017, 10:11
von snafu
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.

Re: Frage zu Verzweigungen

Verfasst: Donnerstag 6. Juli 2017, 12:49
von BlackJack
@snafu: Der Text beim `input()` suggeriert das es sich um den Familienstand handelt. :-)

Re: Frage zu Verzweigungen

Verfasst: Donnerstag 6. Juli 2017, 15:29
von snafu
Alles klar, das hatte ich völlig ausgeblendet.