QUARTER = 0.25 DIME = 0.10 NICKEL = 0.05 PENNY = 0.01 def num_coins(total, coin): if total < coin: return 0 remainder = round(total % coin, 2) return round((total - remainder) / coin) def reduce(total, coin, number_of_coins): return round(total - (number_of_coins * coin), 2) def calculate(total, coins = [QUARTER, DIME, NICKEL, PENNY]): result = [] for coin in coins: count = num_coins(total, coin) total = reduce(total, coin, count) result.append(count) return result def receipt(total): coins = calculate(total) return f"quarters:{coins[0]}; dimes:{coins[1]}; nickels:{coins[2]}; pennies:{coins[3]}" assert [76, 1, 1, 0] == calculate(19.15) assert [0, 0, 0, 0] == calculate(0.00) assert [0, 0, 0, 1] == calculate(0.01) assert [0, 0, 1, 0] == calculate(0.05) assert [0, 0, 1, 1] == calculate(0.06) assert [0, 1, 0, 0] == calculate(0.10) assert [0, 1, 0, 1] == calculate(0.11) assert [0, 1, 1, 1] == calculate(0.16) assert [1, 0, 0, 0] == calculate(0.25) assert [1, 0, 0, 1] == calculate(0.26) assert [1, 0, 1, 1] == calculate(0.31) assert [1, 1, 1, 1] == calculate(0.41) assert [3, 1, 1, 4] == calculate(0.94) assert [4, 0, 0, 1] == calculate(1.01) assert [5, 0, 1, 1] == calculate(1.31) assert "quarters:0; dimes:1; nickels:0; pennies:0" == receipt(0.10) assert "quarters:1; dimes:0; nickels:0; pennies:0" == receipt(0.25) assert "quarters:1; dimes:1; nickels:1; pennies:1" == receipt(0.41) assert "quarters:3; dimes:1; nickels:1; pennies:4" == receipt(0.94) assert "quarters:5; dimes:0; nickels:1; pennies:1" == receipt(1.31) assert "quarters:76; dimes:1; nickels:1; pennies:0" == receipt(19.15) print("All tests are passing!")