Als Erstes solltest du bei Finanzmathematischen Programmen immer in Cent oder zehntel Cent rechen, dann ersparst du dir den ärger mit den Rundungsproblemen bei Float und du kannst nur Integer Arbeiten.
Wenn du in Cents statt Euro rechnest, dann kann divmod dein Freund sein, da divmod dir, den Quotienten und den Rest einer Integer-Division zurückgibt, kannst du relativ einfach die minimale Anzahl an Münzen ermitteln.
Indem du die Nennwerte der Münzen (in Cent), von Groß nach Klein durch den gesuchten Betrag teilst. Der Quotient den aktuellen Nennwert der Münze ist die Anzahl der Münzen, des aktuellen Werts welche du zurückgeben willst, der Rest ist der neue gesuchte Betrag. Wen der gesuchte Betrag Null ist, bist du fertig und hast die beste Kombination für die minimal Anzahl von Münzen gefunden.
Ich weiß, meine Beschreibung klingt etwas kompliziert, aber der Code ist relativ einfach ungefähr so:
Code: Alles auswählen
def change_coins(amount_in_cents: int):
# Note the order: the coins must be sorted from large to small,
# otherwise the algorithm will not work.
for coin in [200, 100, 50, 20, 10, 5, 2, 1]:
unit = "Cents"
no_of_coins, amount_in_cents = divmod(amount_in_cents, coin)
if no_of_coins > 0:
if coin >= 100:
# Convert to Euros
coin = coin // 100
unit = "Euros"
print(f"{no_of_coins:02d} coins of {coin:2d} {unit}")
if amount_in_cents == 0:
# desired amount has been reached
break
def main():
while True:
try:
amount_in_euros = float(
input("please state the desired amount in euros: "))
amount_in_cents = int(amount_in_euros * 100)
break
except ValueError:
pass
change_coins(amount_in_cents)
if __name__ == "__main__":
main()