zoukankan      html  css  js  c++  java
  • Python开发【程序】:三级菜单程序

    # 需求:
    # 可依次选择进入各子菜单
    # 可从任意一层往回退到上一层
    # 可从任意一层退出程序
    # 所需新知识点:列表、字典数据结构:

    一.low版:

      1 #思路:
      2 #使用列表来存放字典的每一层数据,根据索引来选择
      3 #后退到上一层可以通过一个while True 循环来控制,break跳出后退
      4 
      5 menu = {
      6     '北京':{
      7         '海淀':{
      8             '五道口':{
      9                 'soho':{},
     10                 '网易':{},
     11                 'google':{}
     12             },
     13             '中关村':{
     14                 '爱奇艺':{},
     15                 '汽车之家':{},
     16                 'youku':{},
     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 }
     48 
     49 province_list = list(menu.keys())   #省名称列表
     50 
     51 while True:
     52     print("".center(24,'*'))
     53     for i in province_list:
     54         print(province_list.index(i)+1,i)   #打印出各个省
     55     province_choice = input("请输入您所需要选择的省的编号,或者退出(q):")
     56     if province_choice.isdigit():    #判断是否为数字
     57         province_choice = int(province_choice)   #强制转换为数字
     58         if province_choice > 0 and province_choice <= len(province_list):  #判断输入的数值是否正确
     59             province_name = province_list[province_choice-1]   #取出选择的省的名称
     60             city_list = list(menu[province_name].keys())  #市名称列表
     61             while True:
     62                 print("".center(24,'*'))
     63                 for j in city_list:
     64                     print(city_list.index(j)+1,j)
     65                 city_choice = input("请输入您所选择的市的编号,返回(r),或者退出(q):")
     66                 if city_choice.isdigit():
     67                     city_choice = int(city_choice)
     68                     if city_choice > 0 and city_choice <= len(city_list):
     69                         city_name = city_list[city_choice-1]
     70                         country_list = list(menu[province_name][city_name].keys())
     71                         while True:
     72                             print("".center(24,'*'))
     73                             for k in country_list:
     74                                 print(country_list.index(k)+1,k)
     75                             country_choice = input("请输入您所选择的县的编号,返回(r),退出(q):")
     76                             if country_choice.isdigit():
     77                                 country_choice = int(country_choice)
     78                                 if country_choice > 0 and country_choice <= len(country_list):
     79                                     country_name = country_list[country_choice-1]
     80                                     company_list = list(menu[province_name][city_name][country_name].keys())
     81                                     while True:
     82                                         print("公司".center(24,'*'))
     83                                         for l in company_list:
     84                                             print(company_list.index(l)+1,l)
     85                                         company_choice = input("返回(r),退出(q):")
     86                                         if  company_choice == 'r':
     87                                             break
     88                                         elif company_choice == 'q':
     89                                             exit()
     90                                         else:
     91                                             print("您的输入%s有误!" % (company_choice))
     92                                 else:
     93                                     print("输入编号%s超限!" % (country_choice))
     94                             elif country_choice == 'r':
     95                                 break
     96                             elif country_choice == 'q':
     97                                 exit()
     98                             else:
     99                                 print("您的输入%有误!" % (country_choice))
    100                     else:
    101                         print("您输入的编号%s超限!" % (city_choice))
    102                 elif city_choice == 'r':
    103                     break
    104                 elif city_choice == 'q':
    105                     exit()
    106                 else:
    107                     print("您的输入%s有误!" % (city_choice))
    108         else:
    109             print("您的编号%s输入超限!" % (province_choice))
    110     elif province_choice == 'r':
    111         break
    112     elif province_choice == 'q':
    113         exit()
    114     else:
    115         print("您的输入%s有误!" % (province_choice))

    输出结果终端展示:

    缺点:重复代码太多

     二.高级版:

     1 #思路:
     2 #1.low版代码有好多重复的代码,设置一个动态的变量来控制
     3 menu = {...}
     4 current_layer = menu   #当前层
     5 # last_layer = menu
     6 layers = []   #
     7 while True:
     8     for k in current_layer:
     9         print(k)
    10     choice = input(">:").strip()
    11     if  not choice:continue
    12     if choice in current_layer:
    13         layers.append(current_layer)   #进入下一层,保存当前层到列表中
    14         current_layer = current_layer[choice]   #动态的将下一层变成当前层,然后进行新的循环
    15     elif choice == 'b':
    16         if len(layers) != 0:   #判断列表是否为空
    17             current_layer = layers.pop()  #将列表最后一个元素取出,并删除掉
    18             # current_layer = layers[-1]
    19             # del layers[-1]
    20         else:
    21             print("到达顶层!")
    22     elif choice == 'q':
    23         exit()
    24     else:
    25         print("输入有误")

    输出结果终端展示:

    缺点:layers这个列表会存放大量的数据,占用太多空间,后续继续优化

  • 相关阅读:
    (Ubuntu)下载及安装Genymosion模拟器并配置Android Studio
    ROS CMakeLists中target_link_libraries相对路径设置
    VS_C#快捷键
    一行代码实现各产品访问统计???[原创]
    PyCharm下载安装
    装饰模式(Decorator)
    Python之格式化输出
    python入门
    servlet--http接口简单的创建及调用
    Storm-jdbc-2讲 高级API及Trident
  • 原文地址:https://www.cnblogs.com/mumupa0824/p/8570331.html
Copyright © 2011-2022 走看看