双十一还有不到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 i in goods2:
for j in i:
sum_price = 0
sum_price+=sum([int(goods_price[k]) for k 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
print('{0:{3}^20}t{1:{3}^10}t{2:^10}'.format(' '.join(i), '原价为{}元'.format(results[i]),
'满减后价格为{}元'.format(last_price),chr(12288)))
训练短袖 跑步鞋 原价为1047元 满减后价格为927元
跑步鞋 书籍 原价为1034元 满减后价格为914元
训练短袖 训练外套 卫衣 原价为1057元 满减后价格为937元
训练短袖 训练外套 书籍 原价为1094元 满减后价格为974元
训练外套 运动鞋 台灯 原价为1097元 满减后价格为977元
训练外套 卫衣 书籍 原价为1044元 满减后价格为924元
跑步鞋 卫衣 台灯 原价为1116元 满减后价格为996元
训练短袖 运动鞋 卫衣 书籍 原价为1103元 满减后价格为983元
最终的成果如下图: