题解 | #自动售货系统#
自动售货系统
https://www.nowcoder.com/practice/cd82dc8a4727404ca5d32fcb487c50bf
面向对象很优雅!
from re import M import sys commands = input().split(';')[:-1] class VendeMachine(): def __init__(self, r): r = r.split(' ') GoodsSelves = r[1].split('-') self.Goods = [f'A{i+1}' for i in range(6)] self.GoodsSelves = {f'A{i+1}':int(GoodsSelves[i]) for i in range(len(GoodsSelves))} GoodsPrices = [2,3,4,5,8,6] self.GoodsPrices = {f'A{i+1}':GoodsPrices[i] for i in range(len(GoodsPrices))} MoneyBox = r[2].split('-') self.Money = [1,2,5,10] self.MoneyBox = {self.Money[i]:int(MoneyBox[i]) for i in range(len(self.Money))} self.CoinBalance = 0 def q0(self): sort_index = [] for i in range(len(self.GoodsSelves)): max_value = -1 max_index = None for good in set(self.GoodsSelves.keys()) - set(sort_index): if self.GoodsSelves[good] > max_value: max_value = self.GoodsSelves[good] max_index = good sort_index.append(max_index) return '\n'.join([f'{good} {self.GoodsPrices[good]} {self.GoodsSelves[good]}' for good in sort_index]) def q1(self): return '\n'.join([f'{money} yuan coin number={self.MoneyBox[money]}' for money in self.MoneyBox]) def q(self,command): try: if command[2] == '0': return self.q0() if command[2] == '1': return self.q1() return 'E010:Parameter error' except: return 'E010:Parameter error' def c(self): if self.CoinBalance == 0: return 'E009:Work failure' CoinReturn = {self.Money[i]:0 for i in range(len(self.Money))} for i in range(len(self.Money)): money = self.Money[-i-1] single_money_return = self.CoinBalance // money if single_money_return <= self.MoneyBox[money]: self.CoinBalance -= single_money_return*money self.MoneyBox[money] -= single_money_return CoinReturn[money] = single_money_return self.CoinBalance = 0 return '\n'.join([f'{money} yuan coin number={CoinReturn[money]}' for money in CoinReturn]) def b(self, command): good = command.split(' ')[1] if good not in self.Goods: return 'E006:Goods does not exist' if self.GoodsSelves[good] == 0: return 'E007:The goods sold out' if self.CoinBalance < self.GoodsPrices[good]: return 'E008:Lack of balance' self.CoinBalance -= self.GoodsPrices[good] self.GoodsSelves[good] -= 1 return f'S003:Buy success,balance={self.CoinBalance}' def p(self, command): money = int(command.split(' ')[1]) if money not in self.Money: return 'E002:Denomination error' if money not in [1,2] and money > self.MoneyBox[1]+2*self.MoneyBox[2]: return 'E003:Change is not enough, pay fail' if self.is_SoldOut(): return 'E005:All the goods sold out' self.MoneyBox[money] += 1 self.CoinBalance += money return f'S002:Pay success,balance={self.CoinBalance}' def is_SoldOut(self): for key in self.GoodsSelves: if self.GoodsSelves[key]: return False return True def r(self, command): command = command.split(' ') GoodsSelves = command[1].split('-') self.GoodsSelves = {f'A{i+1}':int(GoodsSelves[i]) for i in range(len(GoodsSelves))} MoneyBox = command[2].split('-') self.MoneyBox = {self.Money[i]:int(MoneyBox[i]) for i in range(len(self.Money))} return 'S001:Initialization is successful' vendemachine = VendeMachine(commands[0]) print('S001:Initialization is successful') for command in commands[1:]: if command[0] == 'r': print(vendemachine.r(command=command)) if command[0] == 'p': print(vendemachine.p(command=command)) if command[0] == 'b': print(vendemachine.b(command=command)) if command[0] == 'c': print(vendemachine.c()) if command[0] == 'q': print(vendemachine.q(command=command))