Problem: Zinsrechnung

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
cogito
gelöscht
Beiträge: 8
Registriert: Freitag 2. Januar 2009, 18:34

Nabend zusammen!

Ich sitze hier vor der Aufgabe, einen Zinsrechner zur Berechnung des einfachen Zinses mit einer Einlagezeit von einem Jahr mit Python zu realisieren.
Bisjetzt sieht mein Code so aus:

Code: Alles auswählen

ko = int(input('Kapital: ')) # Nutzer gibt Kapital an
if ko > 0:
    print('Ihr Kapital entspricht',ko,'Euro')
    zs = int(input('Zinssatz: ')) # (1) Nutzer gibt Zinssatz an
   print(ko * zs)                    #Ausgabe
else:
    print('Kapital ist invalid.')
Dabei soll das ganze nach folgendem Beispiel arbeiten:
1000 * 1,05
(=Kapital0 * 1 Jahr bei 5% Zinssatz)

Nur müsste der User ja bei (1) Kommazahlen wie 1.05 eingeben. Da macht Python aber nicht mit:

Code: Alles auswählen

Traceback (most recent call last):
  File "C:\Dokumente und Einstellungen\Workstation\Desktop\zinsen.py", line 4, in <module>
    zs = int(input('Zinssatz: '))
ValueError: invalid literal for int() with base 10: '1.05'
Egal ob ich 1,05 oder 1.05 eingebe, es erscheint immer obiger Fehler.

Wie könnte ich das lösen (Die Shell akzeptiert doch Angaben wie 1.05?)? Ich bin mittlerweile ratlos, habe alles ausprobiert, was mir möglich war.
Beste Grüße,
cogito

Cogito, ergo sum.
zero-one
User
Beiträge: 58
Registriert: Dienstag 20. Mai 2008, 20:52

hmm ich denk mal das 1.05 nicht in einen int umgewandelt werden kann .. versuchs mal mit float()

gruessle
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Ein Integer ist eine ganze Zahl, was sagt uns dass? Genau. Also float benutzen, wobei es in diesem Fall eventuell sinnvoll sein könnte sich das decimal Modul mal anzusehen, wieso siehst du wenn du dir die Doku dazu ansiehst.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Zumal ich bei solch einer Formel (die ja den Kern des Problems darstellt) immer in einer Shell arbeiten würde! Da siehst Du sofort den / die Fehler und kannst dann enstprechend frühzeitig eingreifen.
cogito
gelöscht
Beiträge: 8
Registriert: Freitag 2. Januar 2009, 18:34

Also float benutzen
Könntest du das bitte genauer erläutern? Bin anscheinend noch nicht so weit gekommen :oops:

Danke!
Beste Grüße,
cogito

Cogito, ergo sum.
lunar

cogito hat geschrieben:
Also float benutzen
Könntest du das bitte genauer erläutern? Bin anscheinend noch nicht so weit gekommen :oops:
Es gibt unterschiedliche Datentypen für Ganzzahlen und Fließkommazahlen. "int()" steht für Ganzzahlen, 1.05 ist aber keine ganze Zahl. Daher musst du "float()" für Fließkommazahlen verwenden.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

http://docs.python.org/tutorial/introdu ... calculator

Das hast Du noch nicht gesehen? Solltest Du aber ;-)
cogito
gelöscht
Beiträge: 8
Registriert: Freitag 2. Januar 2009, 18:34

Daher musst du "float()" für Fließkommazahlen verwenden.
Du meinst, dass das ganze so aussieht?

Code: Alles auswählen

ko = float(input('Kapital: '))
if ko > 0:
    print('Ihr Kapital entspricht',ko,'Euro')
    zs = float(input('Zinssatz: '))
    
    print(ko * zs)
else:
    print('Kapital ist invalid.')
Dann sieht die Ausgabe so aus:
Kapital: 1000
Ihr Kapital entspricht 1000.0 Euro
Zinssatz: 1.5
1500.0
Das ist doch mehr als falsch...müsste doch 1050 ergeben?!

mh. :roll:
Beste Grüße,
cogito

Cogito, ergo sum.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Code: Alles auswählen

int(input('Kapital: '))
Ist zudem eine besondere Stilblüte ;) input evaluiert schon die eingabe - darum sollte man es auch nicht benutzen - raw_input ist was du mit so einem Konstrukt behandeln willst.

Ausserdem: Inline-Kommentare sind überflüssig und erschweren nur das Lesen. Benutze aussagekräftige Variablennamen, dann fallen alle deine Kommentare weg ;)
cogito
gelöscht
Beiträge: 8
Registriert: Freitag 2. Januar 2009, 18:34

raw_input ist was du mit so einem Konstrukt behandeln willst.
Wenn ich das durch raw_input ersetze:

Code: Alles auswählen

NameError: name 'raw_input' is not defined
Welcome to Python 3.0 :lol:
Beste Grüße,
cogito

Cogito, ergo sum.
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

@cofi: cogito benutzt (wahrscheinlich) Python 3.0. print benutzt er als Funktion und nicht als Statement. In Python 3 wurde raw_input in input umbenannt und das alte input entfernt. Aber das weißt du ja :wink:

Edit: zu spät
busfahrer
User
Beiträge: 111
Registriert: Donnerstag 9. Oktober 2008, 17:42

@cogito

wenn dein Zinssatz 1.5 ist,dann stimmt das Ergebnis.

Wenn du willst das 1050 raus kommt,nimm als Zinssatz 1.05 :wink:


Gruß...busfahrer
Alles wird gut ;-)
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

cogito hat geschrieben:Das ist doch mehr als falsch...müsste doch 1050 ergeben?!
Klar, weil dein Zinssatz in Prozent ist und 1.5 eben 50% entspricht. Probiere es mit einem Tachenrechner aus. Wenn du 1.5% Zinsen haben willst musst du ja 1000 + 1000 * 0.015 rechnen, was das gleiche ist wie 1000 * 1.015. Simple Mathematik eben.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

derdon hat geschrieben:@cofi: cogito benutzt (wahrscheinlich) Python 3.0. print benutzt er als Funktion und nicht als Statement. In Python 3 wurde raw_input in input umbenannt und das alte input entfernt. Aber das weißt du ja :wink:
Stimmt .. as war ja schonmal in nem anderen Thread ;) Ich halte es aber immernoch für zu früh um Python 3 einzusetzen - leider sind schliesslich sinnvolle Änderungen geschehen ;)
Antworten