#!/usr/bin/python3 # =================================================================== # Letter/Invoice # brute force method with f-strings # =================================================================== from datetime import date pagewidth = 76 customerid = '00054619' invoiceid = '00001' fromaddr = ['ABC Parts Company', 'Dept 001', '2121 Parts Rd', 'Parts, OH 91234' ] toaddr = ['Flying Machines', '120 Airport Ave', 'Billings, MT 78912' ] items = [ ['Flux Capacitor', 123.47, 3], ['Glow sticks', 0.99, 100], ['Lightsaber', 105.00, 1] ] # ---- debugging support function def display_columns(): print(' 1 2 3 4' + ' 5 6 7 8') print('1234567890'*8) # -------------------------------------------------------------------- # ---- main # -------------------------------------------------------------------- today = date.today().strftime('%B %d, %Y') print(f'customer id: {customerid}' + f'{" "*(pagewidth - 13 - len(customerid) - len(today))}' + f'{today}') print(f'invoice id : {invoiceid}') print() first = True for a in fromaddr: if first: first = False print(f'From : {a}') else: print(f' {a}') print() first = True for a in toaddr: if first: first = False print(f'To : {a}') else: print(f' {a}') print() print('Enclosed are the parts you requested.') print() print('Item Description Unit Cost ' + 'Qty Total Cost') print(f'{"-"*4} {"-"*28} {"-"*11} {"-"*5} {"-"*15}') print() ttotal = 0.0 for i,itm in enumerate(items): total = round(itm[1]*itm[2],2) ttotal += total print(f'{i+1:>4} {itm[0]:27} {itm[1]:>10.2f} ' + f'{itm[2]:>4} {total:>14}') print() ttstr = f'Total {str(round(ttotal,2))}' print(f'{" "*(pagewidth-len(ttstr))}{ttstr}') print() print() print('To return any item please contact our support services at') print('800-800-8800, M-F 8am to 6pm PST.')