Seite 1 von 1

Funktionsparameter macht bei raw_input() Probleme

Verfasst: Samstag 25. Mai 2013, 07:59
von Raiden
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

Re: Funktionsparameter macht bei raw_input() Probleme

Verfasst: Samstag 25. Mai 2013, 08:16
von snafu
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.

Re: Funktionsparameter macht bei raw_input() Probleme

Verfasst: Samstag 25. Mai 2013, 08:39
von Raiden
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'

Re: Funktionsparameter macht bei raw_input() Probleme

Verfasst: Samstag 25. Mai 2013, 13:32
von derdon
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).