pyzuki

fewest_coins_and_bills5a.py

Oct 30th, 2011
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.82 KB | None | 0 0
  1. def get_amt_from_user_and_check_format():
  2.     while True:
  3.         print("Enter an amount of money in dollars and/or cents -- 234 or 234.56 or 0.56 or .56 or .09")
  4.         print("The amount must be less than $10,000,000,000,000 (ten trillion dollars)")
  5.         try:
  6.             money = input("Amount > ")
  7.             print()
  8.             money = money.lstrip('$')
  9.             money = float(money)  
  10.             if money >= 10000000000000:
  11.                 print("That's too large an amount to compute.")
  12.                 continue
  13.            
  14.             if money == 0:
  15.                 print("You entered a zero amount")
  16.                 continue
  17.            
  18.             money = str(money)
  19.            
  20.             dollars = money.partition('.')[0]
  21.             cents = money.partition('.')[2]
  22.             if len(cents) == 1:
  23.                 cents += '0'
  24.             elif len(cents) > 2:
  25.                 print('Incorrect format: cents must be in 2 digits.')
  26.                 continue
  27.             money = dollars + '.' + cents
  28.             dollars, cents = int(dollars), int(cents)
  29.             return money, dollars, cents
  30.         except ValueError:
  31.             print('Incorrect format')
  32.  
  33. def process_dollars_to_bills(dollars):
  34.     if dollars == 0:
  35.         return [], 0
  36.     bills_value_list = [100, 50, 20, 10, 5, 1]
  37.     bills_denomination_singular_list = ['hundred', 'fifty', 'twenty', 'ten', 'five', 'one']
  38.     bills_denomination_plural_list = ['hundreds', 'fifties', 'twenties', 'tens', 'fives', 'ones']
  39.    
  40.     bills_count = 0
  41.     bills_list = []
  42.     for idx, value in enumerate(bills_value_list):
  43.         if dollars/value >= 1:
  44.             bills_count += int(dollars/value)
  45.             if int(dollars/value) >= 2:
  46.                 bills_list.append((int(dollars/value), bills_denomination_plural_list[idx]))
  47.             else:
  48.                 bills_list.append((int(dollars/value), bills_denomination_singular_list[idx]))
  49.             dollars -= int(dollars/value) * bills_value_list[idx]
  50.            
  51.             if dollars == 0:
  52.                 return bills_list, bills_count
  53.    
  54. def process_cents_to_coins(cents):
  55.     if cents == 0:
  56.         return [], 0
  57.  
  58.     coins_value_list = [50, 25, 10, 5, 1]
  59.    
  60.     coins_denomination_singular_list = ['half-dollar', 'quarter', 'dime', 'nickel', 'penny']
  61.     coins_denomination_plural_list = ['half-dollars', 'quarters', 'dimes', 'nickels', 'pennies']
  62.    
  63.     coins_count = 0
  64.    
  65.     coins_list = []
  66.     for idx, value in enumerate(coins_value_list):
  67.         if cents/value >= 1:
  68.             coins_count += int(cents/value)
  69.             if int(cents/value) >= 2:
  70.                 coins_list.append((int(cents/value), coins_denomination_plural_list[idx]))
  71.             else:
  72.                 coins_list.append((int(cents/value), coins_denomination_singular_list[idx]))
  73.             cents -= int(cents/value) * coins_value_list[idx]
  74.            
  75.             if cents == 0:
  76.                 return coins_list, coins_count
  77.  
  78. def process_coins_and_bills_lists_and_print(bills_list, coins_list, money):
  79.     coins_bills_list = bills_list+coins_list
  80.     print("money = $", money, ' =', sep ='', end='')
  81.     for x in coins_bills_list[:-1]:
  82.         print(' ', x[0], ' ', x[1], ',', sep='', end='')
  83.     print(' ', coins_bills_list[-1][0], ' ', coins_bills_list[-1][1], sep='')
  84.    
  85. def print_number_of_bills_and_coins(bills_count, coins_count):
  86.     print("The number of bills and coins =", bills_count + coins_count)
  87.  
  88. def main():
  89.     money, dollars, cents = get_amt_from_user_and_check_format()
  90.     bills_list, bills_count = process_dollars_to_bills(dollars)
  91.     coins_list, coins_count = process_cents_to_coins(cents)
  92.     process_coins_and_bills_lists_and_print(bills_list, coins_list, money)
  93.     print_number_of_bills_and_coins(bills_count, coins_count)
  94.  
  95. if __name__ == '__main__':
  96.     main()
  97.  
  98.  
Advertisement
Add Comment
Please, Sign In to add comment