python编写简易超市系统_简易控制台超市销售系统|Python练习系列[1]

练习内容:主要是对嵌套字典和嵌套列表的操作练习

简易控制台超市销售系统完整代码和注释如下

from random import *

import os #引入必要模块

class supermarket():#定义超市

def __init__(self):

#初始化超市物品字典

self.goods_dicts={

'food':{

'candy':{

'num':0,

'price':0,

'code':'0000',

},

'latiao':{

'num':0,

'price':0,

'code':'0000',

},

'fruit':{

'grape':{'num':0,

'price':0,

'code':'0000',

},

'banana':{'num':0,

'price':0,

'code':'0000',

},

'apple':{

'green apple':{

'num':0,

'price':0,

'code':'0000',

},

'red apple':{

'num':0,

'price':0,

'code':'0000',

},

},

},

},

'clothes':{

'shirt':{

'num':0,

'price':0,

'code':'0000',

},

'trousers':{

'num':0,

'price':0,

'code':'0000',

},

'vest':{

'num':0,

'price':0,

'code':'0000',

},

'underwear':{

'purple underwear':{

'num':0,

'price':0,

'code':'0000',

},

'red purple':{

'num':0,

'price':0,

'code':'0000',

},

},

},

'furniture':{

'stool':{

'num':0,

'price':0,

'code':'0000',

},

'chair':{

'num':0,

'price':0,

'code':'0000',

},

'table':{

'num':0,

'price':0,

'code':'0000',

},

'cabinet':{

'num':0,

'price':0,

'code':'0000',

},

'bed':{

'num':0,

'price':0,

'code':'0000',

},

},

'office':{

'pen':{

'num':0,

'price':0,

'code':'0000',

},

'book':{

'num':0,

'price':0,

'code':'0000',

},

'paper':{

'num':0,

'price':0,

'code':'0000',

},

'computer':{

'num':0,

'price':0,

'code':'0000',

},

},

}

#初始化操作指令字典

self.commands_dicts={

'O':{

'prompt':'显示所有指令',

'order':self.show_commands

},

'S':{

'prompt':'显示所有商品',

'order':self.show_goods

},

'P':{

'prompt':'显示购物单',

'order':self.show_cart

},

'C':{

'prompt':'清空购物单',

'order':self.clear_cart

},

'A':{

'prompt':'编辑购物单',

'order':self.edit_goods

},

'F':{

'prompt':'提交购物单',

'order':self.submit_cart

},

'E':{

'prompt':'离开超市',

'order':self.exit_sp

},

}

self.nums_list=[]#初始化物品数量列表

self.nums_change_list=[]#初始化物品改变数量列表

self.prices_list=[]#初始化物品价格列表

self.codes_list=[]#初始化物品条码列表

self.names_list=[]#初始化物品名字列表

self.code_num=1#初始化物品条码值

self.wallet=randint(30,200)#初始化钱包值

self.welcome='欢迎光临Trix超市!请输入操作指令:'

self.bye='谢谢光临Trix超市!'

self.goods_cart_dict={}#初始化购物单字典

self.good_cart_nums_list=[]#初始化购物单物品数量列表

def sp_in(self):#超市初始化

def goods_attributes_loops(loops_dicts):#函数循环处理超市物品字典

for loop_dict_name,loop_dict in loops_dicts.items():

if not isinstance(list(loop_dict.values())[0],dict):#如果list(loop_dict.values())的第一个值不是dict类型 isinstance(值,类型)判断值的类型

loop_dict['num']=randint(0,20)#物品随机数量

loop_dict['price']=round(uniform(1,50),1)#物品随机价格 round(值,四舍五入的位数)四舍五入 uniform(range)随机小数

loop_dict['code']=str(self.code_num).zfill(4)#物品条码 str.zfill(位数)补零

self.nums_list.append(loop_dict['num'])#将数量 价格 条码分别添加到对应的列表

self.nums_change_list.append(loop_dict['num'])

self.prices_list.append(loop_dict['price'])

self.codes_list.append(loop_dict['code'])

self.names_list.append(loop_dict_name)

self.code_num+=1

else:

goods_attributes_loops(loop_dict)#控制函数循环

goods_attributes_loops(self.goods_dicts)

print(self.welcome)

def show_commands(self):#显示指令

for letter,letter_dict in self.commands_dicts.items():

print('|{0}:{1}'.format(letter,letter_dict['prompt']),end='')#str.format()格式化输出

print('|')

def command_detect(self):#指令检测

input_letter=input('').upper().strip()#将接收的输入转为大写去头尾空格

if input_letter not in self.commands_dicts:#如果接收值不在指令字典中

print('请输入正确指令!')

self.show_commands()

else:

self.commands_dicts[input_letter]['order']()#如果接收值在指令字典中就调用该字母对应的指令

def show_goods(self):#显示物品

def print_classes_loops(loops_dicts):#函数循环处理显示物品

global types_row#全局化变量types_row

