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

Python循环查询符合条件列表元素 郊区销售统计函数排错

郊区门店销售额统计代码排错

需求说明

遍历作为参数传入函数的门店记录列表,匹配用户输入的郊区名称:检索到匹配项时,累加该郊区所有门店的总销售额,同时计算对应郊区的门店平均销售额。
涉及的门店数据字段顺序为门店ID、员工数、所属郊区、销售额,原始数据如下:

Hm001,6,Frankton,42305.67_
Hm002,10,Glenview,21922.22_
Hm003,7,Silverdale,63277.9_
Hm004,13,Glenview,83290.09_
Hm005,21,Queenwood,81301.82_
Hm006,14,Hillcrest,62333.3_
Hm007,7,Frankton,28998.8_
Hm008,19,Chartwell,51083.5_
Hm009,6,Glenview,62155.72_
Hm0010,8,Enderley,33075.1_
Hm0011,10,Fairfield,61824.7_
Hm0012,15,Rototuna,21804.8-
Hm0013,11,Fairfield,62804.7_

编写的原始实现代码如下:

def query_suburb_stats(records):
    suburb = input("Enter a suburb name: ")
    print(suburb)
    sales = 0
    avg_sales  =  0
    for match in records:
      if suburb.lower() == match[2].lower():
       sales += match[3]
       avg_sales = avg_sales/sales
     
    if suburb.lower() != records[2].lower():
      print(f"No matching name for {suburb}")
    else:
      print(f"The total sale volume for the stores in {suburb} is: {sales}")
      print(f"The average sales for {suburb} is: {avg_sales}")

代码存在的具体错误

  • 缺失数据预处理步骤:如果直接把原始文本行按列表传入函数,循环里的match是每行的完整字符串,match[2]取到的是字符串的第三个字符,根本不是郊区字段;另外原始数据每行末尾带的_、-是无效脏字符,不清理的话销售额字段无法转成数值参与计算。
  • 平均销售额计算逻辑完全错误:在循环内每匹配到一家门店就执行一次avg_sales/sales运算,而avg_sales初始值为0,不管循环多少次计算结果永远是0;平均销售额的正确计算逻辑是「总销售额 ÷ 匹配到的门店总数」,原代码既没有统计匹配到的门店数量,除法运算的逻辑也完全错误。
  • 匹配结果判断逻辑错误:循环结束后将用户输入和records[2]做对比,records是存储所有门店数据的大列表,records[2]只是列表中第三条记录(Silverdale门店)的数据,根本不是全局匹配的结果——即使用户输入Frankton、Glenview这些实际存在的郊区,只要输入内容不是Silverdale,都会被误判为无匹配结果。
  • 缺失边界处理:如果没有匹配到任何属于目标郊区的门店,直接执行除法运算会触发除零报错。

修正后的可运行代码

# 预处理原始数据,转换为结构化可计算的格式
raw_data = """Hm001,6,Frankton,42305.67_
Hm002,10,Glenview,21922.22_
Hm003,7,Silverdale,63277.9_
Hm004,13,Glenview,83290.09_
Hm005,21,Queenwood,81301.82_
Hm006,14,Hillcrest,62333.3_
Hm007,7,Frankton,28998.8_
Hm008,19,Chartwell,51083.5_
Hm009,6,Glenview,62155.72_
Hm0010,8,Enderley,33075.1_
Hm0011,10,Fairfield,61824.7_
Hm0012,15,Rototuna,21804.8-
Hm0013,11,Fairfield,62804.7_"""

records = []
for line in raw_data.split("\n"):
    # 清理行尾无效字符
    clean_line = line.strip("_-")
    store_id, emp_count, suburb_name, sale_volume = clean_line.split(",")
    # 转换数值字段类型
    records.append([
        store_id,
        int(emp_count),
        suburb_name,
        float(sale_volume)
    ])

# 修正后的统计函数
def query_suburb_stats(records):
    target_suburb = input("Enter a suburb name: ")
    print(target_suburb)
    total_sales = 0
    matched_store_count = 0

    for store in records:
        # 不区分大小写匹配郊区名
        if target_suburb.lower() == store[2].lower():
            total_sales += store[3]
            matched_store_count += 1
    
    if matched_store_count == 0:
        print(f"No matching name for {target_suburb}")
    else:
        avg_sales = total_sales / matched_store_count
        print(f"The total sale volume for the stores in {target_suburb} is: {total_sales:.2f}")
        print(f"The average sales for {target_suburb} is: {avg_sales:.2f}")

# 调用函数
query_suburb_stats(records)

效果说明

运行代码后输入郊区名,比如输入Glenview,会正确统计到3家匹配门店,输出总销售额167368.03、平均销售额55789.34;输入不存在的郊区名则会正常提示无匹配结果,不会触发报错。

内容的提问来源于stack exchange,提问作者dinonuggie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 16:01:03