Seite 2 von 2
Re: Kleines Problem
Verfasst: Freitag 31. Oktober 2014, 13:19
von Py19917062
@/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.
Re: Kleines Problem
Verfasst: Freitag 31. Oktober 2014, 13:29
von 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.
Re: Kleines Problem
Verfasst: Freitag 31. Oktober 2014, 14:29
von Py19917062
Für Kompatibilität mit Python 3 sollte man das Programm nicht für Python 2 kaputt machen.
Stimmt.

Kann man ja immer hin anpassen.
Aber kann explizit in diesem Programm etwas anderes als ein
ValueError auftretten?
Re: Kleines Problem
Verfasst: Freitag 31. Oktober 2014, 14:37
von cofi
@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.
Re: Kleines Problem
Verfasst: Freitag 31. Oktober 2014, 15:00
von 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.
Re: Kleines Problem
Verfasst: Samstag 1. November 2014, 10:09
von HarteWare
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
Re: Kleines Problem
Verfasst: Samstag 1. November 2014, 10:33
von cofi
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.
Re: Kleines Problem
Verfasst: Samstag 1. November 2014, 11:54
von HarteWare
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