for loop_dict_key,loop_dict_value in loops_dicts.items():

if not isinstance(list(loop_dict_value.values())[0],int):#如果list(loop_dict_value.values())的第一个值不是int类型

loop_dict_key=loop_dict_key+':'#显示物品的格式化输出

types_row='|{:20s}|{:8s}|{:8s}|{:8s}|'.format(loop_dict_key.upper(),'NUM','PRICE','CODE')#显示物品属性名字

print('—'*len(types_row))

print(types_row)

print_classes_loops(loop_dict_value)#控制函数循环

else:#如果list(loop_dict_value.values())的第一个值不是int类型

#格式化打印物品属性

print('|{:20s}|{:<8d}|{:<8.1f}|{:8s}|'.format(loop_dict_key.title(),loop_dict_value['num'],loop_dict_value['price'],loop_dict_value['code']))

print_classes_loops(self.goods_dicts)

print('—'*len(types_row))

self.show_commands()

def show_cart(self):#显示购物单

line_length=len('|||||')+20+8+8+8#格式化输出购物单

global good_total_price#全局化变量good_total_price

good_total_price=0

for good_name,good_attributes in self.goods_cart_dict.items():

good_total_price+=int(good_attributes[0])*float(good_attributes[1])#总价计算

print('—'*line_length)

print('|{:20s}|{:8s}|{:8s}|{:8s}|'.format('CLASS','NUM','PRICE','CODE'))#显示物品属性名字

for good_name,good_attributes in self.goods_cart_dict.items():

cart_types_row='|{:20s}|{:<8d}|{:<8.1f}|{:8s}|'.format(good_name.title(),good_attributes[0],good_attributes[1],good_attributes[2])

print(cart_types_row)#格式化打印物品属性

print('—'*line_length)

print('|Wallet:{0:>13.1f}{1}{2:>20.1f}|'.format(float(self.wallet),'|Total:',good_total_price))

print('—'*line_length)

self.show_commands()

def clear_cart(self):#清空购物单

self.goods_cart_dict.clear()

self.show_commands()

def edit_goods(self):#编辑购物单

input_edits_list=input('请输入编辑物品的数量及条码(格式:NUM CODE ···):\n').split(' ')

if len(input_edits_list)%2!=0:#判断长度

print('请输入正确格式!')

self.show_commands()

return#不正确格式返回

for n in range(int(len(input_edits_list)/2)):#对输入的 数量大小和条码正误判断

if int(input_edits_list[n*2])<0 or (int(input_edits_list[n*2])>self.nums_list[self.codes_list.index(input_edits_list[n*2+1])]) or (input_edits_list[n*2+1] not in self.codes_list):

print('请输入正确数量或条码!')

self.clear_cart()

return#不正确格式返回

correspond_index=self.codes_list.index(input_edits_list[n*2+1])#对应索引值等于输入值中的条码在超市物品条码列表中的索引

self.good_cart_nums_list.append(0)#先在self.good_cart_nums_list中添加0做计算的占位值

#self.goods_cart_dict={'物品名字':[数量,价格,条码],'物品名字':[数量,价格,条码]···}

self.goods_cart_dict[self.names_list[correspond_index]]=[int(input_edits_list[n*2]),self.prices_list[correspond_index],input_edits_list[n*2+1]]

self.good_cart_nums_list[n]=self.goods_cart_dict[self.names_list[correspond_index]][0]#购物单物品数量列表中的第n个值等于goods_cart_dict中物品名字的数量

self.nums_change_list[correspond_index]=self.nums_list[correspond_index]-self.good_cart_nums_list[n]#数量改变列表等于超市物品初始时的数量减去输入的对应物品数量

def goods_nums_change_loops(loops_dicts):#函数循环处理物品数量改变

for loop_dict in loops_dicts.values():

if not isinstance(list(loop_dict.values())[0],dict):#如果list(loop_dict.values())的第一个值不是dict类型

if loop_dict['num']!=self.nums_change_list[self.codes_list.index(loop_dict['code'])]:#如果超市的物品数量不等于改变量

loop_dict['num']=self.nums_change_list[self.codes_list.index(loop_dict['code'])]

else:

goods_nums_change_loops(loop_dict)#控制循环

goods_nums_change_loops(self.goods_dicts)

self.show_cart()

def submit_cart(self):#提交购物单

if good_total_price<=self.wallet:#物品总价小于钱包值

self.wallet=self.wallet-good_total_price

self.show_cart()

self.goods_cart_dict.clear()

print('你可以选择继续购买或者离开超市')

else:

self.show_cart()

print('你没有足够的钱来买这么多东西!请删除一些物品!')

def exit_sp(self):#离开超市

print(self.bye)

os._exit(0)#退出程序

trix_sp=supermarket()#超市实例化

trix_sp.sp_in()#超市初始化

trix_sp.show_commands()#显示指令

while True:#在循环中处理

trix_sp.command_detect()#检测指令

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值