Seite 1 von 1

[Anfänger] Zinseszins --> Verständnisfrage

Verfasst: Dienstag 3. März 2020, 16:11
von Jonsered
Hallo Community.

Bin ganz neu im Bereich der Programmierung und macht mir Spaß, auch wenn ich manchmal an kleinen Dingen noch recht ange sitze. Aber dafür lernt an ja

Ich habe ein kleines Lernprojekt für mich erstellt und es funktioniert auch, jedoch haben sich hier zwei Fragen aufgetan...

Code: Alles auswählen

print("Mein erster, einfacher Zinseszinsrechner")
print()
print("Wieviel Geld möchtest du investieren?")
einzahlen = float(input())
print()
print("Wie hoch sind die Zinsen?")
zinsen = float(input())
# jaehrlich = einzahlen / 100 * zinsen + einzahlen | wollte es zum Testen direkt in print ausrechnen lassen
print()
print("Bei einer jährlichen Verzinsung beträgt das Endergebnis: €" ,einzahlen / 100 * zinsen + einzahlen)
print("damit wurden in einem Jahr €",einzahlen/100*zinsen, "Zinsen generiert")
print()
monatlich = float((einzahlen * zinsen) / ( 100*12 ))
print(monatlich) #funktioniert
monatjahr = float(einzahlen * ((zinsen / 12 / 100) +1)**(1*12))
# Kn = K0 * ((p/m / 100) + 1)^n*m ( https://www.zinsen-berechnen.de/zinsformeln/unterjaehriger-zinseszins.php )
print("Bei einer monatlichen Verzinsung beträgt das Endergebnis nach einem Jahr: €", monatjahr)
print("damit wurden in einem Jahr €",monatjahr - einzahlen, "Zinsen generiert")
#print("Bei einer monatlichen Verzinsung beträgt das Endergebnis nach einem Jahr: €", (einzahlen * ((zinsen / 12 / 100) +1)**(1*12)) --> funktioniert nicht (?) 
#Unterschied zu https://www.finanzfluss.de/zinseszinsrechner/ recht groß...
Die Kommentare im Code, wo ich noch nicht ganz schlau werde...

Zeile 19: Ich verstehe nicht, warum ich das ganze nicht direkt ausrechnen lassen kann in der Ausgabe. Bei der jährlichen hat es doch auch geklappt?
Sollte man generell nicht in der Ausgabe rechnen? Stichwort Sauberkeit des Codes & Lesbarkeit?

Wenn ich mein Ergebnis mit dem Rechner von Finanzfluss vergleiche, ist der Unterschied doch größer als erwartet... Wie seht ihr das? Habe ich einen (groben) Fehler gemacht?

PS: Nicht wundern über dieses "Projekt" und die Kommentare, dient rein für Lernzwecke für mich.

Re: [Anfänger] Zinseszins --> Verständnisfrage

Verfasst: Dienstag 3. März 2020, 18:13
von RLeoP
Probier mal

Code: Alles auswählen

print("Bei einer monatlichen Verzinsung beträgt das Endergebnis nach einem Jahr: €", (einzahlen * ((zinsen / 12 / 100) +1)**(1*12)))
dann müsste es funktionieren. Du hast nur eine Klammer vergessen.

Re: [Anfänger] Zinseszins --> Verständnisfrage

Verfasst: Mittwoch 4. März 2020, 09:38
von kbr
In der "Ausgabe" zu rechnen ist bei so kleinen Programmen noch ok. Schöner aber ist es, für Berechnungen Funktionen zu nutzen. Bei größeren Programmen ist das sogar unabdingbar, z.B.:

Code: Alles auswählen

def calculate(k, p, n):
    return k * (1 + p) ** n

Der Zinssatz p muss dabei der Zinsperiode n entsprechen, sonst erhältst Du falsche Ergebnisse.

Re: [Anfänger] Zinseszins --> Verständnisfrage

Verfasst: Mittwoch 4. März 2020, 12:20
von Jonsered
RLeoP hat geschrieben: Dienstag 3. März 2020, 18:13 Probier mal

Code: Alles auswählen

print("Bei einer monatlichen Verzinsung beträgt das Endergebnis nach einem Jahr: €", (einzahlen * ((zinsen / 12 / 100) +1)**(1*12)))
dann müsste es funktionieren. Du hast nur eine Klammer vergessen.
Oh mann, Danke...
Sehr peinlich, habe echt lange gesucht und hatte auch die Klammern in Verdacht, aber an die print Klammer habe ich nicht gedacht... Eventuell sollte ich nicht mehr in der Python IDLE schreiben - in einem "anständigen" Editor würde sowas sicherlich markiert werden...
kbr hat geschrieben: Mittwoch 4. März 2020, 09:38 In der "Ausgabe" zu rechnen ist bei so kleinen Programmen noch ok. Schöner aber ist es, für Berechnungen Funktionen zu nutzen. Bei größeren Programmen ist das sogar unabdingbar, z.B.:

Code: Alles auswählen

def calculate(k, p, n):
    return k * (1 + p) ** n

Der Zinssatz p muss dabei der Zinsperiode n entsprechen, sonst erhältst Du falsche Ergebnisse.
Danke, kopiere ich mal rein. Bei Funktionen bin ich noch nicht angekommen, aber super, wenn man da dann schon etwas verständliches aus einem "alten" Code hat.

Ich danke euch

Re: [Anfänger] Zinseszins --> Verständnisfrage

Verfasst: Mittwoch 4. März 2020, 14:11
von Sirius3
Nein, man sollte nicht generell in der Ausgabe rechnen, sondern nur triviale Rechnungen machen.
float-Zahlen nochmal mit float zu konvertieren ist überflüssig. Zwischenergebnisse machen die Formeln lesbarer. Auch sprechendere Namen:

Code: Alles auswählen

zinsen_pro_monat = zinsen / 100 / 12
zinsen_monatlich = einzahlen * zinsen_pro_monat
gesamtbetrag_jahr = einzahlen * (zinsen_pro_monat + 1)**12
Zur Ausgabe benutzt man format-Strings:

Code: Alles auswählen

print(f"Bei einer monatlichen Verzinsung beträgt das Endergebnis nach einem Jahr: €{gesamtbetrag_jahr:.2f}")
print(f"damit wurden in einem Jahr €{gesamtbetrag_jahr - einzahlen:.2f} Zinsen generiert")

Re: [Anfänger] Zinseszins --> Verständnisfrage

Verfasst: Mittwoch 4. März 2020, 14:57
von Jonsered
Ich danke dir.

Generell würde ich eh nicht in der Ausgabe rechnen, dieser Weg diente mir mehr zum Verständnis und ob es überhaupt geht. Persönlich finde ich es, so wie du es machst, auch viel besser, sauberer und vor allem strukturierter.
Das mit den float Zahlen schaue ich mir nochmal an und werde da an vielen Stellen nochmals rumprobieren. Danke für den Hinweis! Auch für die Printausgabe, die Kommastellen haben mich bereits genervt ;-) und hatte die Hoffnung, dass diese noch kommen werden :-)