You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 05:32:45