zoukankan      html  css  js  c++  java
  • 三级菜单

    知识内容:

    1.三级菜单普通版

    2.三级菜单递归版

    一、三级菜单普通版

    需求:

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

    数据结构:

     1 menu = {
     2     '北京': {
     3         '海淀':{
     4             '五道口':{
     5                 'soho':{},
     6                 '网易':{},
     7                 'google':{}
     8             },
     9             '中关村':{
    10                 '爱奇艺':{},
    11                 '汽车之家':{},
    12                 'youku':{},
    13             },
    14             '上地':{
    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 }

    代码:

    第一版:  实现所有功能

     1 menu = {
     2     '北京': {
     3         '海淀':{
     4             '五道口':{
     5                 'soho':{},
     6                 '网易':{},
     7                 'google':{}
     8             },
     9             '中关村':{
    10                 '爱奇艺':{},
    11                 '汽车之家':{},
    12                 'youku':{},
    13             },
    14             '上地':{
    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 k = [menu]
    45 
    46 while True:
    47     t = k[-1]
    48     s = list(t)
    49     for i in s:
    50         print(i, end="")
    51     choice = input("
    请选择(q退出, b返回上一层): ").strip()
    52     if choice in s:
    53         d = t[choice]
    54         k.append(d)
    55     elif choice == 'q':
    56         break
    57     elif choice == 'b':
    58         k.pop()
    59     elif choice not in s:
    60         continue

    第二版:  添加了特殊情况的处理以及进一步优化程序

     1 menu = {
     2     '北京': {
     3         '海淀':{
     4             '五道口':{
     5                 'soho':{},
     6                 '网易':{},
     7                 'google':{}
     8             },
     9             '中关村':{
    10                 '爱奇艺':{},
    11                 '汽车之家':{},
    12                 'youku':{},
    13             },
    14             '上地':{
    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 dicts = []
    45 
    46 while True:
    47     # dicts是存储了字典的列表,keys是存储字典的key的列表
    48     keys = list(menu.keys())
    49     # 到了最底层
    50     if len(menu) == 0:
    51         # 倒退一步,实现如果无可选择的项就无法往下走
    52         menu = dicts.pop()
    53         print("无可选择的选项!请选择退出或返回上一层", end="")
    54     # 未到最低层
    55     else:
    56         # 输出某层的信息
    57         for i in keys:
    58             print(i, end="")
    59 
    60     # 输入选择信息:
    61     choice = input("
    请选择(q退出, b返回上一层): ").strip()
    62 
    63     # 输入判断:
    64     # 输入为空
    65     if not choice:
    66         continue
    67     # 进入下一层
    68     elif choice in keys:
    69         # 保存上一层
    70         dicts.append(menu)
    71         # 进入下一层
    72         menu = menu[choice]
    73     # 直接退出程序
    74     elif choice == 'q':
    75         break
    76     # 返回上一层
    77     elif choice == 'b':
    78         if len(dicts) == 0:
    79             print("已到最上层无法再回退,请选择退出或进入下一层")
    80         else:
    81             menu = dicts.pop()
    82     # 输入的信息为错误信息:
    83     else:
    84         print("请输入正确的信息!")

    二、三级菜单递归版
    需求:
    (1)打印所有的节点 -> text中的内容
    (2)输入一个节点名称,遍历,找到了就打印它并返回True,否则返回False

    数据结构:

     1 menu = [
     2     {
     3         'text': '北京',
     4         'children': [
     5             {'text': '朝阳', 'children': []},
     6             {'text': '昌平', 'children': [
     7                 {'text': '沙河', 'children': []},
     8                 {'text': '回龙观', 'children': []},
     9             ]},
    10         ]
    11     },
    12     {
    13         'text': '上海',
    14         'children': [
    15             {'text': '宝山', 'children': []},
    16             {'text': '金山', 'children': []},
    17         ]
    18     },
    19 ]

    代码:

    需求1:

     1 menu = [
     2     {
     3         'text': '北京',
     4         'children': [
     5             {'text': '朝阳', 'children': []},
     6             {'text': '昌平', 'children': [
     7                 {'text': '沙河', 'children': []},
     8                 {'text': '回龙观', 'children': []},
     9             ]},
    10         ]
    11     },
    12     {
    13         'text': '上海',
    14         'children': [
    15             {'text': '宝山', 'children': []},
    16             {'text': '金山', 'children': []},
    17         ]
    18     },
    19 ]
    20 
    21 
    22 def show_test(m):
    23     for item in m:
    24         text = item.get("text", None)
    25         if text:
    26             print(text)
    27         children = item.get("children", None)
    28         if children:
    29             show_test(children)
    30         if children is []:
    31             return
    32 
    33 
    34 show_test(menu)

    需求2:

     1 def show_test(m, n):
     2     for item in m:
     3         text = item.get("text", None)
     4         if text == n:
     5             print(text)
     6             return True
     7         children = item.get("children", None)
     8         if children:
     9             show_test(children, n)
    10         if children is []:
    11             return
    12     return False
    13 
    14 
    15 node = input("请输入节点名称: ")
    16 print(show_test(menu, node))
  • 相关阅读:
    多态与异常处理课后作业
    Java接口与继承作业
    大道至简第六章随笔
    大道至简第五章随笔
    Java数组课程作业
    大道至简第四章随笔
    String课后作业
    大道至简第三章随笔
    Java语法基础动手动脑实践
    大道至简-第二章 心得体会
  • 原文地址:https://www.cnblogs.com/wyb666/p/8744136.html
Copyright © 2011-2022 走看看