Variable wird nicht erkannt(Python)?
Hallo Leute,
und zwar mach ich grad eine Aufgabe, wo es drum geht der Person Kredit zu geben, was abhängig vom Alter und Einkommen ist. Das Problem ist, dass es mir sagt, dass sowohl Alter und Einkommen nicht definiert sind. Ich denke aber, dass sie definiert sind, da sie durch die input Funktion=>alter=int(input("...")) automatisch ein Wert zugeordnet bekommen. Ich wäre dankbar, wenn ihr mir hilft und mir sagt, wo der Fehler lag.
Hier der Code:
print("Hallo Kunde")
eingabe=(str(input("Womit können wir Sie Unterstützen? 1. Kreditberatung\n 2.Schulden")))
if eingabe==1:
Alter=(int(input("Wie alt sind Sie?"))
Einkommen=(float(input("Was ist Ihr Einkommen?"))
if Alter < 20 and Einkommen < 20000:
print("Wir können Ihnen leider keinen Kredit geben")
elif alter>20 and Einkommen>20000:
print("Wir bieten Ihnen ein Kredit in Höhe von 10000 Euro")
elif alter>25 and Einkommen>30000:
print("Wir bieten Ihnen einen Kredit in Höhe von 30000 Euro")
2 Antworten
Du weist den Variablen nur Werte zu, wenn eingabe dem Wert 1 entspricht. Es wäre gut, einen Plan B in der Hinterhand zu haben (z.B. vorzeitiges Beenden der Anwendung), falls diese Bedingung nicht eintritt.
Da 1 eine Zahl ist und eingabe auf einen String verweist, wird die Bedingung im if nicht erfüllt. Entweder du änderst den Vergleichsterm:
if eingabe == "1":
oder du führst eine Typkonversion durch:
eingabe = int(input("..."))
Ich wäre dankbar, wenn ihr mir hilft und mir sagt, wo der Fehler lag.
Alter und Einkommen existieren NUR in dem if-Block. Danach gibt es sie nicht mehr. Stichwort "Scope". Wenn du die Struktur beibehalten willst, sollten diese außerhalb des if-else-Konstrukts existieren
Und auch wenn du das Problem gelöst hast:
elif alter>20 and Einkommen>20000:
...
elif alter>25 and Einkommen>30000:
...
Variablennamen sind Case-Sensitiv. alter != Alter.
@regex9 Ich wieß nicht, ob ich das richtig umgesetzt habe, das ist halt immer noch so, wie es davor war.
Wenn dein Ergebnis von dem gewünschten Ergebnis abweicht, kann es wohl noch nicht korrekt sein.
Lies dir doch noch einmal durch, was regex9 vorgeschlagen hat.
Dazu ein paar Anhaltspunkte:
- Alles, was zu einer "Gruppe" gehört, sollte auch im entsprechenden Block sein - mit der passenden Einrückung.
- Warum setzt du am Anfang Einkommen, Jahre, Zinssatz fest, wenn das eigentlich nur Teil von eingabe=="2" ist? Warum setzt du das Fest, wenn es eher Sinn ergibt, das - wie bei eingabe=="1" abzufragen?
- Warum machst du die Abfrage bzgl Alter und Einkommen im "äußersten" Scope - außerhalb der entsprechenden Abfrage? Alter ist in dem Zustand nicht definiert
- Du hast die Reihenfolge der elif nicht geändert
Deine drei letzten Abfragen bzgl. Alter und Einkommen stehen nicht im Codeblock deines ersten if. Ihre Reihenfolge hast du auch nicht geändert. Wenn der Nutzer bspw. als Alter 30 angibt, muss auch die Abfrage für Alter > 25 vor der Abfrage für Alter > 22 ausgewertet werden.
Danke, erstmal für die Hilfe, hat auch Ansichten geklappt, nur, dass es jetzt so ist, dass wenn ich als Einkommen 40000 mache, wird mir das erste elif als output gegeben, wie kann ich es machen, dass es sich auf das zweite elif beziehen soll und nicht auf das erste.Das zweite Problem ist, wenn ich Alter und Einkommen außerhalb dem elif mache und eine zweite Option bei der Eingabe anbieten will, wird das Alter und Einkommen mit angezeigt, obwohl es nicht zur zweiten Auswahlmöglichkeit gehört, sondern nur zur ersten.
Hier nochmal der Code:
print("Hallo Kunde")
eingabe=(str(input("Womit können wir sie Unterstützen? 1. Kreditberatung\n 2.Schulden")))
Alter=(int(input("Wie alt sind Sie?")))
Einkommen=(int(input("Was ist Ihr Einkommen?")))
#if eingabe=="1":
if Alter < 20 and Einkommen < 20000:
print("Wir können Ihnen leider keinen Kredit geben")
elif Alter > 22 and Einkommen>20000:
print("Wir bieten Ihnen ein Kredit in Höhe von 10000 Euro")
elif Alter > 25 and Einkommen > 30000:
print("Wir bieten Ihnen einen Kredit in Höhe von 30000 Euro")
Einkommen=10000
Jahre=4
Zinssatz=0.03
if eingabe=="2":
print("Schulden nach vier Jahren werden berechnet")
neue_Schulden=Einkommen*Zinssatz**Jahre
print("Ihre Schulden betragen nach vier Jahren", neue_Schulden)
- Vertausche die Reihenfolge der Abfragen.
- Unterteile in Code-Blöcke:
if eingabe == "1":
# definiere Alter, Einkommen ...
# berechne Ausgabe ...
elif eingabe == "2":
# definiere Einkommen, Jahre, Zinssatz ...
# berechne Schulden, etc. ...
@regex9 Ich wieß nicht, ob ich das richtig umgesetzt habe, das ist halt immer noch so, wie es davor war.
Hier der Code: