@Loppox: Namen werden in Python klein_mit_unterstrichen geschrieben. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (MixedCase). `Berechnen()` sollte also klein geschrieben werden, da es keine Klasse sondern eine Funktion ist.
Klassen (und Methoden) sollten alles was sie ausser Konstanten benötigen als Argument(e) übergeben bekommen. `Berechnen()` fehlt also `einwurf`, `parkzeit_aus`, und `fehler` als Argumente.
Dass das bisher ohne die Übergabe funktioniert, bedeutet das Du das als Variablen auf Modulebene definiert haben musst. Da gehören aber keine Variablen hin, sondern nur Code der Konstanten, Funktionen, und Klassen definiert.
Ein Name sollte nicht direkt hintereinander an so verschiedene Datentypen wie Zeichenketten und Gleitkommazahlen gebunden werden. Man muss auch nicht jeden Zwischenschritt an einen Namen binden wenn man das Zwischenergebnis nicht mehrmals braucht.
`stunden` an eine 0 zu binden und die im nächsten Schritt dann noch mal in eine ganze Zahl zu wandeln ist sinnlos.
Um die Bedingung bei ``while`` gehören keine Klammern. Und das ``if`` mit dem ``break`` gehört eigentlich mit in die ``while``-Bedingung.
Magische Zahlen sollten als Konstanten definiert werden. Dann weiss der Leser zum einen was der Wert bedeutet, und man kann den Wert einfach und weniger fehleranfällig ändern, weil man das nur noch an *einer* Stelle machen muss.
Gleitkommazahlen sind tückisch, das funktioniert nicht so wie Du Dir das vorstellst, weil 0,4 nicht präzise als Gleitkommazahl darstellbar ist:
Code: Alles auswählen
In [1]: geld = 1.2 # 3 * 0.4
In [2]: stunden = 0
In [3]: while geld > 0.4:
...: stunden += 1
...: geld -= 0.4
...:
In [4]: geld
Out[4]: 0.3999999999999999
In [5]: stunden
Out[5]: 2
In [6]: 1.2 / 3
Out[6]: 0.39999999999999997
Strategien dazu: Mit Centbeträgen und ganzen Zahlen arbeiten, oder das `decimal`-Modul verwenden. Wobei Stunden rauf- und Geld runterzählen ein bisschen umständlich ist wenn man Division und Modulo als Rechenoperationen hat.