如何统计用户本年度及本月采购总额并核算对应折扣?
采购数据统计与折扣计算实现方案
实现思路
- 解析采购记录中的日期字符串,提取年、月信息
- 按用户ID分组,分别统计目标年度采购总额和目标月度采购总额
- 根据预设折扣规则,计算每个用户可享受的总折扣
代码实现
# 原始采购数据 purchases = [ {"id": "123", 'price':16000, 'date': "(2022, 3, 12)"}, {"id": "123", 'price':4000, 'date': "(2022, 11, 20)"} ] # 定义要统计的目标年份和目标月份(可根据实际需求调整) TARGET_YEAR = 2022 TARGET_MONTH = 11 # 初始化用户统计字典,存储每个用户的年度/月度采购总额 user_stats = {} for purchase in purchases: user_id = purchase["id"] price = purchase["price"] # 解析日期字符串:去除括号后分割为年、月、日 date_parts = purchase["date"].strip("()").split(",") year, month, _ = map(int, date_parts) # 初始化用户统计数据(首次出现时) if user_id not in user_stats: user_stats[user_id] = {"annual_total": 0, "monthly_total": 0} # 累加年度采购总额(仅统计目标年份的订单) if year == TARGET_YEAR: user_stats[user_id]["annual_total"] += price # 累加目标月份的采购总额 if month == TARGET_MONTH: user_stats[user_id]["monthly_total"] += price # 计算并输出每个用户的折扣信息 for user_id, stats in user_stats.items(): annual_total = stats["annual_total"] monthly_total = stats["monthly_total"] total_discount = 0 # 基础折扣:年度总额≥15000享20%折扣 if annual_total >= 15000: total_discount += 20 # 额外折扣:同时月度总额≥3000再加15% if monthly_total >= 3000: total_discount += 15 print(f"用户ID: {user_id}") print(f"{TARGET_YEAR}年度采购总额: {annual_total} 元") print(f"{TARGET_YEAR}年{TARGET_MONTH}月采购总额: {monthly_total} 元") print(f"可享受总折扣: {total_discount}%") print(f"实际需支付原价的 {100 - total_discount}%") print("-" * 20)
代码说明
- 日期解析:通过字符串处理提取年、月,避免使用
eval提升安全性 - 分组统计:使用字典按用户ID聚合数据,确保每个用户的采购总额准确累加
- 折扣逻辑:严格遵循规则,先判断年度总额是否达标,再叠加月度额外折扣
运行结果
用户ID: 123 2022年度采购总额: 20000 元 2022年11月采购总额: 4000 元 可享受总折扣: 35% 实际需支付原价的 65% --------------------
内容的提问来源于stack exchange,提问作者Pani Hardoy
相关产品推荐
相关产品推荐

