I am trying to write a greedy algorithm in python 3
.
The premise is to take change, owed by user, as input and them give them as few coins as possible.
Available coins are: Quarters (0.25); Dimes(0.1); Nickels (0.05); and Pennies (0.01).
My code currently ends up in an infinite loop and i don't know what i am doing wrong.
Can anyone see where i am going wrong with the following code?
Code:
validacion = False
pennies = 0.01
nickels = 0.05
dimes = 0.1
quarters = 0.25
coinCounter = 0
penniesCounter = 0
nickelsCounter = 0
dimesCounters = 0
quartersCounter = 0
cambio = False
while validacion is False:
changeOwed = float(input("Change owed: "))
if changeOwed > 0:
validacion = True
else:
validacion = False
while cambio is False:
if changeOwed > dimes and changeOwed <= quarters:
coinCounter += 1
quartersCounter += 1
changeOwed -= quarters
if changeOwed == 0.0:
cambio = True
elif changeOwed > nickels and changeOwed <= dimes:
coinCounter += 1
nickelsCounter += 1
changeOwed -= nickels
if changeOwed == 0.0:
cambio = True
elif changeOwed > pennies and changeOwed <= nickels:
coinCounter += 1
dimesCounters += 1
changeOwed -= dimes
if changeOwed == 0.0:
cambio = True
else:
coinCounter += 1
penniesCounter += 1
changeOwed -= pennies
if changeOwed == 0.0:
cambio = True
print(coinCounter)