Seite 1 von 1
Problem: Zinsrechnung
Verfasst: Dienstag 6. Januar 2009, 18:27
von cogito
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.
Verfasst: Dienstag 6. Januar 2009, 18:35
von zero-one
hmm ich denk mal das 1.05 nicht in einen int umgewandelt werden kann .. versuchs mal mit float()
gruessle
Verfasst: Dienstag 6. Januar 2009, 18:36
von DasIch
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.
Verfasst: Dienstag 6. Januar 2009, 18:47
von Hyperion
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.
Verfasst: Dienstag 6. Januar 2009, 18:48
von cogito
Also float benutzen
Könntest du das bitte genauer erläutern? Bin anscheinend noch nicht so weit gekommen
Danke!
Verfasst: Dienstag 6. Januar 2009, 18:55
von lunar
cogito hat geschrieben:Also float benutzen
Könntest du das bitte genauer erläutern? Bin anscheinend noch nicht so weit gekommen
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.
Verfasst: Dienstag 6. Januar 2009, 18:56
von Hyperion
Verfasst: Dienstag 6. Januar 2009, 19:01
von cogito
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.

Verfasst: Dienstag 6. Januar 2009, 19:02
von cofi
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

Verfasst: Dienstag 6. Januar 2009, 19:04
von cogito
raw_input ist was du mit so einem Konstrukt behandeln willst.
Wenn ich das durch raw_input ersetze:
Welcome to Python 3.0

Verfasst: Dienstag 6. Januar 2009, 19:05
von derdon
@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
Edit: zu spät
Verfasst: Dienstag 6. Januar 2009, 19:08
von busfahrer
@cogito
wenn dein Zinssatz 1.5 ist,dann stimmt das Ergebnis.
Wenn du willst das 1050 raus kommt,nimm als Zinssatz 1.05
Gruß...busfahrer
Verfasst: Dienstag 6. Januar 2009, 19:12
von Leonidas
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.
Verfasst: Dienstag 6. Januar 2009, 19:14
von cofi
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

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
