Meine Liste Funktioniert nicht

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
Rayano
User
Beiträge: 22
Registriert: Freitag 7. Juli 2023, 09:21

Hallo ich bin neu,

ich versuche gerade Pyton zu lernen, da ich eine Umschlung anstrebe und im Rahmen einer Reha Maßnahme pyton ein thema wurde.

Hier erstmal der Code:

anfangskapital = float(input("Wie hoch ist dein Startkapital? "))
zinsen = float(input("Wie hoch sind die Jährlichen Zinsen? "))
laufzeit = int(input("Wie lang ist die Laufzeit in Monaten? "))
einzahlung = float(input("Wie hoch ist der Betrag der jeden Monat zurück gelegt wird? "))
Zwischenergebnis = 0
schleife = 1
sparsumme = float(input("Wieviel soll gespart werden? "))
liste =[]
while laufzeit == 0:
zwischenergebnis = (anfangskapital * zinsen / 100 / laufzeit + anfangskapital)
laufzeit = -1
liste.append(zwischenergebnis)

ich bin auf folgendes Problem gestossen: Mein Ziel mit dem Programm ist einen kleinen einfachen anlage rechner zu erstellen. Das zwischenergebnis soll jeweil in die liste gespeichert aber leider bleibt die liste leer.ich habe bereichts im Internet gesucht aber bin zu keiner Lösung gekommen die mir an dieser stelle hilft.

Mein Ziel ist es nicht eine fertige Lösung zu bekommen sondern den Anstoß was ich falsch gemacht habe.
Sirius3
User
Beiträge: 17759
Registriert: Sonntag 21. Oktober 2012, 17:20

Variablen werden komplett klein geschrieben, `Zwischenergebnis` ist falsch geschrieben.
Schau mal, unter welchen Bedingungen die while-Schleife betreten wird? Und welchen Wert dann `laufzeit` annimmt, wie oft wird also die Schleife maximal durchlaufen?
Benutzeravatar
Patsche
User
Beiträge: 43
Registriert: Samstag 23. Oktober 2021, 00:17

Code: Alles auswählen

#Moin @Rayano
print("Hallo Rayano")
print("Bitte benutze die Code-Tags </>")
:D Macht den Code aufjedenfall für Forenuser leserlicher.

Bild

Hast du den Code auch eingerückt? Ist wichtig bei Python.
Rayano
User
Beiträge: 22
Registriert: Freitag 7. Juli 2023, 09:21

ok das mit dem code einrücken kannte ich noch nicht, werde ich aber in zukunft machen.

ich habe den code etwas angepasst. er funktioniert jetzt auch so wie er soll.

Code: Alles auswählen

anfangskapital = float(input("Wie hoch ist dein Startkapital? "))
zinsen = float(input("Wie hoch sind die jährlichen Zinsen in Prozent? "))
gesamtlaufzeit = int(input("Wie lang ist die Gesamtlaufzeit in Monaten? "))
einzahlung = float(input("Wie hoch ist der Betrag, der jeden Monat zurückgelegt wird? "))

gesamtkapital = anfangskapital
monat = 1

print("Monat\tAnfangsbestand\tZinsbetrag\tEndbestand")

while monat <= gesamtlaufzeit:
    zinsbetrag = gesamtkapital * (zinsen / 100 / 12)
    gesamtkapital += zinsbetrag + einzahlung

    print(f"{monat}\t{anfangskapital:.2f} €\t{zinsbetrag:.2f} €\t{gesamtkapital:.2f} €")
    
    monat += 1
    anfangskapital = gesamtkapital

es ist mein erstes projekt. vorher habe ich bisher nur einige viedeo gesehen und rum probiert ohne ein ziel zu verfolgen. Dies war mein erstes Projekt das ein Ziel hatte: einen ansparplan zu erstellen. Der als tabelle ausgegeben wird. nun muss ich das noch einrücken damit es in der Konsole auch wie eine Tabelle aussieht. Aber ich vermute mal das es nicht funktionieren wird ohne. z.b. HTML zu nutzen und ein Interface zu bauen.
Danke für die Hilfe.
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

Für die Konsole brauchst Du kein HTML. Die

Code: Alles auswählen

print()
Funktion reicht völlig.
Benutzeravatar
Patsche
User
Beiträge: 43
Registriert: Samstag 23. Oktober 2021, 00:17

Rayano hat geschrieben: Donnerstag 13. Juli 2023, 19:45 ....Projekt das ein Ziel hatte: einen ansparplan zu erstellen. Der als tabelle ausgegeben wird. nun muss ich das noch einrücken damit es in der Konsole auch wie eine Tabelle aussieht.
Doch das geht mit dem print-Befehl.
Leerzeichen können ja auch ausgegeben werden. Kannst ja etwas kreativ werden mit Sternchen und Strichen oder so.

Hier mal 2 Beispiele, wie ich das mache ohne GUI nur in der Konsole.....

Code: Alles auswählen

print("*******************************************************************")
print("******************   Bobs Schrauben Discount     ******************")
print("******************          Version 1.0          ******************")
print("*******************************************************************")

Code: Alles auswählen

