Python销售佣金报表问题:如何每行打印结果并留存所有输入数据
问题分析与解决
问题根源
你的代码存在三个核心问题:
- 数据收集逻辑错误:所有数据处理(佣金计算、添加到列表)都在
while循环外部执行,导致仅能捕获最后一次输入的销售数据,且此时sale_person已经被更新为-1,最终列表里只有ID为-1的一条记录。 - 佣金规则不符合预期:当前代码里的佣金是固定数值(比如10、20),但预期输出里是销售额的百分比(比如23.0的10%是2.30),规则理解有误。
- 输出格式不匹配:预期输出用制表符对齐,总和用逗号分隔,而当前用竖线分隔,格式不一致。
修改后的代码
sale_list = [] commission_list = [] # 初始化总计变量 total_table_sales = 0.0 total_desk_sales = 0.0 total_chair_sales = 0.0 total_table_comm = 0.0 total_desk_comm = 0.0 total_chair_comm = 0.0 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: ")) # 计算佣金(匹配预期输出的百分比规则:桌子10%,办公桌15%,椅子5%) table_commission = table_sales * 0.10 desk_commission = desk_sales * 0.15 chair_commission = chair_sales * 0.05 # 更新总计 total_table_sales += table_sales total_desk_sales += desk_sales total_chair_sales += chair_sales total_table_comm += table_commission total_desk_comm += desk_commission total_chair_comm += chair_commission # 将当前销售记录和佣金记录加入列表 sale_list.append((sale_person, table_sales, desk_sales, chair_sales)) commission_list.append((sale_person, table_commission, desk_commission, chair_commission)) # 输入下一个销售ID或结束 sale_person = int(input("Please input salesperson ID or -1 to end: ")) # 打印销售表 print("\nID,Table Sales,Desk Sales,Chair Sales") for person_id, tb, dk, ch in sale_list: print(f"{person_id}\t{tb:.1f}\t{dk:.1f}\t{ch:.1f}") print(f"Total,{total_table_sales:.2f},{total_desk_sales:.2f},{total_chair_sales:.2f}") # 打印佣金表 print("\nCommission Table:") print("ID,Table Commission,Desk Commission,Chair Commission") for person_id, tb_comm, dk_comm, ch_comm in commission_list: print(f"{person_id}\t{tb_comm:.2f}\t{dk_comm:.2f}\t{ch_comm:.2f}") print(f"Total,{total_table_comm:.2f},{total_desk_comm:.2f},{total_chair_comm:.2f}")
修改说明
- 将数据处理(佣金计算、添加列表、总计更新)移入
while循环内部,确保每次输入的销售数据都被及时记录。 - 修正佣金计算逻辑,改为按销售额百分比计算(完全匹配预期输出的数值比例)。
- 调整输出格式,与预期输出的对齐方式、分隔符保持一致。
- 用元组存储每条记录,避免字符串拆分的繁琐操作,代码更易维护。
内容的提问来源于stack exchange,提问作者Artiz
相关产品推荐
相关产品推荐

