python点菜小程序

class Order:
    #桌号
    def __init__(self,num):
        self.num=num
 
    order_menu={}  #已点过的菜品及数量
    menu={'辣子鸡':39,'红烧肉':49,'麻婆豆腐':19,'酸菜鱼':59,'水煮肉片':56,'米饭':2,'鸡蛋汤':9}  #菜品及其价格
    Price=0  #总价格
    
    #主菜单
    def main_menu(self):
        choose=input("1、点(加)菜\n2、退菜\n3、查看菜单\n4、退出\n您需要输入数字{1,2,3,4}中的一个来选择服务类型:")
        if choose not in {'1','2','3','4'}:
            print("输入有误,重新输入")
            self.main_menu()
        else:
            if choose=='1':
                self.order()  #点(加)菜
                self.main_menu()
            elif choose=='2':
                self.menu_back()   #退菜
                self.main_menu()
            elif choose=='3':
                self.menu_check()  #查看已点菜品
                self.main_menu()
            elif choose=='4':
                print("您已退出")  #退出系统
 
 
    #菜单
    def menu_check(self):
        print("***************")
        print("*您的桌号:"+str(self.num)+'号*')
        print("***************")
        if not self.order_menu:
            print("客官您还没点餐哦")
        else:
            print("您的菜单:\n---------------")
            for key,value in self.order_menu.items():
                print(key+str(":")+str(value)+str("份"))
            print("---------------\n总价:¥"+str(self.Price))
            print("---------------")
        
 
    #确认选项和处理用户错误输入
    #f=0表示点菜后是否继续点菜确认,f=1表示用户点菜时错误输入,f=2表示用户退菜时错误输入
    def confirm_order(self,f):
        if f==0:
            confirm=input("您是否还需要继续点菜(是:y 否:n):")
        elif f==1:
            print("抱歉,客官!!!您点的菜我们没有,请您检查后重新点菜")
            confirm=input("您是否还需要继续点菜(是:y 否:n):")
        elif f==2:
            print("您输入的退菜信息有误,请您检查后重新退菜")
            confirm=input("您是否还需要继续退菜(是:y 否:n):")
        if confirm not in {'y','n'}:
            print("客官输入有误,请在y和n中选择一项输入")
            confirm=self.confirm_order(1)
        else:
            if confirm=='y' and f in {0,1}:
                self.order()
            elif confirm=='y' and f==2:
                self.menu_back()
            else:
                print("您已退出退菜")
 
 
    #点菜功能,用户可选择菜品及数量,给出点餐总额
    def order(self):
        print('我们的菜单:')
        for key,value in self.menu.items():
            print(key+str(":¥")+str(value))
        order_dish=input('请您点餐:')
        if order_dish not in self.menu.keys():
            self.confirm_order(1)
        else:
            if order_dish in self.order_menu:
                dish_num=input("客官,您需要再加几份"+order_dish+":")
                if not dish_num.isdigit():
                    self.confirm_order(2)
                else:
                    self.Price+=int(dish_num)*self.menu[order_dish]
                    self.order_menu.update({order_dish:self.order_menu[order_dish]+int(dish_num)})
            else:
                dish_num=input("客官,您需要几份"+order_dish+":")
                if not dish_num.isdigit():
                    self.confirm_order(2)
                else:
                    self.Price+=int(dish_num)*self.menu[order_dish]
                    self.order_menu.update({order_dish:int(dish_num)})
            self.confirm_order(0)
 
 
    #退菜
    def menu_back(self):
        back_dish=input('您要退的菜品:')
        if back_dish not in self.menu.keys():
            self.confirm_order(2)
        elif back_dish not in self.order_menu:
            print("您还未点该菜品")
            self.menu_check()
        else:
            dish_num=input('您要退掉几份'+back_dish+'(all表示全部):')
            if dish_num=='all':
                self.Price-=self.order_menu[back_dish]*self.menu[back_dish]
                self.order_menu.pop(back_dish)
            elif not dish_num.isdigit() or int(dish_num)>self.order_menu[back_dish]:
                print('您输入的退菜数量有误')
                self.confirm_order(2)
            else:
                self.Price-=int(dish_num)*self.menu[back_dish]
                self.order_menu.update({back_dish:self.order_menu[back_dish]-int(dish_num)})
            print('已为您退掉'+back_dish)
 
#选座函数
def NO():
    print('我们的桌号0-10,请输入0-10之间的数字')
    num=input('请您落座:')
    if not num.isdigit() or int(num)>10 or int(num)<0:
        print('没有该桌号,请检查后落座')
        NO()
    else:
        return num
 
num=NO()
Order(num).main_menu()  #用户进入程序点餐
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值