一:代码前思路解析
建一个商城类(Store)
A.开店(写一个开店的方法,添加商品信息)
商家:店名
1.商品 2.有没有货(相同货的个数) 3.价格 4.评价(是用户评价的) 5.销售量 ----属性
B.用户买东西(写一个购物的方法,先选择商城)
选择一个商城及购买对应商城商品,购买的数量要大于库存数量,购买一件库存就要减-1
opea_db=[{'name':'唯一店铺名称',store_name':['多个商品'],'num':'0','comment':['好用','好看']}]
二:代码分步骤购物:
1.在商城添加商品:
opea_db = [{'store_name': '手机','num': 1}]
while True: store_name=input('请输入需要存放的商品(按1退出添加1):')
# def f(o): # list(filter(f,opea_db)) # 输出每个字典 def f(i): if i['store_name']==store_name: num=i['num']+1 i['num']=num return i else: # 新添加的商品数量默认为0 没有库存 opea_db.append({'store_name':store_name,'num':0}) list(filter(f,opea_db)) print(opea_db)
或者这样写(for循环):
while True: store_name=input('请输入需要存放的商品(按1退出添加):')
if store_name=="1"
break # def f(o): # print(o) # list(filter(f,opea_db)) # 输出每个字典 for i in opea_db: if i['store_name']==store_name: num=i['num']+1 # 在默认值基础上增加 # print(num) i['num']=num else: opea_db.append({'store_name': store_name,'num':0 }) print(opea_db)
运行截图:
此写法缺陷:
增加新的商品且再次增加对应数量的话打印输出只显示最终商品数量即可,不要把前一次商品名、数量等信息都显示出来,重复!
# 新添加的商品数量默认为0 没有库存
opea_db.append({'store_name':store_name,'num':0}) # 此部分没有过滤器过滤,导致输出存在重复
代码优化:新增商品
opea_db = [{'store_name': '手机','num': 1}]
while True:
store_name=input('请输入需要存放的商品(按1退出添加):')
if store_name=="1"
break
# def f(o):
# list(filter(f,opea_db)) # 输出每个字典
def f(i):
if i['store_name']==store_name:
num=i['num']+1
i['num']=num
return i
# else:
# # 新添加的商品数量默认为0 没有库存
# opea_db.append({'store_name':store_name,'num':0})
#
# list(filter(f,opea_db))
# print(opea_db)
# 如果新添加商品(i['store_name']不等于store_name)没有返回值return 就None =====假的
需要执行否定语句,即下述代码 ---添加商品
if not list(filter(f,opea_db)):
# opea_db.append({'store_name':store_name,'num':1})
opea_db.append({'store_name': store_name,'num': 1})
print(opea_db)
#if store_name=="1":
#break
运行截图:
或者这样写:
class Store:
# Store_db=[] # 类属性 商城仓库 数据不多的话不需要这个仓库,保存在商品信息数据库里面就行
opea_db=[] # 商品数据库
# opea_db = [{'store_name': '手机','num': '0','comment': ['好用','好看']}]
# opea_db = [{'name': '唯一店铺名称','store_name':['多个商品'],'num':'0','comment':['好用','好看']}]
# def __init__(self,name):
# self.name=name # 第一个: 店名或者用户名 传参...
def opea(self,name): # 店铺方法
self.name=name # 店铺名字
# opea_db=[{'store_name':'手机','num':'0'}]
while True:
store_name=input('请输入需要存放的商品(按1退出添加):')
# Store.opea_db.append({'store_name':store_name,'num':0})
# if store_name=="1":
# break
# # num 默认为1
# opea_db = []
# while True:
# store_name=input('请输入需要存放的商品(按1退出添加1):')
# def f(o):
# printist(filter(f,opea_db)) # 输出每个字典
def f(i): # i 为字典
if i['store_name']==store_name:
num=i['num']+1 # 改变相同商品数量
i['num']=num # 赋值
return i # 以上执行f()函数代码的东西
# 如果新添加商品(i['store_name']不等于store_name)没有返回值return 就None =====假的 需要执行否定语句,即下述代码 ---添加商品
if not list(filter(f,Store.opea_db)):
# opea_db.append({'store_name':store_name,'num':1})
Store.opea_db.append({'name': self.name,'store_name':store_name,'num': 1})
print(Store.opea_db)
if store_name==1:
break
# Store.Store_db.append({'name':self.name})
def user(self): # 客户买东西
'''
# 1.选择店铺
2.把该店铺的商品给你显示出来
3.购买(选择): 数量-1 所购买的商品必须是在第一步
return:
'''
# 选择店铺
select_store=input('请选择你需要的店铺:')
def sele(o):
if o['store_name']==Store.store_name:
# 把对应店铺里面的商品展示给用户看
Store
else:
print('没有改店铺!')
filter(sele,Store.Store_db)
shangcheng=Store()
while True:
d_name=input('请输入需要创建的店铺名称:')
shangcheng.opea(d_name)
2.进店铺买东西
li=[{'name': '电信', 'store_name': '手机', 'num': 1}, {'name': '电信', 'store_name': '苹果', 'num': 1}]
while True:
select_store=input('请输入你要选择的店铺:')
def f(o):
if o['name']==select_store:
print(o.get('store_name'),end='\t')
print(o.get('num'),end='\t')
print()
return o # 如果没有返回值return 就执行下面一行代码
# if not list(filter(f,li)):
# print('没有该店铺!!!')
if list(filter(f,li)):
select_sp=input('请选择你要购买的商品:')
def f2(o):
if o['store_name']==select_sp:
if o['num']>0:
o['num']-=1
print('购买成功!!!')
return o
if not list(filter(f2,li)):
print('没有该商品或者缺货!!!')
else:
print('没有该店铺!!!')
运行截图:
三.整体整合代码 实现进店铺买东西效果
class Store:
# Store_db=[] # 类属性 商城仓库 数据不多的话不需要这个仓库,保存在商品信息数据库里面就行
opea_db=[] # 商品数据库
# opea_db = [{'store_name': '手机','num': '0','comment': ['好用','好看']}]
# opea_db = [{'name': '唯一店铺名称','store_name':['多个商品'],'num':'0','comment':['好用','好看']}]
# def __init__(self,name):
# self.name=name # 第一个: 店名或者用户名 传参...
# def opea(self,name): # 店铺方法
def opea(self): # 店铺方法
self.name=input('开店成功!!! 请输入店铺名字:') # 整合时的变化点
# self.name=name # 店铺名字
# opea_db=[{'store_name':'手机','num':'0'}]
while True:
store_name=input('请输入需要存放的商品(按1退出添加):')
# Store.opea_db.append({'store_name':store_name,'num':0})
# if store_name=="1":
# break
# # num 默认为1
# opea_db = []
# while True:
# store_name=input('请输入需要存放的商品(按1退出添加1):')
# def f(o):
# printist(filter(f,opea_db)) # 输出每个字典
def f(i): # i 为字典
if i['store_name']==store_name:
num=i['num']+1 # 改变相同商品数量
i['num']=num # 赋值
return i # 以上执行f()函数代码的东西
# 如果新添加商品(i['store_name']不等于store_name)没有返回值return 就None =====假的 需要执行否定语句,即下述代码 ---添加商品
if not list(filter(f,Store.opea_db)):
# opea_db.append({'store_name':store_name,'num':1})
Store.opea_db.append({'name': self.name,'store_name':store_name,'num': 1})
print(Store.opea_db)
if store_name=="1":
break
# Store.Store_db.append({'name':self.name})
def user(self): # 客户买东西
'''
# 1.选择店铺名称
2.展示对应店铺的所有商铺信息
3.店铺有这样的商品==没有对应商品就要过滤掉 ,购买(选择): 数量-1 所购买的商品
'''
# 选择店铺
# select_store=input('请输入你要选择的店铺:')
# def sele(o):
# if o['store_name']==Store.store_name:
# # 把对应店铺里面的商品展示给用户看
# Store
# else:
# print('没有改店铺!')
# filter(sele,Store.Store_db)
while True:
select_store=input('请输入你要选择的店铺(按1退出添加):')
if select_store=="1": # 整合时的变化点
break
def f(o):
if o['name']==select_store:
print('商品名:',o.get('store_name'),end='\t')
print('库存数量',o.get('num'),end='\t')
print()
return o # 如果没有返回值return 就执行下面一行代码
# if not list(filter(f,li)):
# print('没有该店铺!!!')
# if list(filter(f,li)): # 合并时需要修改的地方
if list(filter(f,Store.opea_db)):
select_sp=input('请选择你要购买的商品:')
a=int(input('请输入需要购买的数量:'))
# 如果购买不止一个商品在这里增加一个判断就行了
# 新加一个输入数量
# 商品数量必须大于所购买的数量,商品数量减去购买数量
def f2(o):
if o['store_name']==select_sp:
# if o['num']>0:
if o['num'] >=a:
# o['num']-=1
o['num'] -=a
print('购买成功!!!')
return o
# 以上过滤器只做满足条件的事情,不能写else语句!
if not list(filter(f2,Store.opea_db)):
print('没有该商品或者缺货!!!')
# list(filter(f,))
else:
print('没有该店铺!!!')
#
# print(Store.opea_db) # 每次都打印一下
shangcheng=Store()
while True:
# d_name=input('请输入需要创建的店铺名称:')
# shangcheng.opea(d_name)
inp=input('请选择:')
if inp=="1":
shangcheng.opea()
else:
shangcheng.user()
运行截图:
本文介绍基于Python下OneHotEncoder与pd.get_dummies两种方法,实现机器学习中最优的编码方法——独热编码的方法~