我有一個非常簡單的程序,我正在爲班級編寫計算基於固定門票價格的收入。將它乘以用戶提供的許多票據後,首先用千位上的逗號將其格式化,然後在其前面添加一個美元符號,最後將其作爲字符串返回以在列中列出在頂部固定標題。如何計算多個數字的位數,然後以表格形式對其進行格式化?
我想知道的是,如果有一種方法可以首先統計最後生成的字符串中的數字位數(包括美元符號和逗號),並根據該數字調整列的寬度如果這是有意義的,那麼空格的長度要比正確顯示列標題的最小空格數要長。
就像一個參考,腳本已經輸出了項目所需的結果,我只是想進一步擴展我自己的理解。另外,我知道這可能不是全部是構建這一計劃的最好方式,所以任何建議將受到歡迎:
# Define ticket prices
SILVER_TIC_PRICE = 35
GOLD_TIC_PRICE = 55
PLATINUM_TIC_PRICE = 85
# Create Functions
# Validate tickets sold as an interger
def tickets_sold(message):
while True:
try:
user_input = int(input(message))
except ValueError:
print('\nERROR : \nInvalid entry \nPlease use a number\n')
continue
try:
assert user_input >= 0
except AssertionError:
print('\nERROR : \nInvalid entry \nPlease use a positive number\n')
continue
else:
return user_input
break
# Reusable line function
def print_line(ticket_class, tickets_sold, ticket_revenue):
print(format(ticket_class, " >8"), format(tickets_sold, " >7"), format(ticket_revenue, " <7"), sep=' ')
# Format Function
# def format_final()
# Get the number of tickets sold by type
# But first a blank line for readability
print(' ')
# Get Silver tickets sold
silver_tickets_sold = tickets_sold ('Enter the number of Silver tickets sold: ')
# Get Gold tickets sold
gold_ticket_sold = tickets_sold('Enter the number of Gold tickets sold: ')
# Get Platinum tickets sold
platinum_ticket_sold = tickets_sold('Enter the number of Platinum tickets sold: ')
# calculate revenue
silver_initial = int(silver_tickets_sold * SILVER_TIC_PRICE)
gold_initial = int(gold_ticket_sold * GOLD_TIC_PRICE)
platinum_initial = int(platinum_ticket_sold * PLATINUM_TIC_PRICE)
silver_final = "{:,}".format(silver_initial)
gold_final = "{:,}".format(gold_initial)
platinum_final = "{:,}".format(platinum_initial)
silver_revenue = '$' + str(silver_final)
gold_revenue = '$' + str(gold_final)
platinum_revenue = '$' + str(platinum_final)
# calculate totals
total_tickets = int(silver_tickets_sold + gold_ticket_sold + platinum_ticket_sold)
total_initial = int(silver_initial + gold_initial + platinum_initial)
total_final = "{:,}".format(total_initial)
total_revenue = '$'+str(total_final)
# display results
print(' ')
print_line('Section','Tickets','Revenue')
print_line('--------','-------','-------')
print_line('Silver', silver_tickets_sold, silver_revenue)
print_line('Gold', gold_ticket_sold,gold_revenue)
print_line('Platinum', platinum_ticket_sold, platinum_revenue)
print_line('========','=======','=======')
print_line('Total', total_tickets, total_revenue)
print(' ')
我知道已經有這個問題的答案的這一部分問題,但我無法找到任何東西以某種方式將各部分結合起來,這樣我就可以將我的大腦包裹起來。
使用一些已經爲你實現的表格包(按照依賴複雜度的增加順序),可以想到'tabulate','pandas','astropy.table'。 – MSeifert
還請包括當前行爲和*期望*行爲,以便我們知道實際上你想要解決的問題是什麼:) – MSeifert
當前我只能將字段長度設置爲固定值(在可重用行中函數),我想要做的是計算每個輸出中的數字,如果它們長於正確顯示標題所需的最小數量,請將格式的長度調整爲最長。即如果出售的門票數量乘以成本結果的字符串長度超過8個字符,則將格式調整爲該數字(如果它們均不是這樣),請將其保留在顯示列標題所需的數量上。這有幫助嗎? – richwoo