如何修改Python销售统计代码,实现非法输入时仅重输当前字段?
优化后的销售人员销售额统计程序
原代码的核心问题是嵌套if-else导致非法输入时回退到上一级输入,下面是修复并满足所有要求的完整代码:
# 定义佣金比例(可根据实际需求调整) DESK_COMMISSION_RATE = 0.05 TABLE_COMMISSION_RATE = 0.06 CHAIR_COMMISSION_RATE = 0.04 def get_positive_input(prompt): """获取正整数输入,非法输入时重复提示""" while True: try: value = int(input(prompt)) if value >= 0: return value else: print("输入无效,请输入非负整数") except ValueError: print("输入无效,请输入整数") # 存储所有销售人员数据 sales_data = [] while True: # 获取销售人员ID salesperson_id = get_positive_input("请输入销售人员ID(输入-1结束):") if salesperson_id == -1: break # 依次获取各品类销售额,确保输入有效 desk_sales = get_positive_input("请输入办公桌销售额:") table_sales = get_positive_input("请输入桌子销售额:") chair_sales = get_positive_input("请输入椅子销售额:") # 计算佣金 desk_commission = desk_sales * DESK_COMMISSION_RATE table_commission = table_sales * TABLE_COMMISSION_RATE chair_commission = chair_sales * CHAIR_COMMISSION_RATE total_commission = desk_commission + table_commission + chair_commission # 存储当前销售人员数据 sales_data.append({ "id": salesperson_id, "desk_sales": desk_sales, "table_sales": table_sales, "chair_sales": chair_sales, "total_sales": desk_sales + table_sales + chair_sales, "desk_commission": desk_commission, "table_commission": table_commission, "chair_commission": chair_commission, "total_commission": total_commission }) # 询问是否继续处理其他销售人员 while True: continue_choice = input("是否继续处理其他销售人员?(y/n):").strip().lower() if continue_choice in ["y", "n"]: break print("输入无效,请输入y或n") if continue_choice == "n": break # 生成销售统计表和佣金统计表 if sales_data: print("\n=== 销售统计表 ===") print(f"{'销售ID':<8}{'办公桌销售额':<12}{'桌子销售额':<10}{'椅子销售额':<10}{'总销售额':<10}") print("-" * 50) total_all_sales = 0 total_all_commission = 0 for data in sales_data: print(f"{data['id']:<8}{data['desk_sales']:<12}{data['table_sales']:<10}{data['chair_sales']:<10}{data['total_sales']:<10}") total_all_sales += data['total_sales'] total_all_commission += data['total_commission'] print("-" * 50) print(f"{'汇总':<8}{'':<12}{'':<10}{'':<10}{total_all_sales:<10}") print("\n=== 佣金统计表 ===") print(f"{'销售ID':<8}{'办公桌佣金':<12}{'桌子佣金':<10}{'椅子佣金':<10}{'总佣金':<10}") print("-" * 50) for data in sales_data: print(f"{data['id']:<8}{data['desk_commission']:<12.2f}{data['table_commission']:<10.2f}{data['chair_commission']:<10.2f}{data['total_commission']:<10.2f}") print("-" * 50) print(f"{'汇总':<8}{'':<12}{'':<10}{'':<10}{total_all_commission:<10.2f}") else: print("未录入任何销售数据")
关键改进点说明:
- 输入验证封装:用
get_positive_input函数统一处理所有正整数输入,不管是ID还是销售额,只要输入非整数或负数就重复提示,直到输入有效,彻底解决了原代码的回退问题。 - 佣金计算:预设了各品类的佣金比例,可根据实际业务调整,自动计算每个品类的佣金和总佣金。
- 数据存储:用列表+字典的形式存储每个销售人员的完整数据,方便后续统计输出。
- 继续处理逻辑:每次完成一个销售数据后,明确询问是否继续,避免误操作。
- 统计输出:最终生成两个统计表,包含每个销售的明细数据和整体汇总,格式清晰易读。
内容的提问来源于stack exchange,提问作者Art
相关产品推荐
相关产品推荐

