Seite 1 von 2

Wie zum Henker... (Festbetrag mit jährlicher Steigerung)

Verfasst: Samstag 29. August 2020, 23:15
von gezett
Hoi,

ich möchte gerne Folgendes berechnen:

Ich habe eine Anfangssumme von 100 EUR, die bspw. ab dem 01.01.2021 monatlich gezahlt wird. Nun gibt es einen Erhöhungssatz von 3% järlich (aus 100 EUR werden 103 EUR, aus 103 EUR werden 106,09 EUR, aus 106,09 EUR werden 109,27 EUR usw.). Nun soll es im Prinzip so aussehen, dass ich eine Ausgabe habe, die mir die jährlichen Zahlungen über x Jahre ausgibt. Wie stellt man das am schlausten an? Ich gehe davon aus, dass das machbar ist, aber da ich noch recht neu bin, hab ich gerade null Plan, wie ich das anstellen soll. Vielleicht ist es auch die Uhrzeit, die mich verzweifeln lässt.

Also die Ausgabe soll ungefähr so aussehen:

Eingegangene Zahlungen in 2021: 1236 EUR
Eingegangene Zahlungen in 2022: 1273,08 EUR
usw.

Die Jahreszahl in einer while- oder for-Schleife zu erhöhen kriege ich noch hin, aber die anfänglichen 100 EUR, aus denen nach einem Jahr 103 EUR werden und darauf das Jahr 106,09 EUR.... Da scheitere ich komplett. Lässt sich das doch nicht so einfach in einer Funktion definieren und/oder mit in die Schleife einbinden?

Für Tipps oder sogar eine Lösung wäre ich echt dankbar.

Re: Wie zum Henker... (Festbetrag mit jährlicher Steigerung)

Verfasst: Samstag 29. August 2020, 23:54
von Sirius3
Wie berechnet man 100 plus 3%? Bzw. allgemein `betrag` plus x%?

Re: Wie zum Henker... (Festbetrag mit jährlicher Steigerung)

Verfasst: Sonntag 30. August 2020, 09:42
von gezett
Ich hätte es jetzt einfach so berechnet:

res = 100 * 1.03

Re: Wie zum Henker... (Festbetrag mit jährlicher Steigerung)

Verfasst: Sonntag 30. August 2020, 09:48
von __deets__
Und wenn du statt 100 res schreibst, und das dann n mal in der for-Schleife rechnen läss - was passiert dann?

Re: Wie zum Henker... (Festbetrag mit jährlicher Steigerung)

Verfasst: Sonntag 30. August 2020, 10:25
von gezett
Oh man, so manchmal hat man mehr als nur Tomaten auf den Augen. Thx :)

Re: Wie zum Henker... (Festbetrag mit jährlicher Steigerung)

Verfasst: Sonntag 30. August 2020, 11:54
von gezett
Jetzt sieht es so aus:

Code: Alles auswählen

jahr = 2020
res = 100 * 1.03

for i in range(1,10):
    res *= 1.03
    jahr += 1
    print(f"{jahr}, eingezahlt: {res*12:.2f} Euro")
Ist es jetzt auch möglich die errechneten Werte aus der for-Schleife zu summieren? Also in Richtung

Code: Alles auswählen

print(sum(res))
oder sowas in der Art?

Re: Wie zum Henker... (Festbetrag mit jährlicher Steigerung)

Verfasst: Sonntag 30. August 2020, 12:18
von Sirius3
Wie man eine Summe bildet, zeigst Du doch schon mit `jahr`, wobei man das besser mit einer for-Schleife macht:

Code: Alles auswählen

betrag = 100 * 1.03

for jahr in range(2021, 2030):
    betrag *= 1.03
    print(f"{jahr}, eingezahlt: {betrag*12:.2f} Euro")

Re: Wie zum Henker... (Festbetrag mit jährlicher Steigerung)

Verfasst: Sonntag 30. August 2020, 13:21
von gezett
Okay, so ist es natürlich kürzer und an sich übersichtlicher geschrieben, aber es erschließt sich mir noch nicht ganz, wie ich die Beträge aus der for-Schleife zusammenaddiere, damit ich eine "summe_komplett" aus allen eingezahlten Beträgen erhalte.

Re: Wie zum Henker... (Festbetrag mit jährlicher Steigerung)

Verfasst: Sonntag 30. August 2020, 14:00
von Sirius3
Was ist der Unterschied zwischen einer Multiplikation und einer Addition? Also rein von der Programmierung her?

Re: Wie zum Henker... (Festbetrag mit jährlicher Steigerung)

Verfasst: Sonntag 30. August 2020, 14:06
von gezett
Naja, die Begriffe sagen es ja schon aus: entweder ich multipliziere bspw. zwei Zahlen oder ich addiere sie. Ich weiß nicht, wie du mir damit jetzt auf die Sprünge helfen möchtest. Sorry, logisches Denken ist manchmal echt hart. :D

Re: Wie zum Henker... (Festbetrag mit jährlicher Steigerung)

