Variable wird nicht erkannt(Python)?

2 Antworten

Von Experte ralphdieter bestätigt

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.

Woher ich das weiß:Studium / Ausbildung – Abgeschlossenes Studium der Informatik (B.Sc.)

PandaBear02 
Fragesteller
 14.11.2022, 04:30

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)
0
regex9  14.11.2022, 08:48
@PandaBear02
  1. Vertausche die Reihenfolge der Abfragen.
  2. Unterteile in Code-Blöcke:
if eingabe == "1":
  # definiere Alter, Einkommen ...
  # berechne Ausgabe ...
elif eingabe == "2":
  # definiere Einkommen, Jahre, Zinssatz ...
  # berechne Schulden, etc. ... 
1
PandaBear02 
Fragesteller
 14.11.2022, 11:41

@regex9 Ich wieß nicht, ob ich das richtig umgesetzt habe, das ist halt immer noch so, wie es davor war.

Hier der Code:

Einkommen=10000
Jahre=4
Zinssatz=0.015
print("Hallo Kunde")
eingabe=(str(input("Womit können wir sie Unterstützen?\n 1. Kreditberatung\n 2.Schulden")))
  
if eingabe=="1":  
    Alter=(int(input("Wie alt sind Sie?")))
    Einkommen=(int(input("Was ist Ihr Einkommen?")))


elif eingabe=="2":
    print("Schulden nach vier Jahren werden berechnet")
    neue_Schulden=Einkommen*Zinssatz**Jahre
    print("Ihre Schulden betragen nach vier Jahren", neue_Schulden)

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")
0
xxxcyberxxx  14.11.2022, 12:10
@PandaBear02
@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
1
regex9  14.11.2022, 12:12
@PandaBear02

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.

0