合作: 杨月 张宇博
###商品名称:[商品单价,商品数量]
trade_dir = {
'A1': None,
'A2': None,
'A3': None,
'A4': None,
'A5': None,
'A6': None
}
##储钱盒 钱的面额:张数
moneybox_dir = {
10: None,
5: None,
2: None,
1: None
}
##投币余额
balance = [0]
def Initailizer(rstr):
'''
售货系统初始化,返回(trade_dir,moneybox_dir)的一个元组
:return:
'''
trade_li = [6, 8, 5, 4, 3, 2]
rli = rstr.split()
rli1 = list(zip(trade_li, [int(i) for i in rli[1].split('-')[::-1]]))
for items in trade_dir:
trade_dir.update({items: list(rli1.pop())})
rli2 = rli[2].split('-')
for items1 in moneybox_dir:
moneybox_dir.update({items1: int(rli2.pop())})
print('S001:Initialization is successful')
print('''
商品信息
商品名称 单价 数量
''')
for names, pricecount in trade_dir.items():
print("\t\t\t\t%s \t%s %s" % (names, pricecount[0], pricecount[1]))
return trade_dir,moneybox_dir
def Pay(pstr):
'''
投币,返回余额列表
:return:
'''
Inmoney = int(pstr.split()[1])
if Inmoney not in [1, 2, 5, 10]:
print("E002:Denomination error")
elif Inmoney > 2 * int(moneybox_dir[2]) + 1 * int(moneybox_dir[1]):
print("E003:Change is not enough,pay fail")
elif Inmoney + balance[0] > 10:
print("E004:Pay the balance is beyond the scope biggest")
elif sum([trade[1] for trade in trade_dir.values()]) == 0:
print("E005:All the goods sold out")
else:
moneybox_dir[Inmoney] += 1
balance[0] += Inmoney
print("S002:Pay succeess,balance=%d" % (balance[0]))
return balance
def Buy(bstr):
'''
购买商品
:param bstr:
:return:
'''
buytrade=bstr.split()[1]
if buytrade not in trade_dir:
print("E006:Goods does not exist")
elif trade_dir[buytrade][1]==0:
print("E007:The goods sold out")
elif balance[0]<trade_dir[buytrade][0]:
print("E008:Lack of balance")
else:
balance[0]=balance[0]-trade_dir[buytrade][0]
trade_dir[buytrade][1]-=1
print("S003:Buy success,balance=%d" %(balance[0]))
def coin_return():
'''
退币
:return:
'''
if balance[0]==0:
print("E009:Work failure")
elif balance[0]==10 and moneybox_dir[10]>=1:
balance[0]=0
moneybox_dir[10]-=1
for items in [1,2,5]:
print("%s yuan coin number=0" %(items))
print("10 yuan coin number=1")
else:
while balance[0]>0:
for i in range(0,int(moneybox_dir[1])+1):
for j in range(0,int(moneybox_dir[2])+1):
for a in range(0,int(moneybox_dir[5])+1):
if balance[0]==a*5+j*2+i*1:
balance[0]=0
moneybox_dir[5]-=a
moneybox_dir[2]-=j
moneybox_dir[1]-=i
print("1 yuan coin number=%s" %(i))
print("2 yuan coin number=%s" % (j))
print("5 yuan coin number=%s" % (a))
print("10 yuan coin number=0" )
break
else:
balance[0]-=1
def query(qstr):
'''
查询
:param qstr:
:return:
'''
qli=qstr.split()
if qli[1]=='0':
for set1 in sorted(trade_dir.items(),key=lambda x:(-x[1][1] ,x[0])):
print("%s %s %s" %(set1[0],set1[1][0],set1[1][1]))
elif qli[1]=='1':
for set2 in sorted(moneybox_dir.items(),key=lambda x:x[0]):
li=list(set2)
print("%s yuan coin number=%s" %(li[0],li[1]))
else:
print("E010:Parameter error")
print("欢迎使用自动售货系统".center(50,'*'))
while 1:
print('''
自动售货系统
命令 功能
r 商品数 存钱盒钱的张数; 重置
p 钱币面额; 投币
b 商品名称; 购买
c 退币
q 查询类别 查询
0 查询商品信息
1 查询存钱盒信息
exit 退出系统
例如:b A1;
''')
Inputmsg = input("请输入命令:")
if Inputmsg=='exit':
exit()
limsg = Inputmsg.split(';')
for msg in limsg:
if msg.startswith('r') and len(limsg)>1:
Initailizer(msg)
elif msg.startswith('p') and len(limsg)>1 :
Pay(msg)
elif msg.startswith('b') and len(limsg)>1:
Buy(msg)
elif msg.startswith('c'):
coin_return()
elif msg.startswith('q') and len(limsg)>1:
query(msg)
elif msg.startswith(''):
continue
这里写代码片
引用块内容