题解 | #自动售货系统#

自动售货系统

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))

全部评论

相关推荐

秒拒也太伤人心了
码农索隆:非得字节嘛
投递字节跳动等公司8个岗位
点赞 评论 收藏
分享
05-26 10:24
门头沟学院 Java
qq乃乃好喝到咩噗茶:其实是对的,线上面试容易被人当野怪刷了
找工作时遇到的神仙HR
点赞 评论 收藏
分享
Gaynes:查看图片
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务