双十一是不是被各种满减、优惠券绕晕了?那就来做一个购物攻略

python学习网 2020-11-03 15:25:13

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理

以下文章来源于python数据分析之禅 ,作者鸟哥

前言

双十一还有不到10天,购物车已经快加满了,但是钱包里就这么多钱,如何用现有的钱买到更多喜欢的东西,成为我比较头疼的事,因为我已经被各种组合加法搞晕了

 

于是我决定用python做个双十一购物攻略,把复杂的计算过程交给电脑解决,自动列出能购买哪些商品,成果如下:

 

下面给大家详细介绍一下实现过程:

 

首先将要购买的商品及价格放入表格中:

 

用pandas读取表格,并将商品名称和价格组合成字典:

import pandas as pd
data=pd.read_excel('商品.xlsx')
goods_price={}
for i,j in zip(list(data['名称']),list(data['原价'])):
    goods_price[i]=j
goods_price
{'训练短袖': 259,
 '训练外套': 589,
 '运动鞋': 389,
 '跑步鞋': 788,
 '卫衣': 209,
 '台灯': 119,
 '书籍': 246}

计算商品总价和折扣情况并输出

all_price=sum([int(goods_price[good]) for good in list(goods_price.keys())])  #求商品总价格
all_discount=int(all_price/300)
print('全部商品原价总额为{}元'.format(all_price))
print('全部商品可以满减{0}次'.format(all_discount))
print('满减后商品价格总额为{}元'.format(all_price-40*all_discount))   #每满300减40
全部商品原价总额为2599元
全部商品可以满减8次
满减后商品价格总额为2279元

输入购买力

money_max=int(input('请输入购买最大金额:'))
money_min=int(input('请输入购买最小金额:'))

对所有商品进行组合

import itertools
goods1=list(goods_price.keys())
goods2 = []
for i in range(1,len(goods1)+1):
    iter = itertools.combinations(goods1,i)
    goods2.append(list(iter))

 

以商品组合为键,价格为值,创建字典

results={}
for in goods2:
    for in i:
        sum_price 0
        sum_price+=sum([int(goods_price[k]) for in j])
        results[j]=sum_price

 

输出满足条件的满减商品

for i in list(results.keys()):
    last_price=results[i]-int(results[i]/300)*40
    if last_price>money_min and last_price<money_max:
        print('{0:{3}^20}\t{1:{3}^10}\t{2:^10}'.format(' '.join(i), '原价为{}元'.format(results[i]),
                                                       '满减后价格为{}元'.format(last_price),chr(12288)))

 

最终的成果如下图:

阅读(2415) 评论(0)