• 初学 python 之 多级菜单实现原理


    要求实现多级菜单:1,实现4级菜单

                            2,每一级都可以选择进入下一级或者返回上一级,或者退出

    所需知识:

    一,字典 

    字典可以嵌套字典,也可以嵌套列表

    1 >>> data = {'name' : {'a': [1,2,3]},
    2          'age' : [11,33,36],
    3          'hob' : 'body-building'
    4     }
    5 >>> print(data)
    6 {'name': {'a': [1, 2, 3]}, 'age': [11, 33, 36], 'hob': 'body-building'}

    查找

    1 ...
    2 >>> 'name' in data   #标准用法
    3 True
    4 >>> data.get('name')   # 获取
    5 {'a': [1, 2, 3]}
    6 >>> data['name'] # 同上,如果一个key不存在,就报错,get不会,不存在只返回None
    7 {'a': [1, 2, 3]}
    8 >>>

    二, while loop

         在多层循环中给break,continue无法满足需求时,设置一个标签来控制结束循环.

    1 count = 0
    2 exit_flag = False
    3 while not exit_flag:
    4     print("你是风儿我是沙,缠缠绵绵到天涯...", count)
    5     count += 1
    6     if count == 5:
    7         print("去你妈的风和沙,你们这些脱了裤子是人,穿上裤子是鬼的臭男人..")
    8         exit_flag = True

    三, eval 用法

        eval这一内置函数,可以把字符串当作可执行代码

     把{'a':'1','b':'2'}直接保存成txt文件,用eval直接转成代码

     1 >>> open('file1','w').write("{'a':'1','b':'2'}")
     2 17
     3 >>> f = open('file1','r')
     4 >>> data = f.readline()    #读取file1把值赋给data
     5 >>> print(data)
     6 {'a':'1','b':'2'}
     7 >>> dict = eval(data)         # 把data转成代码
     8 >>> print(dict.keys())
     9 dict_keys(['a', 'b'])
    10 >>> type(data)             #data 是字符串
    11 <class 'str'>
    12 >>> type(dict)               #dict 是字典
    13 <class 'dict'>
    14 >>> 

    优化方向:

    1.在保证程序功能的前提下,增加重复代码的重用,减少代码量

    代码

     1 f = open('menu', 'r', encoding='utf-8')
     2 data = eval(f.readline())
     3 
     4 def menu1():          #  定义打印目录1函数
     5     for i in data:
     6         print(i)
     7 def menu2(x):          #  定义打印目录2函数
     8     for i in data[x]:
     9         print('	', i)
    10 def menu3(x,y):          #  定义打印目录3函数
    11     for i in data[x][y]:
    12         print('		', i)
    13 
    14 while True:
    15     exit_flag = False           
    16     # 设置标签,用于最后一层直接跳到顶层,(必须在循环里面进行重置,不然无法进入下一层循环)
    17     menu1()             # 打印第一层目录
    18     choice = input('请选择目录进入,退出请按q>>')
    19     while not exit_flag:
    20         if choice in data:
    21             menu2(choice)    # 打印第二层目录
    22             choice2 = input('请选择录进入,返回上面请按b,退出请按q>>')
    23             if choice2 in data[choice]:
    24                 while not exit_flag:
    25                     menu3(choice, choice2)  # 打印第三层目录
    26                     choice3 = input('返回上面请按b,退回顶层请按t,退出请按q>>')
    27                     if choice3 == 'b':
    28                         break                        # 跳出本层至上一层
    29                     elif choice3 == 't':
    30                         exit_flag = True             # 改变标签,跳至顶层
    31                     elif choice3 == 'q':
    32                         print("谢谢使用,再见!")
    33                         exit()                       # 直接退出程序
    34                     else:
    35                         print('选择错误!')
    36                         continue
    37                         # 输入错误时,提醒然后重新输入(本层循环打印目录三),不能用break跳出
    38             elif choice2 == 'b':
    39                 break                     # 跳出本层至上一层
    40             elif choice2 == 'q':
    41                 print("谢谢使用,再见!")
    42                 exit()                     # 直接退出程序
    43             else:
    44                 print('选择错误!')
    45                 continue
    46                 # 输入错误时,提醒然后重新输入(本层循环打印目录二),不能用break跳出
    47         elif choice == 'q':
    48             print("谢谢使用,再见!")
    49             exit()                          # 直接退出程序
    50         else:
    51             print('选择错误!')
    52             break                       # 和第一层循环用while True 关系,这里需要跳出循环 否则死循环
    View Code

        

  • 相关阅读:
    Object中的线程等待和Condition
    synchronized锁和Lock锁
    手写二叉排序树(二叉查找树、二叉搜索树)
    JDK源码之ArrayList-Iterator
    JDK源码之ArrayList
    Integer&int,自动装箱&自动拆箱
    学习Zookeeper第一课
    Thumbnailator处理图片
    线程的停止和中断
    BigInteger和BigDecimal
  • 原文地址:https://www.cnblogs.com/JayeHe/p/6485262.html
Copyright © 2020-2023  润新知