如何分别打印每行中的每个结果?

问题描述 投票:0回答:1

我希望它打印一个表格,在将每行中的每个结果相加之前显示它们。 像这样:

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
python list format
1个回答
0
投票

这是一个很大的问题,我将把它分解成更小的部分来展示解决方案。

下面的代码基本上就是你的代码想要做的事情(我描述了此后的所有功能)

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 函数对销售额和佣金中的每个项目求和。

© www.soinside.com 2019 - 2024. All rights reserved.