我希望它打印一个表格,在将每行中的每个结果相加之前显示它们。 像这样:
ID,Table Sales,Desk Sales,Chair Sales
413 23.0 52.0 532.0
5 32523.0 5323.0 5.0
325 25.0 3253.0 23.0
Total,32571.00,8628.00,560.00
Commission Table:
ID,Table Commission,Desk Commission,Chair Commission
413 2.30 7.80 26.60
5 3252.30 798.45 0.25
325 2.50 487.95 1.15
Total,3257.10,1294.20,28.00
但我不断收到这个:
Sales Table
ID Table Desk Chair
----------------------------------------
-1 412.0 421.0 421.0
Total, 412.00|421.00|421.00
Commission Table
ID Table Desk Chair
----------------------------------------
-1 10.00 20.00 30.00
Total, 10.00|20.00|30.00
sale_list = []
commission_list = []
sale_person = int(input("Please input salesperson ID or -1 to end: "))
while sale_person != -1:
table_sales = float(input("Enter table sales: "))
while table_sales < 0:
print("Invalid: Enter valid table sales")
table_sales = float(input("Enter table sales: "))
desk_sales = float(input("Enter desk sales: "))
while desk_sales < 0:
print("Invalid: Enter valid desk sales")
desk_sales = float(input("Enter desk sales: "))
chair_sales = float(input("Enter chair sales: "))
while chair_sales < 0:
print("Invalid: Enter valid chair sales")
chair_sales = float(input("Enter chair sales: "))
sale_person = int(input("Please input salesperson ID or -1 to end: "))
if table_sales <= 500:
table_commission = 10
elif table_sales > 500 and table_sales < 1000:
table_commission = 20
elif table_sales >= 1000 and table_sales < 1500:
table_commission = 30
else:
table_commission = 40
if desk_sales <= 500:
desk_commission = 20
elif desk_sales > 500 and desk_sales < 1000:
desk_commission = 30
elif desk_sales >= 1000 and desk_sales < 1500:
desk_commission = 40
else:
desk_commission = 50
if chair_sales <= 500:
chair_commission = 30
elif chair_sales > 500 and chair_sales < 1000:
chair_commission = 40
elif chair_sales >= 1000 and chair_sales < 1500:
chair_commission = 50
else:
chair_commission = 60
sale_info = f"{sale_person},{table_sales},{desk_sales},{chair_sales}"
commission_info = f"{sale_person},{table_commission},{desk_commission},{chair_commission}"
sale_list.append(sale_info)
commission_list.append(commission_info)
print("\nSales Table")
print("ID \tTable Desk \tChair")
print("-"*40)
total_sale = [0, 0, 0]
for row in sale_list:
sales = row.split(",")
sale_person, table_sales, desk_sales, chair_sales = sales
table_sales, desk_sales, chair_sales = float(table_sales), float(desk_sales), float(chair_sales)
print(f"{sale_person}\t{table_sales}\t{desk_sales}\t{chair_sales}")
total_sale[0] += float(table_sales)
total_sale[1] += float(desk_sales)
total_sale[2] += float(chair_sales)
print(f"Total,\t{total_sale[0]:.2f}|{total_sale[1]:.2f}|{total_sale[2]:.2f}")
print("\nCommission Table")
print("ID \tTable Desk \tChair")
print("-"*40)
total_commission = [0, 0, 0]
for row in commission_list:
commission = row.split(",")
sale_person, table_commission, desk_commission, chair_commission = commission
table_commission, desk_commission, chair_commission = float(table_commission), float(desk_commission), float(chair_commission)
print(f"{sale_person}\t{table_commission:.2f}\t{desk_commission:.2f}\t{chair_commission:.2f}")
total_commission[0] += float(table_commission)
total_commission[1] += float(desk_commission)
total_commission[2] += float(chair_commission)
print(f"Total,\t{total_commission[0]:.2f}|{total_commission[1]:.2f}|{total_commission[2]:.2f}")
我一直只得到我的销售、佣金和销售人员 ID 的最后输入结果。
Sales Table
ID Table Desk Chair
----------------------------------------
-1 412.0 421.0 421.0
Total, 412.00|421.00|421.00
Commission Table
ID Table Desk Chair
----------------------------------------
-1 10.00 20.00 30.00
Total, 10.00|20.00|30.00
这是一个很大的问题,我将把它分解成更小的部分来展示解决方案。
下面的代码基本上就是你的代码想要做的事情(我描述了此后的所有功能)
def main():
salepersons, sales, commissions = [], [], []
saleperson = int(input("Please input salesperson ID or -1 to end: "))
while saleperson > -1:
table_sales, desk_sales, chair_sales = get_sales()
table_commission, desk_commission, chair_commission = get_commissions(table_sales, desk_sales, chair_sales)
salepersons.append(saleperson)
sales.append((table_sales, desk_sales, chair_sales))
commissions.append((table_commission, desk_commission, chair_commission))
saleperson = int(input("Please input another salesperson ID or -1 to end: "))
print_data(salepersons, sales, commissions)
if __name__ == "__main__":
main()
但是,当您向用户询问数据时,您从未将数据附加到列表中,因此每当您输入任何内容时,您只需删除之前的输入即可
while sale_person != -1: ... # some code inside the loop ... # some code outside the loop sale_list.append(sale_info) # appending after the loop commission_list.append(commission_info) # appending after the loop
这会导致仅保留最后的输入。解决这个问题应该足以解决您的问题。
我将尝试改进您的其余代码,同时给出更改的理由。我希望这有帮助。
def get_sales():
table_sales = get_sales_for_item("table")
desk_sales = get_sales_for_item("desk")
chair_sales = get_sales_for_item("chair")
return table_sales, desk_sales, chair_sales
询问销售数量的代码对于任何商品都是相同的,因此为了避免重复,我将此代码放在一个名为
get_sales_for_item
的通用函数中
def get_sales_for_item(item):
sales = int(input(f"Enter {item} sales: "))
while sales < 0:
print(f"Enter valid {item} sales")
sales = int(input(f"Enter {item} sales: "))
return sales
这只是询问销售额,直到获得有效数字并将该数字返回给调用函数
def get_commissions(table_sales, desk_sales, chair_sales):
table_commission = get_commissions_for_item("table", table_sales)
desk_commission = get_commissions_for_item("desk", desk_sales)
chairs_commission = get_commissions_for_item("chair", chair_sales)
return table_commission, desk_commission, chairs_commission
同样,我已将向用户询问佣金的代码放在通用函数中
get_commissions_for_item
。
def get_commissions_for_item(item, sales):
if item == "table":
commission = 10 if sales <= 500 else 20 if sales < 1000 else 30 if sales < 1500 else 40
elif item == "desk":
commission = 20 if sales <= 500 else 30 if sales < 1000 else 40 if sales < 1500 else 50
elif item == "chair":
commission = 30 if sales <= 500 else 40 if sales < 1000 else 50 if sales < 1500 else 60
return commission
这里我使用三元运算符而不是链接 ifs,但它执行与代码中相同的检查。
def print_data(salepersons, sales, commissions):
print("\nSales Table")
print("\t".join(["ID", "Tables", "Desks", "Chairs"]))
print("-" * 40)
for sp, (tb_rev, dk_rev, ch_rev) in zip(salepersons, sales):
print("\t".join(str(x) for x in [sp, tb_rev, dk_rev, ch_rev]))
tables_total = sum([sale[0] for sale in sales])
desks_total = sum([sale[1] for sale in sales])
chairs_total = sum([sale[2] for sale in sales])
print("\t".join(str(x) for x in ["TOTAL", tables_total, desks_total, chairs_total]))
print("\nCommission Table")
print("\t".join(["ID", "Tables", "Desks", "Chairs"]))
print("-" * 40)
for sp, (tb_com, dk_com, ch_com) in zip(salepersons, commissions):
print("\t".join(str(x) for x in [sp, tb_com, dk_com, ch_com]))
tables_total = sum([commi[0] for commi in commissions])
desks_total = sum([commi[1] for commi in commissions])
chairs_total = sum([commi[2] for commi in commissions])
print("\t".join(str(x) for x in ["TOTAL", tables_total, desks_total, chairs_total]))
这里我接收
salepersons
、sales
和 commissions
作为函数参数。salepersons
压缩 sales
,然后用 commissions
逐行获取数据并为每个表打印它。"\t".join()
调用切换了包含行的字符串。tables_total
、desks_total
和 chairs_total
中使用了列表理解,因此我可以使用 sum 函数对销售额和佣金中的每个项目求和。