print("-----------------------")
print("|        Preise       |")
print("|                     |")
print("| Schrauben:  5Cent   |")
print("| Muttern:    3Cent   |")
print("| U-Scheiben: 1Cent   |")
print("|                     |")
print("-----------------------")
Benutzeravatar
__blackjack__
User
Beiträge: 13122
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Rayano: Tabellen und auch andere formatierte (und bunte) Konsolenausgaben kann man beispielsweise mit dem `rich`-Modul machen. HTML lässt sich aber auch einfach erzeugen und dann im Browser anschauen. In dem Zusammenhang kann das `markupsafe`-Modul interessant sein, wenn man sich das nicht selbst implementieren will. Oder man nimmt gleich Jinja2 oder eine andere Templating-Bibliothek.

Die ``while``-Schleife in dem Quelltext sollte übrigens eine ``for``-Schleife sein. ``while`` ist für Fälle wo man nicht schon vorher weiss wie oft die Schleife durchlaufen werden wird, sondern eine dynamischere Abbruchbedingung hat. Beispielsweise wenn man so lange ansparen will, bis ein bestimmter Zielbetrag erreicht/überschritten ist.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Benutzeravatar
__blackjack__
User
Beiträge: 13122
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Rayano: Die Zuweisung an `gesamtkapital` vor der Schleife kann man sich sparen wenn man in der Schleife `anfangskapital` verwendet und `gesamtkapital` aus den Werten aus dem aktuellen Schleifendurchlauf berechnet.

`zinsen` müsste eigentlich `zinssatz` heissen. Dann muss man die eigentlichen Zinzen aucht nicht `zinsbetrag` nennen.

Statt Tabulatoren zwischen die Spalten zu setzen, könnte man auch die Breite der einzelnen Spalten beim einsetzen der Platzhalter angeben.

Code: Alles auswählen

#!/usr/bin/env python3


def main():
    anfangskapital = float(input("Wie hoch ist dein Startkapital? "))
    zinssatz = (
        float(input("Wie hoch sind die jährlichen Zinsen in Prozent? ")) / 100
    )
    gesamtlaufzeit = int(input("Wie lang ist die Gesamtlaufzeit in Monaten? "))
    einzahlung = float(
        input("Wie hoch ist der Betrag, der jeden Monat zurückgelegt wird? ")
    )
    print("Monat  Anfangsbestand  Zinsbetrag  Endbestand")
    for monat in range(1, gesamtlaufzeit + 1):
        zinsen = anfangskapital * (zinssatz / 12)
        gesamtkapital = anfangskapital + zinsen + einzahlung
        print(
            f"{monat:>5}"
            f"  {anfangskapital:>12.2f} €"
            f"  {zinsen:>8.2f} €"
            f"  {gesamtkapital:>8.2f} €"
        )
        anfangskapital = gesamtkapital


if __name__ == "__main__":
    main()

Oder mit `rich`:

Code: Alles auswählen

#!/usr/bin/env python3
rich import print
from rich.table import Table


def main():
    anfangskapital = float(input("Wie hoch ist dein Startkapital? "))
    zinssatz = (
        float(input("Wie hoch sind die jährlichen Zinsen in Prozent? ")) / 100
    )
    gesamtlaufzeit = int(input("Wie lang ist die Gesamtlaufzeit in Monaten? "))
    einzahlung = float(
        input("Wie hoch ist der Betrag, der jeden Monat zurückgelegt wird? ")
    )
    table = Table("Monat", "Anfangsbestand", "Zinsbetrag", "Endbestand")
    for monat in range(1, gesamtlaufzeit + 1):
        zinsen = anfangskapital * (zinssatz / 12)
        gesamtkapital = anfangskapital + zinsen + einzahlung
        table.add_row(
            str(monat),
            f"{anfangskapital:.2f} €",
            f"{zinsen:.2f} €",
            f"{gesamtkapital:.2f} €",
        )
        anfangskapital = gesamtkapital

    print(table)


if __name__ == "__main__":
    main()
Testlauf:

Code: Alles auswählen

Wie hoch ist dein Startkapital? 12345
Wie hoch sind die jährlichen Zinsen in Prozent? 2.3
Wie lang ist die Gesamtlaufzeit in Monaten? 12
Wie hoch ist der Betrag, der jeden Monat zurückgelegt wird? 5
┏━━━━━━━┳━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Monat ┃ Anfangsbestand ┃ Zinsbetrag ┃ Endbestand ┃
┡━━━━━━━╇━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ 1     │ 12345.00 €     │ 23.66 €    │ 12373.66 € │
│ 2     │ 12373.66 €     │ 23.72 €    │ 12402.38 € │
│ 3     │ 12402.38 €     │ 23.77 €    │ 12431.15 € │
│ 4     │ 12431.15 €     │ 23.83 €    │ 12459.98 € │
│ 5     │ 12459.98 €     │ 23.88 €    │ 12488.86 € │
│ 6     │ 12488.86 €     │ 23.94 €    │ 12517.79 € │
│ 7     │ 12517.79 €     │ 23.99 €    │ 12546.79 € │
│ 8     │ 12546.79 €     │ 24.05 €    │ 12575.83 € │
│ 9     │ 12575.83 €     │ 24.10 €    │ 12604.94 € │
│ 10    │ 12604.94 €     │ 24.16 €    │ 12634.10 € │
│ 11    │ 12634.10 €     │ 24.22 €    │ 12663.31 € │
│ 12    │ 12663.31 €     │ 24.27 €    │ 12692.58 € │
└───────┴────────────────┴────────────┴────────────┘
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten