一、流程设计
二、代码设计
#coding:utf-8 money = 0 coinChoice = [1,5,10,20,50,100] print u'请注意只接受1,5,10,20,50,100的面值!' #drinking chose drinklist = {'milk':4,'cola':5,'juice':7,'xuebi':6} drinkNum = 0 for key,value in drinklist.items(): drinkNum += 1 print u'饮料编号:%d,饮料名称:%s,单价:%s元'%(drinkNum,key,value) def putCoin(): while True: coin = input(u'请输入投币金额(按q退出):'.encode('gbk')) #print type(coin) #<type 'int'> global money if coin == 'q': print u'投币结束,余额%d元'%money break else: if coin not in coinChoice: print u'请注意只接受1,5,10,20,50,100的面值!' continue money += coin print u'您本次成功投币%d元,余额%d元'%(coin,money) return money #buy drinking trans = True while trans: if money == 0: print u'您的余额为零,请投币' putCoin() else: drinkCode = input(u'请输入想买的饮料编号(按q退出):'.encode('gbk')) if drinkCode == 'q': print u'购买饮料结束,找零%d元'%money break else: if drinkCode in range(1,len(drinklist)+1): num = 0 for k,v in drinklist.items(): num += 1 if drinkCode == num: print 'drinking name:',k print 'price:',v if money >= v: money -= v #charge if money > 0: print u'您购买的饮料%s花费%s元,按q退出找零%d元,欢迎下次光临!'%(k,v,money) else: print u'您的余额正好用完,欢迎下次光临!' trans = False else: print u'抱歉,您的余额不足,请重新开始投币!' putCoin() else: print u'您输入的饮料编号不存在,请重新输入!' continue
三、测试用例执行
1.投币,正常购买,退出找零
2.投币,未购买饮料,退出找零
3.余额不足,投币,未购买饮料,退出找零
4.余额不足,投币,购买饮料,退出找零
5.余额不足,不投币,重新选择购买饮料,余额正好用完
6.投币金额、饮料编号不合法
四、其他
显然,现实中饮料机还要考虑库存够不够,零钱够不够等问题,市面上的自助饮料机大都是每件商品都有唯一的id,用户输入id购买,基本不存在投币后库存不足的情况,所以需要给每件商品贴上唯一的饮料编号;零钱呢,我想1元多多益善就可以了吧。