Dick Moores wrote: > At 10:16 AM 8/6/2007, Eric Brunson wrote: > > Your point about efficiency is well-taken. > >> def makechange( amount, denominations ): >> >> coins = {} >> for d in denominations: >> coins[d] = int( amount/d ) >> amount = amount%d >> >> return coins > > OK, I used this this way: > > ============================ > def makechange( amount, denominations ): > > coins = {} > for d in denominations: > coins[d] = int( amount/d ) > amount = amount%d > > return coins > > denominations = (2000, 1000, 500, 100, 50, 25, 10, 5, 1) > amount = 2218 > print makechange(2218, denominations) > ================================== > > And get: > {1: 3, 100: 2, 5: 1, 1000: 0, 10: 1, 2000: 1, 50: 0, 500: 0, 25: 0} > > That's the correct change: 3 pennies, 2 $1 bills, 1 nickel, no $10 > bills, 1 dime, 1 $20 bill, no half-dollars, no $5 bills, no quarters. > > For amount = 3288: > {1: 3, 100: 2, 5: 0, 1000: 1, 10: 1, 2000: 1, 50: 1, 500: 0, 25: 1} > > Why those weird orders?
Dictionary keys are not guaranteed to return in the order you add them. You can sort them manually if it's important: change = makechange( 2218, denominations ) print [ ( k, change[k] ) for k in sorted( change ) ] Or, since you have a sorted list of denominations already: change = makechange( 2218, denominations) print [ ( k, change[k] ) for k in denominations ) ] Or, if you know you're going to want them sorted use: coins = [] for d in denominations: coins.append( ( d, int( amount/d ) ) amount = amount%d to get an ordered list of tuples. Isn't programming fun? > > Dick > > > > ====================================== > Bagdad Weather > <http://weather.yahoo.com/forecast/IZXX0008_f.html> _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor