Steve posted a coding challenge a few days ago - a change dispenser. I thought it would be a nice exercise for my fledgling Python skills and implemented it with just a small variation on pluralizing coin denominations.
output = "Change is "
coins = (['quarte|r|rs', 25], ['dim|e|es', 10], ['nicke|l|ls', 5], ['penn|y|ies',1])
for i in coins:
r = amt // i
if(r > 0):
coinout = re.split('\|', i)
output += "%d %s%s " % (r, coinout, coinout[1:][r > 1])
amt = amt - (r * i)
A few things I learned along the way:
* I was reminded that dictionary objects do not guarantee order.
* I was using Python regular expressions to do a match on the string "this |and|or that" and discovered if you use match with simply \|(\w+) it returns nothing since the match must start from the beginning of the string!
* I was going to use a lambda expression for the pluralization but that's such a large hammer for what in the end would become a split
Python's behavior with booleans is another point of interest - when I test the following: coinout[1:][r > 1] I'm taking advantage of anything true being a 1. I wonder if this is "bad" but it's a seductive thing to take advantage of...