某超市会员及商品信息如下所示:
会员列表:{‘0001’:‘张三’, ‘0002’:‘李四’, ‘0003’:‘王五’, ‘0004’:‘赵六’}
商品价格列表:{ ‘手机’:2000, ‘电脑’:3000, ‘手表’:1000, ‘挂钟’:500 ,’衣服’:300, ‘裤子’:700: ,’食品’:30, ‘饮料’:70, ‘水果’:3, ‘蔬菜’:7}。
按照下面指定格式,随机生成该超市会员的单次购物记录列表。
购物记录格式:[会员ID, {‘商品1’:数量1, ‘商品2’:数量2, ‘商品3’:数量3,……} ]
功能要求:
(1)生成10条购物记录,每条记录随机选择会员、生成1-10种商品及相应数量(1-10),保存在购物车列表中;
(2)计算每条购物车记录的总价,并增加到(1)所得列表中。
(3)按商品顺序统计销售次数及总量,并打印输出;
(4)按会员顺序统计购物次数、购买商品种类及数量,并打印输出。
import random, collections, functools, operator
vip_dict = {"0001": "张三", "0002": "李四", "0003": "王五", "0004": "赵六"}
shop_dict = {"手机": 2000,
"电脑": 3000,
"手表": 1000,
"挂钟": 500,
"衣服": 300,
"裤子": 700,
"食品": 2000,
"饮料": 70,
"水果": 3,
"蔬菜": 7}
list_1 = []
shop = []
list_4 = []
name = [] # 生成会员名字空列表
for vip_name in vip_dict:
name.append(vip_name) # 生成所有会员名字列表
for shop_name in shop_dict:
shop.append(shop_name) # 生成商品名字列表
for i in range(100): # 随机生成100条购物记录
x = random.choices(name) # 随机生成只含一个会员名字的列表
num = []
for b in range(10):
num_1 = random.randint(1, 10)
num.append(num_1) # 随机生成含10个随机数字的数量列表
y = random.choices(shop, k=10) # 随机生成含10个随机商品的商品列表
shopping_dict = dict(zip(y, num)) # 数量列表和商品列表合并成字典
shop_sum = 0
for key in shopping_dict:
if key in shop_dict:
shop_sum += shopping_dict[key] * shop_dict[key] # 计算购物车记录总价
x.append(shopping_dict)
x.append(shop_sum)
list_1.append(x) # 将每一条购物记录存入列表list_1中
print(x) # 打印每一条购物记录
list_2 = []
for h in range(0, len(list_1)):
list_2.append(list_1[h][1]) # 取出列表里每一条购物记录中的商品和数量存放至列表list_2中
for k in range(len(list_2)):
for e in list_2[k]:
list_4.append(e) # 取出列表list_2里所有出现的商品种类并存放于列表list_4中
result_3 = dict(collections.Counter(list_4)) # 统计每一件商品销售次数并以字典的形式输出
print(f"各类商品销售次数为:{result_3}")
result_2 = dict(functools.reduce(operator.add, map(collections.Counter, list_2))) # 把相同商品的数量进行求和
print(f"各类商品销售总量为:{result_2} ")
def mp(y):
x = 0
list_3 = []
for i in range(len(list_1)):
if list_1[i][0] == y:
x += 1
list_3.append(list_1[i][1]) #取出列表里会员y的每一条购物记录存放至列表list_2中
print(f"{y}的购物次数为{x}次,", end='')
result_1 = dict(functools.reduce(operator.add, map(collections.Counter, list_3))) # 把相同商品的数量进行求和
print(f"购买商品种类及数量为:{result_1} ")
mp("0001")
mp("0002")
mp("0003")
mp("0004")
运行结果: