如何实现3天销售总额与交易笔数统计函数并融入主逻辑
问题分析与修改方案
原代码存在几个核心错误导致无法正常运行:
- 自定义函数
daycalc内部未初始化tot变量,直接累加会触发NameError - 函数内的
return缩进错误,放在了for循环内部,遍历第一行就会直接返回结果,无法统计全量数据 - csv.reader是一次性迭代对象,主逻辑遍历后再在函数里遍历会读取不到任何内容
- 函数定义的参数
value、count未实际使用,也没有传入读取到的CSV数据,逻辑完全脱节
完整可运行实现
import csv def calc_weekend_sales(csv_reader): # 初始化各天统计变量 frisales = 0.0 fricnt = 0 satsales = 0.0 satcnt = 0 sunsales = 0.0 suncnt = 0 # 跳过表头行 next(csv_reader) # 遍历所有数据行统计 for row in csv_reader: weekday = row[21] sale_amount = float(row[11]) if weekday == 'Friday': frisales += sale_amount fricnt += 1 elif weekday == 'Saturday': satsales += sale_amount satcnt += 1 elif weekday == 'Sunday': sunsales += sale_amount suncnt += 1 # 计算汇总指标 total_sales = frisales + satsales + sunsales total_cnt = fricnt + satcnt + suncnt avg_sale = total_sales / total_cnt if total_cnt > 0 else 0.0 # 按字典返回所有维度结果,可按需取用 return { '周五销售额': frisales, '周五交易笔数': fricnt, '周六销售额': satsales, '周六交易笔数': satcnt, '周日销售额': sunsales, '周日交易笔数': suncnt, '三天总销售额': total_sales, '三天总交易笔数': total_cnt, '三天单均交易额': avg_sale } if __name__ == '__main__': with open('POS.csv', 'r', encoding='utf-8') as csvfile: my_reader = csv.reader(csvfile, delimiter=',') stat_result = calc_weekend_sales(my_reader) # 打印需要的结果 print('3-day Total Sales:', stat_result['三天总销售额'], '3-day Average Sale:', stat_result['三天单均交易额'])
改动说明
- 函数直接接收csv.reader对象作为参数,不依赖全局变量,复用性更强
- 函数内统一处理表头跳过、数据统计、指标计算,主逻辑不需要重复写判断规则
- 增加了除零判断,避免没有符合条件的交易时出现除数为0的报错
- 返回结果用字典格式,可根据需求任意取用不同维度的统计值
内容的提问来源于stack exchange,提问作者TheBeginner
相关产品推荐
相关产品推荐

