Funktionsparameter macht bei raw_input() Probleme

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
Raiden
User
Beiträge: 2
Registriert: Samstag 25. Mai 2013, 07:46

Guten Tag!
Ich habe ein sehr einfaches Programm geschrieben, bei dem ich einfach meine
monatlichen Einnahmen eingebe und dann soll mir dieses Programm berechnen,
wieviel Geld ich nach den Abzügen noch übrig habe.
Leider gibt Python immer eine Fehlermeldung wieder. Wenn ich die Funktion

Code: Alles auswählen

abzugsberechnung()
aufrufe, funktioniert das nur, wenn ich als einen Parameter einen festen Zahlenwert
eingebe, die Variable, in die über raw_input die Eingabe gespeichert werden sollte,
löst die Fehlermeldung aus.

Code: Alles auswählen

einnahme=raw_input("Wie viel hast du verdient? ")  

monatsmiete=260
Strom_Internet_Essen=150
Tilgung=50


def abzugsberechnung(x):
    uebrig=x-monatsmiete-Strom_Internet_Essen-Tilgung
    print str(uebrig)
    
abzugsberechnung(einnahme)
    
Ich würde mich sehr freuen, wenn ihr mir helfen könnt.
Mit freundlichen Grüßen,
Raiden
Benutzeravatar
snafu
User
Beiträge: 6908
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Probier mal:

Code: Alles auswählen

abzugsberechnung(int(einnahme))
bzw

Code: Alles auswählen

einnahme = int(raw_input("Wie viel hast du verdient? "))

Wenn du sagen würdest, *welche* Fehlermeldung kommt (z.B. durch Kopieren der Fehlerausgabe in deinen Beitrag), dann müsste man übrigens weniger raten.
Raiden
User
Beiträge: 2
Registriert: Samstag 25. Mai 2013, 07:46

Ah, jetzt funktioniert es,ich danke dir.

Die Fehlermeldung lautete:

Code: Alles auswählen

Traceback (most recent call last):
  File "<stdin>", line 12, in <module>
  File "<stdin>", line 9, in abzugsberechnung
TypeError: unsupported operand type(s) for -: 'str' and 'int'
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

raw_input gibt einen String zurück. Also ist einnahme ein String und damit kein int oder ein anderer Zahlentyp. In der Funktion abzugsberechnung versuchst du, auf x (was in deinem Aufruf einnahme entspricht) den Operator - anzuwenden. Weil dieser für Strings nicht definiert ist, gibt es die besagte Fehlermeldung. Wie man das Problem lösen kann, hat snafu ja bereits beschrieben. Ich empfehle, zusätzlich Ausnahmebehandlung einzubauen, um hilfreiche Fehlermeldungen zu liefern bei Eingabe von beliebigen Strings statt Zahlen oder dem Senden des Signals SIGINTERRUPT durch Drücken von Strg-C (oder Strg-Z auf Windows).
Antworten