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