Verfasst: Sonntag 30. August 2020, 14:45
von nezzcarth
Alternativ zum gezeigten Ansatz kannst du auch die gängige Formel für Zinseszinsen verwenden und den Betrag nach einem bestimmten Zeitraum ohne Summierung direkt berechnen. Da brauchst du dann eben eine Zählschleife (/itertools.count) , um den Exponenten zu inkrementieren.

Re: Wie zum Henker... (Festbetrag mit jährlicher Steigerung)

Verfasst: Montag 31. August 2020, 08:45
von DeaD_EyE
So?

Code: Alles auswählen

def zinsen(kapital, zinsen, jahre):
    return kapital * (1 + zinsen) ** jahre - kapital

Kompliziert wird es dann, wenn sich das Kapital ändert (Ein-/Auszahlungen).

Re: Wie zum Henker... (Festbetrag mit jährlicher Steigerung)

Verfasst: Montag 31. August 2020, 10:15
von __blackjack__
@DeaD_EyE: Das Kapital ändert sich ja, es gibt gar keine Zinsen auf das Kapital — oder zumindest steht davon nichts in der Aufgabe — es geht um die monatlichen Einzahlungen die jedes Jahr um einen Prozentsatz angehoben werden.

Re: Wie zum Henker... (Festbetrag mit jährlicher Steigerung)

Verfasst: Montag 31. August 2020, 11:53
von DeaD_EyE
Vielleicht könnte numpy hier weiterhelfen: https://numpy.org/numpy-financial/latest/

Wichtig ist, dass diese Funktionen noch in numpy enthalten sind, zukünftig aber entfernt werden.
Deswegen gibt es das numpy-financial Paket.

Re: Wie zum Henker... (Festbetrag mit jährlicher Steigerung)

Verfasst: Montag 31. August 2020, 17:48
von gezett
Danke für die vielen Anregungen. Das hat mir wirklich sehr geholfen.

Ich bin dann endlich auf eine für mich akzeptable Lösung gekommen. Wenn das noch schöner geht, gerne her mit den Tips. :)

Code: Alles auswählen

betrag = 100 * 1.03 * 12
summe = 0

for jahr in range(2021, 2030):
    print(f"{jahr}, eingezahlt: {betrag:.2f} Euro")
    betrag *= 1.03
    summe += betrag
    
print(f"Gesamt: {summe:.2f} Euro")

Re: Wie zum Henker... (Festbetrag mit jährlicher Steigerung)

Verfasst: Montag 31. August 2020, 18:13
von Sirius3
Ist es Absicht, dass die Gesamtsumme von den angezeigten Einzelbeiträgen abweicht?

Re: Wie zum Henker... (Festbetrag mit jährlicher Steigerung)

Verfasst: Montag 31. August 2020, 18:52
von nezzcarth
Ich dachte an so etwas (ohne itertools) :

Code: Alles auswählen

In [1]: base = 100 * 12
   ...: rate = 3/100
   ...: start, end = 2021, 2030
   ...: values = [base*(1+rate)**i for i in range(1, end-start+1)]
   ...: for i, value in enumerate(values):
   ...:     print(f"{start+i}, eingezahlt: {value:.2f} Euro")
   ...: print(f"Gesamt: {sum(values):.2f} Euro")
2021, eingezahlt: 1236.00 Euro
2022, eingezahlt: 1273.08 Euro
2023, eingezahlt: 1311.27 Euro
2024, eingezahlt: 1350.61 Euro
2025, eingezahlt: 1391.13 Euro
2026, eingezahlt: 1432.86 Euro
2027, eingezahlt: 1475.85 Euro
2028, eingezahlt: 1520.12 Euro
2029, eingezahlt: 1565.73 Euro
Gesamt: 12556.66 Euro
Der Code ist jedoch sogar eher komplexer.

Re: Wie zum Henker... (Festbetrag mit jährlicher Steigerung)

Verfasst: Montag 31. August 2020, 19:19
von gezett
@Sirius3
ist das so?
Krass, 376.70 Differenz. Wie kommt das zustande?

@nezzcarth
Wäre ich mit meinem Kenntnisstand nicht drauf gekommen, aber es sieht verständlich aus.

Re: Wie zum Henker... (Festbetrag mit jährlicher Steigerung)

Verfasst: Montag 31. August 2020, 20:00
von gezett
So ist es dann wohl richtig:

Code: Alles auswählen

betrag = 100 * 1.03 * 12
summe = 0

for jahr in range(2021, 2030):
    betrag *= 1.03
    summe += betrag
    print(f"{jahr}, eingezahlt: {betrag:.2f} Euro")
    
print(f"Gesamt: {summe:.2f} Euro")

Re: Wie zum Henker... (Festbetrag mit jährlicher Steigerung)

Verfasst: Montag 31. August 2020, 20:08
von Sirius3
Ob das richtig ist, mußt Du ja selbst wissen, wie Deine Aufgabe ist. Ich würde sagen, so ganz richtig ist das auch nicht.