基地123 2023-05-09 22:58 采纳率: 90.2%
浏览 33
已结题

python每日一问

families,谁懂啊,看起来没问题的代码,但是为啥运行不出来,主要是测试的时候感觉有些代码块没运行,尤其是break和continue语句


```python


#点餐小程序
ordered_meanu=dict()#记录已经点过的菜品及数量
meanu={'地道雪花鱼':68,'宣威小炒肉':28,'滇西小炒鸡':46,'杨林酸菜鱼':68,'鸡汁豆腐花':22,'丽江紫洋芋':18,'白芸豆火腿':58,'菜包肉':15,'野生菌':53,'玉米汁':23,'米饭':10}
price=0#总计
#点菜
def order():
        a=input('请选择进入点菜或加菜(按1)或者退出点菜界面(按2):')
        while True:
                
                if a==1:#进入点菜
                        key=input("请点菜:")
                        val=int(input('请选择份数:'))
                        if key not in ordered_meanu.keys():#初次点菜
                                if key not in meanu:
                                        print('本店没有这个菜品,请看看其他菜')#对于客户输入错误提醒
                                else:
                                        ordered_meanu[key]=val
                        else:                           #加菜
                                ordered_meanu[key]+=val
                elif a==2:                  #退出点菜
                        break
        return 0

#退菜
def cancel_order():
        a=int(input('请选择退菜(按1)或者退出退菜界面(按2):'))
        while True:
                
                if a==1:           #进入退菜
                        key=input('客官您要退的菜品:')
                        val=int(input('要退几份:'))
                        if key not in ordered_meanu.keys():
                                print('客官您还没有点过此菜')
                        else:                           #退菜
                                ordered_meanu[key]-=val
                                if ordered_meanu[key]==0:    #菜全退完从点单中除去
                                        del ordered_meanu[key]
                elif a==2:      #结束退菜
                        break
                a=int(input('请选择退菜(按1)或者退出退菜界面(按2):'))
        return 0

#查看已点菜单
def check():
        print('客官以下是您点的菜以及总计:')
        global price
        for key in ordered_meanu.keys():
                print(key+':'+string(ordered_meanu[key]))
                price+=ordered_meanu[key]*meanu[key]#计算总和
                print('共计'+':',price)

#后台厨师看到的餐桌以及菜单
def show(number):
        num=number
        print('桌号:',num)
        for key in ordered_meanu.keys():
                print(key+':'+string(ordered_meanu[key]))
        return 0

stri='''------------------------------
【欢迎光临本店点餐小程序】
请选择您需要的服务:
1、点餐
2、退菜
3、查看菜单
4、退出
---------------------------
在此之前请选择您的座位号'''
print(stri)
num=input('请输入座位号:')
a=int(input('请输入选项:'))
while True:
        
        if a==1:
                order()
                continue
        
        elif a==2:
                cancel_order()
                continue
        
        elif a==3:
                check()
                continue
        elif a==4:
                exit()
        a=int(input('请输入选项:'))
                
show(num)          
      
        
        

        
        

                
                        
                        
        
        
        

```

  • 写回答

