题解 | #自动售货系统#

自动售货系统

https://www.nowcoder.com/practice/cd82dc8a4727404ca5d32fcb487c50bf

import sys
商品表 = {'A1':[2,0],'A2':[3,0],'A3':[4,0],'A4':[5,0],'A5':[8,0],'A6':[6,0]}
存钱盒 = {10:0,5:0,2:0,1:0}
class 自动售货系统:
    def __init__(self):
        self.商品表={'A1':[2,0],'A2':[3,0],'A3':[4,0],'A4':[5,0],'A5':[8,0],'A6':[6,0]}
        self.存钱盒 = {10:0,5:0,2:0,1:0}
        self.投币金额 = 0
    def 系统初始化(self,numA1,numA2,numA3,numA4,numA5,numA6,num1,num2,num5,num10):
        try:
            self.商品表['A1'][1] = int(numA1)
            self.商品表['A2'][1] = int(numA2)
            self.商品表['A3'][1] = int(numA3)
            self.商品表['A4'][1] = int(numA4)
            self.商品表['A5'][1] = int(numA5)
            self.商品表['A6'][1] = int(numA6)
            self.存钱盒[10] = int(num10)
            self.存钱盒[5] = int(num5)
            self.存钱盒[2] = int(num2)
            self.存钱盒[1] = int(num1)
            return 'S001:Initialization is successful'
        except:
            return '初始化失败'
    def 投币(self,num):
        if num not in self.存钱盒:
            return 'E002:Denomination error'
        if num not in [1,2] and self.存钱盒[1]+self.存钱盒[2]*2 < num:
            return 'E003:Change is not enough, pay fail'
        if sum([int(i[1][1]) for i in self.商品表.items()]) == 0:
            return 'E005:All the goods sold out'
        else:
            self.投币金额 += num
            self.存钱盒[num] += 1
            return f'S002:Pay success,balance={self.投币金额}'
    def gobuy(self,name):
        if name not in self.商品表:
            return 'E006:Goods does not exist'
        if self.商品表[name][1] == 0:
            return 'E007:The goods sold out'
        if self.投币金额 < self.商品表[name][0]:
            return 'E008:Lack of balance'
        else:
            self.商品表[name][1] -= 1
            self.投币金额 -= self.商品表[name][0]
            return f'S003:Buy success,balance={self.投币金额}'
    def 退币(self):
        if self.投币金额 == 0:
            return 'E009:Work failure'
        else:
            num10,num5,num2,num1 = 0,0,0,0
            if self.投币金额 >= 10:
                num10 = self.投币金额//10
                if num10 >= self.存钱盒[10]:
                    num10 = self.存钱盒[10]
                self.投币金额 -= num10*10
            if self.投币金额 >= 5:
                num5 = self.投币金额//5
                if num5 >= self.存钱盒[5]:
                    num5 = self.存钱盒[5]
                self.投币金额 -= num5*5
            if self.投币金额 >= 2:
                num2 = self.投币金额//2
                if num2 >= self.存钱盒[2]:
                    num2 = self.存钱盒[2]
                self.投币金额 -= num2*2
            if num1 >= self.存钱盒[1]:
                num1 = self.存钱盒[1]
            else:
                num1 = self.投币金额
            self.存钱盒[1] -= num1
            self.存钱盒[2] -= num2
            self.存钱盒[5] -= num5
            self.存钱盒[10] -= num10
            self.投币金额 = 0
            return  (f'1 yuan coin number={num1}\n'
            + f'2 yuan coin number={num2}\n'
            + f'5 yuan coin number={num5}\n'
            + f'10 yuan coin number={num10}')
    def search(self,arg):
        if arg == '0':
            return (f'A1 2 {self.商品表["A1"][1]}\n'
            + f'A2 3 {self.商品表["A2"][1]}\n'
            + f'A3 4 {self.商品表["A3"][1]}\n'
            + f'A4 5 {self.商品表["A4"][1]}\n'
            + f'A5 8 {self.商品表["A5"][1]}\n'
            + f'A6 6 {self.商品表["A6"][1]}')
        elif arg == '1':
            return (f'1 yuan coin number = {self.存钱盒[1]}\n'
            + f'2 yuan coin number = {self.存钱盒[2]}\n'
            + f'5 yuan coin number = {self.存钱盒[5]}\n'
            + f'10 yuan coin number = {self.存钱盒[10]}')
        else:
            return 'E010:Parameter error'

A = 自动售货系统()
for line in sys.stdin:
    a = line.strip().split(";")
    for i in a[:-1]:
        if i[0] == 'r':
            list1 = i.split(" ")
            numA1,numA2,numA3,numA4,numA5,numA6 = list1[1].split("-")
            num1,num2,num5,num10 = list1[2].split("-")
            re = A.系统初始化(numA1,numA2,numA3,numA4,numA5,numA6,num1,num2,num5,num10)
            print(re)
        elif i[0] == 'c':
            print(A.退币())
        elif i[0] == 'q':
            list1 = i.split(" ")
            try:
                print(A.search(int(list1[1])))
            except:
                print('E010:Parameter error')
        elif i[0] == 'p':
            list1 = i.split(" ")
            print(A.投币(int(list1[1])))
        elif i[0] == 'b':
            list1 = i.split(" ")
            print(A.gobuy(list1[1]))




全部评论

相关推荐

阿里巴巴各部门年终奖开奖了,有人拿到了220w
真烦好烦真烦:拿命换钱呢,公司给你220万,肯定是因为你对公司的贡献大于220万,想想要多厉害多累才能达到
投递阿里巴巴集团等公司10个岗位 >
点赞 评论 收藏
分享
小浪_Coding:个人技能一条测试没有
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务