Kleines Problem

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.
Py19917062
User
Beiträge: 113
Registriert: Freitag 30. Januar 2009, 00:53
Wohnort: Dortmund
Kontaktdaten:

@/me
Danke für den Tipp.

@BlackJack
Ich als Anfänger finde deinen Code wesentlich kompliziert. Liegt wohl an meiner mangelnden Erfahrung mit import (bzw. mit Librarys), enumerate, takewhile und lambda.
Vielleicht sollte raw_input() weggelassen werden, um die Kompatibilität mit den neueren Pythonversionen zu gewährleiten. Da so wie so nur Zahlen erwartet werden, eignet sich in Python 2.7 auch input() zu verwenden und alles andere wird von der try Anweisung abgefangen.
BlackJack

@Py19917062: Für Kompatibilität mit Python 3 sollte man das Programm nicht für Python 2 kaputt machen. `input()` wertet in Python 2 beliebige Python-Ausdrücke aus. Sowie der Benutzer da etwas anderes als eine literale Gleitkommazahl eingibt, verhält sich das Programm nicht mehr vernünftig. Und alles andere wird auch nicht durch das ``try``/``except`` abgefangen weil da letztendlich *jede* Ausnahme auftreten kann, nicht nur ein `ValueError`. `input()` ist in Python 2 schlicht keine Option. Hat ja einen Grund warum es das in Python 3 nicht mehr gibt.
Py19917062
User
Beiträge: 113
Registriert: Freitag 30. Januar 2009, 00:53
Wohnort: Dortmund
Kontaktdaten:

Für Kompatibilität mit Python 3 sollte man das Programm nicht für Python 2 kaputt machen.
Stimmt. :lol: Kann man ja immer hin anpassen.

Aber kann explizit in diesem Programm etwas anderes als ein ValueError auftretten?
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

@Py19917062: Ob nur ein `ValueError` auftreten kann ist die falsche Frage. Die richtige Frage ist: Kann ich eine Exceptions abseits von `ValueError` sinnvoll behandeln?

`MemoryError` ist hier beispielsweise ein Fehler der dir keine Chance laesst und `KeyboardInterrupt` ist eine Exception, die der Nutzer bestimmt nicht behandelt haben will (zumindest nicht auf diesselbe Art wie einen `ValueError`), weil er schliesslich selbst Ctrl+C gedrueckt hat.
BlackJack

@Py19917062: Ich verstehe die Frage nicht, beziehungsweise deren Sinn!?

Bei Python 2 und `raw_input()` können neben dem `ValueError` zum Beispiel noch die von cofi erwähnten `MemoryError` und `KeyboardInterrupt` auftreten, *und* irgendwelche anderen an die ich jetzt gerade nicht denke — genau das ist ja der Grund warum man keine ”catch all”-Behandlung machen sollte, denn *irgendwas* hat man immer vergessen was nicht so behandelt werden sollte. Eine ”catch all”-Behandlung ist nur vertretbar wenn man die Ausnahme irgendwo protokolliert und/oder nach der Behandlung erneut auslöst, oder sich 100%ig sicher ist, dass man nach der Behandlung weiter machen darf ohne dass das Programm in einem inkonsistenten Zustand ist.
Benutzeravatar
HarteWare
User
Beiträge: 69
Registriert: Samstag 23. Februar 2013, 21:16
Wohnort: localhost

Hallo zusammen,

ich habe auch einfach mal versucht diese kleine Übung umzusetzen, da ich bin Python noch nicht sehr gut bin.

Jetzt hab ich einen Bug, den ich nicht finden kann: Mein Guthaben ist immer 0.00, egal welche Eingabe und die Schleife läuft ewig weiter.

Code: Alles auswählen

 #!/usr/bin/python
 # -*- coding: utf-8 -*-

 def main():
     guthaben = float(input("Guthaben eingeben: "))
     faktor = 0.1225 # 12.25 % <-- outsch, sollte 1.1225 sein

     if guthaben > 0:
         guthaben_neu = guthaben
         n = 0    # Durchläufe zählen
         while guthaben_neu * faktor < guthaben * 3:
             guthaben_neu *= faktor
             n += 1
             print("{0}. Durchlauf\tGuthaben: {1:.2f}".format(n, guthaben_neu))

     else:
         print("Guthaben kann nicht ausgewertet werden (nicht groesser als 0)")

 if __name__ == '__main__':
     main()
Ich hoffe jemand kann mir meinen blöden Fehler zeigen

LG
HarteWare
Zuletzt geändert von HarteWare am Samstag 1. November 2014, 11:57, insgesamt 2-mal geändert.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Dein Guthaben ist nie 0. Da deine Zinsrechnung aber falsch ist wird es in jedem Durchgang kleiner. Vergleiche deinen Zins mal mit dem aus anderen Beitraegen.
Benutzeravatar
HarteWare
User
Beiträge: 69
Registriert: Samstag 23. Februar 2013, 21:16
Wohnort: localhost

Hallo,

vielen Dank, ich muss garnichts vergleichen, mir ist mein Fehler sofort klar geworden, als du sagtest "wird immer kleiner".

Ziemlich blöd... hah. Danke

LG
Antworten