2条回答 默认 最新

  • 梦幻精灵_cq 2023-05-10 00:00
    关注

    • “点餐小程序”主界面

      img

      我重新调整了显示界面,把餐馆的菜品供应列表存入磁盘文本,启动“小程序”时计入内存生成 cuisine_dict ,重新设计了已点餐字典 ordered_dict ,以餐台号 table_num 为 key ,value 为 (cuisine, number) 元素的列表,只记录菜名和份数,单价从“供应菜品”字典 cuisine_dict 读取。循环点餐,只输入菜名序号,一份直接回车。大大方便点餐了输入。

    • 餐馆供应菜品列表文本文件

      img

    • 读取代码

    # 全局变量
    mypath = r'/sdcard/Documents/'
    ordered_dict = dict() # 记录已经点过的菜品及数量字典初值——空字典。
    cuisine_dict = {i[0]: int(i[1]) for i in (i.split('\\') for i in open(f"{mypath}cuisine_list.txt").read().split('\n')[1:])} # 解析式生成供应菜品字典。(从磁盘文本读取菜品供应列表,格式为生成器——解析式用小括号包裹。)
    #input(cuisine_dict) # 调试用语句。
    clear = '\033[2J' # 清屏字符串。
    error_tip = f"\n{' 输入错误!':^45}\n" #  输入错误提示信息字符串。
    
    • 点餐小程序,代码运行效果截屏图片

      img


      img


      img


      img



    0、 input() 获取的是字符段,而您 if 条件判断却用的是整型 if a == 1 。这是导致您的菜单选择不起作用的直接原因。
    1、退出模块函数,用 return ,break 是退出循环。
    2、Python 默认4个英文空格缩进,您有8个,缩进太深。
    3、点餐时没有菜品清单列印,怎么选?
    4、餐馆餐台,得给设定个范围吧
    5、最好把主程序也设计成模块,看着更好

    我明天抽时间给您调试一下……


      我给加了个菜品列表显示。要是把点菜设计成只输入菜名列表序号,点餐更方便。餐台号,得给定范围才好。


    
    #!/sur/bin/nve python
    # coding: utf-8
    
    '''
    
    点餐小程序
    
    '''
    
    
    ordered_meanu = dict() # 记录已经点过的菜品及数量
    meanu = {'地道雪花鱼':68,'宣威小炒肉':28,'滇西小炒鸡':46,'杨林酸菜鱼':68,'鸡汁豆腐花':22,'丽江紫洋芋':18,'白芸豆火腿':58,'菜包肉':15,'野生菌':53,'玉米汁':23,'米饭':10}
    
    
    def show_meanu(meanu):
        ''' 菜单列印 '''
        print(f"\n{' 本店特供菜品 ':~^44}\n")
        
        for key, value in meanu.items():
            print(f"{'¥':>12}{value:.2f} {'_'*6} {key}")
    
        print(f"\n{'~'*50}\n")
    
    
    def order():
            ''' 点菜 '''
            
            a = input(f"{'1、点菜或加菜  2、退出点菜界面':^37}\n{'~'*50}\n{'请选择:':>18}")
            while True:
                    show_meanu(meanu)
                    if a=='1':#进入点菜
                            key=input("请点菜:")
                            if not key:
    
                                if not ordered_meanu:
                                    print(f"\n{' 您还没有点菜呢!':^42}")
                                else:
                                    break # 退出点菜循环。
    
                            val=int(input('请选择份数:'))
    
                            if key not in meanu:
                                    print('本店没有这个菜品,请看看其他菜')#对于客户输入错误提醒
    
                            else:                           #加菜
                                    ordered_meanu[key] = ordered_meanu.get(key, 0) + val # 新点或加菜数量累加,get(key) 值为 None 时,令其为 0 ,换句话说就是 key 不在字典中,加入 key 并令其值为 0 。
                    elif a=='2':                  #退出点菜
                            check()
                            return # 退出此模块不可以用 break,这是退出循环。
                    else:
                            print(f"\n{' 选择错误!':^45}")
                            return 
    
            # return 0 # python 函数可以不写返回语句,默认返回 None。
    
    
    
    
    def cancel_order():
            ''' 退菜 '''
            while True:
                    check()
                    a=int(input('请选择退菜(按1)或者退出退菜界面(按2):'))
    
                    if a==1:           #进入退菜
                            key=input('客官您要退的菜品:')
                            val=int(input('要退几份:'))
                            
                            if key not in ordered_meanu.keys():
                                    print('客官您还没有点过此菜')
                            else:                           #退菜
                                    ordered_meanu[key]-=val
                                    if ordered_meanu[key]==0:    #菜全退完从点单中除去
                                            del ordered_meanu[key]
    
                    elif a==2:      #结束退菜
                            return 
                    else:
                            print(f"\n{' 选择错误!':^45}")                    
    
            #return 0 # 对于 Python 函数无需返回值时,此句可以不写,函数默认返回空值 None 。
    
    
    def check():
            ''' 查看已点菜单 '''
            price=0 # 总计初值。
            print('\n客官以下是您点的菜以及总计:')
    
            for key in ordered_meanu.keys():
                    #print(key+':'+string(ordered_meanu[key])) # 转字符型函数是 str 。
                    print(key+':'+str(ordered_meanu[key])) # 转字符型函数是 str 。
    
                    price+=ordered_meanu[key]*meanu[key]#计算总和
                    print('共计'+':',price)
    
    
    def show(number):
            ''' 后台厨师看到的餐桌以及菜单 '''
            num=number
            print('桌号:',num)
            for key in ordered_meanu.keys():
                    print(key+':'+string(ordered_meanu[key]))
            return 0
    
    
    
    '''if __name__ == '__main__':
        show_meanu(meanu)
        order()
    
    input(55555) # 程序暂停。'''
    
    
    
    stri='''------------------------------
    【欢迎光临本店点餐小程序】
    请选择您需要的服务:
    1、点餐
    2、退菜
    3、查看菜单
    4、退出
    ---------------------------
    在此之前请选择您的座位号''
    
    num=input('\n请输入座位号:')
    
    while True:
            print(stri)
            a = input('请输入选项:')
            if a=='1':
                    order()
            elif a=='2':
                    cancel_order()
            elif a=='3':
                    check()
            elif a=='4':
                    exit()
            else:
                    print(f"\n{' 选择错误!':^45}")
              
    show(num)       
                       
    
    
    • 代码运行效果截屏图片

      img


    我曾经的学习笔记——
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 5月23日
  • 已采纳回答 5月15日
  • 创建了问题 5月9日

悬赏问题

  • ¥15 Redstone R0697-F00 D2020 交换机 OS
  • ¥50 H5+js 动态数字画廊怎么做?
  • ¥20 外向内全景图像拼接相关项目和论文咨询
  • ¥20 请写个前端案例学习使用
  • ¥15 FFmpeg中G.711转AAC报错:[aac @ 0000014f803ab640] Input contains (near) NaN/+-Inf
  • ¥15 关于#python#的问题,请各位专家解答!
  • ¥20 笔记本电脑 处理器是AMD的r7
  • ¥15 需要在vitis下实现彩调视频图像累加,并输出
  • ¥15 解决不了的LNK2019错误
  • ¥20 MATLAB仿真三相桥式全控整流电路