zoukankan      html  css  js  c++  java
  • python第四天 三级菜单新思路

    今天是一个坎,在做三级菜单时卡住了,因为想要简洁的代码,就要用到递归函数,卡的不要不要的!不过最后在同学老师的提点帮助下,还是解决了!

    2017-5-10发现之前的代码有BUG今天 修改了!

    作业要求:

    三级菜单:
    1. 运行程序输出第一级菜单
    2. 选择一级菜单某项,输出二级菜单,同理输出三级菜单
    3. 菜单数据保存在文件中

    文件操作还没有学到,暂时做到1,2两点,第3点明后天补上!

    照旧,先上一下流程图:

    详细代码: 

     1 #!usr/bin/env python
     2 #-*-coding:utf-8-*-
     3 # Author calmyan
     4 menu_file=open("menu.txt",'r',encoding='utf-8')#打开菜单文件
     5 info=eval(menu_file.readline())#转换菜单文件中的字符串
     6 global conut,_tab,exit_flag
     7 
     8 _tab='		'
     9 
    10 exit_flag = True
    11 def menu_open(info):#递归函数 传入下一层菜单
    12     global exit_flag,conut#声明全局变量
    13     exit_flag=True#先为真
    14     while exit_flag:
    15         conut+=1
    16         _tab2=_tab.expandtabs(tabsize=(conut*3))#为了增加菜单的可读性,按层级来加tab键
    17         for i in info:
    18             print(_tab2,i)
    19         if conut==4:
    20             name=input("当前为第33[35;1m%s33[0m是最后一层 按B/b返回<<<  按Q/q退出:"%conut)
    21             name=name.strip()
    22             if name=='b' or name=='B':
    23                 conut-=2#因数进行循环就加一,所以需要减2
    24                 break
    25             elif name=='Q' or name=='q':
    26                 print("你已经退出菜单!")
    27                 exit_flag=False
    28                 break
    29             else:
    30                 conut-=1
    31                 print("你输入的目录不存在!")
    32                 continue
    33         if conut<4:#判断菜单层级不是最底层加一
    34             name=input("当前为第 33[32;1m%s33[0m 层,请输入名称进入下一层>>> 按B/b返回<<<  按Q/q退出:"% conut)
    35             name=name.strip()
    36             if name=='b' or name=='B':
    37                 conut-=2#因数进行循环就加一,所以需要减2
    38                 break
    39             elif name=='Q' or name=='q':
    40                 print("你已经退出菜单!")
    41                 exit_flag=False
    42                 break
    43             elif name in info:#如果存在并不是最后一层则调用函数
    44                 menu_open(info[name])
    45             else:
    46                 conut-=1
    47                 print("你输入的目录不存在!")
    48                 continue
    49 
    50 while exit_flag:
    51     for  i in info:
    52         print(i)
    53     conut=1
    54     name=input("当前为第33[32;1m %s33[0m 层,请输入名称进入下一层>>>  按Q/q退出:"%conut)
    55     name=name.strip()
    56     if name=='Q' or name=='q':
    57         print("你已经退出菜单!")
    58         exit_flag=False
    59     elif name in info:
    60 
    61         menu_open(info[name])
    62     else:
    63         print("你输入的目录不存在!")
    64         continue
    View Code

    菜单内容比较少,将就着吧,回头有空再让它丰满起来!

     1 #以下代码复制到python(3.6.2rc2)下 按F5 可以正常执行,对比学习。#QQ:124111294欢迎交流py
     2 #三级菜单
     3 menu = {
     4     '北京':{
     5         '海淀':{
     6             '五道口':{
     7                 'soho':{},
     8                 '网易':{},
     9                 'google':{}
    10             },
    11             '中关村':{
    12                 '爱奇艺':{},
    13                 '汽车之家':{},
    14                 'youku':{},
    15             },
    16             '上地':{
    17                 '百度':{},
    18             },
    19         },
    20         '昌平':{
    21             '沙河':{
    22                 '老男孩':{},
    23                 '北航':{},
    24             },
    25             '天通苑':{},
    26             '回龙观':{},
    27         },
    28         '朝阳':{},
    29         '东城':{},
    30     },
    31     '上海':{
    32         '闵行':{
    33             "人民广场":{
    34                 '炸鸡店':{}
    35             }
    36         },
    37         '闸北':{
    38             '火车战':{
    39                 '携程':{}
    40             }
    41         },
    42         '浦东':{},
    43     },
    44     '山东':{},
    45 }
    46 
    47 # while not  exit_flag    <如果条件为假执行循环>
    48 # for k in current_layer  <条件循环>
    49 #        print(k)        <打印>
    50 # input<输入>
    51 # .strip()#strip([chars]) <删除字符串前边和后边所有的空格,chars参数可以指定删除的字符,可选>
    52 # if <条件判断>
    53 # layers.pop()  <删除>
    54 # elif choice not  in  <条件判断>
    55 # continue <跳出本次循环,重新循环>
    56 # else <否则,当if条件不成立时执行>
    57 # .append<附加>
    58 # choice<选择>
    59 
    60 exit_flag = False
    61 current_layer = menu
    62 
    63 layers = [menu]
    64 
    65 while not  exit_flag:
    66     for k in current_layer:
    67         print(k)
    68     choice = input(">>:").strip()
    69     if choice == "b":
    70         current_layer = layers[-1]
    71         #print("change to laster", current_layer)
    72         layers.pop()
    73     elif choice not  in current_layer:continue
    74     else:
    75         layers.append(current_layer)
    76         current_layer = current_layer[choice]
    77 
    78 #以下代码复制到python(3.6.2rc2)下 按F5 可以正常执行,对比学习。QQ:124111294欢迎交流py
    三级菜单新思路

    您的资助是我最大的动力!
    金额随意,欢迎来赏!

    如果,您认为阅读这篇博客让您有些收获,不妨点击一下右下角的推荐按钮。
    如果,您希望更容易地发现我的新博客,不妨点击一下绿色通道的关注我

    如果,想给予我更多的鼓励,求打

    因为,我的写作热情也离不开您的肯定支持,感谢您的阅读,我是【莫柔落切】!

    联系或打赏博主【莫柔落切】!https://home.cnblogs.com/u/uge3/

  • 相关阅读:
    jmeter压测学习8-压测带token的接口
    jmeter压测学习7-登录参数化(CSV 数据文件设置)
    jmeter压测学习6-HTTP Cookie管理器
    jmeter压测学习5-XPath提取器
    jmeter压测学习4-正则表达式提取
    jmeter压测学习3-提取json数据里面的token参数关联
    docker学习11-上传本地镜像到镜像仓库
    docker学习10-注册docker hub账号
    python测试开发django-73.django视图 CBV 和 FBV
    The user operation is waiting for "Building workspace" to complete
  • 原文地址:https://www.cnblogs.com/uge3/p/6816485.html
Copyright © 2011-2022 走看看