题解 | #自动售货系统# 完美解答

自动售货系统

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

遇到这种题优先定义变量,类似于建立数据库

name = ['A1', 'A2', 'A3', 'A4', 'A5', 'A6']
nameK = {'A1': 0, 'A2': 1, 'A3': 2, 'A4': 3, 'A5': 4, 'A6': 5}
price = [2, 3, 4, 5, 8, 6]
count = [0] * 6

money = [1, 2, 5, 10]
moneyK = {1: 0, 2: 1, 5: 2, 10: 3}
moneyC = [0] * 4

# 可用余额
amount = 0


# 初始化
def r(sl):
    global count, moneyC

    count = list(map(int,sl[0].split('-')))
    moneyC = list(map(int,sl[1].split('-')))

    print('S001:Initialization is successful')


# 投币
def p(sl):
    global amount, moneyC
    a = int(sl[0])

    if a not in money:
        print('E002:Denomination error')
        return

    if a not in money[:2] and money[0] * moneyC[0] + money[1] * moneyC[1] < a:
        print('E003:Change is not enough, pay fail')
        return

    if sum(count) == 0:
        print('E005:All the goods sold out')
        return

    amount += a
    moneyC[moneyK[a]] += 1

    print(f'S002:Pay success,balance={amount}')
    return


# 购买商品
def b(sl):
    global amount, count

    if sl[0] not in name:
        print('E006:Goods does not exist')
        return

    i = nameK[sl[0]]

    if count[i] == 0:
        print('E007:The goods sold out')
        return

    if amount < price[i]:
        print('E008:Lack of balance')
        return

    amount -= price[i]
    count[i] -= 1

    print(f'S003:Buy success,balance={amount}')
    return


# 退币
def c(sl):
    global amount, moneyC
    if amount == 0:
        print('E009:Work failure')
        return

    back = [0] * len(money)
    i = 3
    while i >= 0 and amount > 0:
        if money[i] > amount or moneyC[i] == 0:
            i -= 1
            continue

        amount -= money[i]
        moneyC[i] -= 1
        back[i] += 1

    if sum(back) ==0:
        print('E009:Work failure')
        return

    for j in range(len(money)):
        print(f'{money[j]} yuan coin number={back[j]}')

    return


# 查询
def q(sl):

    if len(sl) < 1 or sl[0] not in ['0', '1']:
        print('E010:Parameter error')
        return

    if sl[0] == '0':
        c = list(enumerate(count))[::-1]
        c_sort = sorted(c, key=lambda x: x[1], reverse=True)
        for i, j in c_sort:
            print(f'{name[i]} {price[i]} {count[i]}')

    else:
        for i in range(len(money)):
            print(f'{money[i]} yuan coin number={moneyC[i]}')
        return


try:
    while True:
        st = [s.split() for s in input().split(';') if s]

        for s in st:
            if len(s) > 0 and s[0] in globals():
                globals()[s[0]](s[1:])
            else:
                print('E010:Parameter error')

except:
    pass

全部评论

相关推荐

07-03 11:02
中山大学 C++
字节刚oc,但距离九月秋招很近了有两段互联网实习,非腾讯字节。不敢赌转正,现在在纠结去还是不去如果实习俩月离职会有什么后果吗
阿城我会做到的:不去后悔一辈子,能否转正取决于ld的态度,只要他不卡,答辩就是走流程,个人觉得可以冲一把
投递字节跳动等公司9个岗位
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
06-30 18:19
点赞 评论 收藏
分享
点赞 评论 收藏
分享
吴offer选手:HR:我KPI到手了就行,合不合适关我什么事
点赞 评论 收藏
分享
找个工作&nbsp;学历是要卡的&nbsp;要求是高的&nbsp;技能不足是真的&nbsp;实习经验是0的&nbsp;简历无处可写是事实的&nbsp;钱不好赚是真的&nbsp;想躺平又不敢躺&nbsp;也不甘心躺&nbsp;怕自己的灵感和才华被掩埋甚至从未被自己发现&nbsp;又质疑自己是否真正有才华
码农索隆:你现在啊,你心里都明白咋回事,但是你没办法改变现状,一想到未来,你又没有信心狠下心来在当下努力。 得走出这种状态,不能一直困在那里面,哪不行就去提升哪,你一动不动那指定改变不了未来,动起来,积少成多才能越来越好
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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