题解 | #自动售货系统#
自动售货系统
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]))