python学习作业(一):三级菜单

1. 用递归的方式实现:

'''
作业需求:
1. 运行程序输出第一级菜单
2. 选择一级菜单某项,输出二级菜单,同理输出三级菜单
3. 让用户选择是否要退出
4. 有返回上一级菜单的功能
'''




#注:此data字典转载之博客(空s蝉灬)里的字典数据来源。
data = {
    '海贼王':{
        '草帽海贼团':{
            '路飞':{'果实能力':'橡胶果实','霸气':['武装色霸气','见闻色霸气','霸王色霸气'],'':21},
            '索罗':{'果实能力':'','霸气':['武装色霸气','见闻色霸气'],'':24},
            '香吉士':{'果实能力':'','霸气':['武装色霸气','见闻色霸气'],'':23},
        },
        '七武海':{
            '波雅汉库克':{'果实能力':'甜甜果实','霸气':['武装色霸气','见闻色霸气','霸王色霸气'],'':20},
            '鹰眼米霍克':{'果实能力':'','霸气':['武装色霸气','见闻色霸气'],'':26},
            '小丑巴基':{'果实能力':'分裂果实','霸气':'','':25},
        },
        '四皇':{
            '香克斯':{'果实能力':'未知','霸气':['武装色霸气','见闻色霸气','霸王色霸气'],'':28},
            '黑胡子':{'果实能力':'黑暗果实','霸气':['武装色霸气','见闻色霸气'],'':28},
            '凯多':{'果实能力':'未知','霸气':['武装色霸气','见闻色霸气'],'':28},
        },

    },
    '妖精的尾巴':{
        '灭龙魔导师':{
            '纳兹':{'属性能力':'火之灭龙魔法','':21,},
            '伽吉鲁':{'属性能力':'铁之灭龙魔法','':23,},
            '温蒂':{'属性能力':'天之灭龙魔法','':18,},
        },
        '超S魔导师':{
            '吉尔达斯':{'属性能力':'粉碎','':28},
            '艾璐萨':{'属性能力':'变装魔法','':26},
            '米拉杰':{'属性能力':'变成撒旦','':27},
        },
        '六魔将':{
            '深夜':{'属性能力':'扭曲空间','':24},
            '克布拉':{'属性能力':'毒之灭龙魔法','':24},
            '安吉拉':{'属性能力':'召唤星灵','':22},
        },
    },
    '火影':{
       '木叶村':{
           '宇智波.鼬': {'属性能力':'万花筒写轮眼','':26},
           '日向雏田': {'属性能力':'白眼','':24},
           '我爱罗': {'属性能力':'砂纸守鹤','':24},
       },
        '':{
            '佩恩':{'属性能力':'轮回眼','':28},
            '鬼鲛':{'属性能力':['水遁','鲛肌'],'':28},
            '迪达拉':{'属性能力':['黏土炸弹','自爆'],'':28}
        },
        '代目':{
            '初代':{'姓名':'千手柱间','属性能力':'树诞降临','':99999},
            '三代':{'姓名':'猿飞','属性能力':['土流大河','召唤猿魔'],'':64},
            '四代':{'姓名':'波风水门','属性能力':['飞雷神之术','螺旋丸'],'':34},
        },
    },
}

#menu
def ThrMenu(newdata):
    #用while循环保存递归数据,返回上一层和打印这一层数据newdata
    while True:
        if not hasattr(newdata,'__iter__') or isinstance(newdata,str):
            print(newdata)
        else:
            for key in newdata:
                print(key)
        content = input('>>>>>>').strip()
        if content == 'b' or  content == 'q':
            return content
        # 进入下一级
        elif isinstance(newdata,dict) and content in newdata.keys() and newdata[content] :
           getcontent =  ThrMenu(newdata[content])
           if getcontent == 'q':return
        else:
            continue

ThrMenu(data)

 

2. 用堆栈的方式实现:(待更新)

 

level =[]
while True:
  for key in menu:
      print(key)
  your_choice = input("your choice >>:").strip()
  if your_choice == "b":
    if len(level)==0:
        break #当列表空的时候,就是退出大循环的时候
    menu=level[-1]
    level.pop()    #删除列表最后一个元素
    print(level)
     # break
  elif your_choice in menu:
     # print(menu)
     level.append(menu)
     # print(level)
     menu=menu[your_choice]
  else:
    continue

 

 

 

posted @ 2019-11-14 14:28  Hubery_Liu  阅读(180)  评论(0编辑  收藏  举报