****作业——自动售货机

合作:  杨月  张宇博

###商品名称:[商品单价,商品数量]
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
        这里写代码片

这里写图片描述
这里写图片描述
这里写图片描述这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

引用块内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值