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
相关产品推荐
相关产品推荐

