Python Geld-Problem?
Ich will ein Programm schreiben in dem jemand einen Geldbetrag(float) eingeben kann und ich ihm ausgebe wie viele 500€ Scheine, 200, 100, usw. bis zu 1 Cent er braucht um seine eingegebene Zahl wiederzugeben. z.B.: 800,01€ = 1 * 500€, 1* 200€ 1*100€ und 1*1 Cent. Kann mir bitte jemand helfen wie ich dieses Programm schreiben soll?(In der Angabe steht das es ohne Schleifen und ohne Verzweigungen möglich ist und es sollte möglichst simpel sein, falls das nicht geht bitte trotzdem schreiben) Danke schon mal im Vorraus
2 Antworten
Für den Zweck ist die BuiltIn-Funktion divmod(x,y) geradezu wie geschaffen.
Diese führt eine Ganzzahldivision mit Rest durch und gibt den Quotienten und den Rest zurück.
Beispiel:
>>> betrag = 800.01
>>> anzahl500, betrag = divmod(betrag, 500)
>>> anzahl200, betrag = divmod(betrag, 200)
>>> print(anzahl500, anzahl200)
1.0 1.0
Jein. Das liegt daran, dass der Datentyp float keine unbegrenzte Genauigkeit hat.
Immerhin lässt sich das Problem in diesem Fall so beheben:
anzahl500, betrag = divmod(betrag, 500)
betrag = round(betrag, 2)
anzahl200, betrag = divmod(betrag, 200)
betrag = round(betrag, 2)
#...
Also nach jeder Division den verbleibenden Betrag auf 2 Nachkommastellen runden.
Eine Kleinigkeit vielleicht noch:
Um ohne das ganze Runden auszukommen rechne einfach in Centbeträgen.
Also z.B. so:
betrag=int(845.77*100) #Keine Nachkommastellen, keine Probleme. ^^
anzahl500, betrag = divmod(betrag, 50000) #50000¢=500€
anzahl200, betrag = divmod(betrag, 20000) #20000¢=200€
#usw...
845.77 könnte intern als 845.76999... gespeichert werden. Schreib also besser
betrag=round(845.77*100)
Stimmt auch wieder. Aber dann, um ganz sicherzugehen, dass sich nicht irgendwo doch noch etwas unganzzahliges versteckt:
betrag=int(round(845.77*100))
Danke, deine Antwort hat mir wirklich geholfen das Problem zu lösen.😁
Tipp:
nennen wir den eingegebenen Betrag x.
die Vorkommastelle von x/500 gibt an, wieviele 500er man benötigt
Hilft das?
Ich habe noch eine Frage: Ich habe das Programm jetzt bis zu den Centbeträgen so weitergeführt, doch bei 845,77 € gibt er mir 845,76€ aus. Liegt das an meinem Programm?