在字典之下,执行了一个三级菜单的作业。大致要求:# 三级菜单,包括省市县。 Province and City County,三级关系 省包含市,市下属有县级 1.可以一层一层进入到所有层 2.可以在每层返回上一层 3.可以在任意层退出 主菜单
实现的思路,不同循环的跳转其实是相差不多的。因此,我们可以创建一个变量用于动态记录到达了三级菜单的那一层是十分简便的。同时为了能够一次一次的退出循环,那么跳转的父菜单也是需要进行记录的。这里可以使用列表充当一个栈的作用,使得每次到达下一次循环,append在这个列表中,当需要退出的时候就可以使用pop这样,就能一层一层的退出来了。
在循环部分,写成死循环那么就可以让这个不断的执行。首先先输出所有第一层的省级单位,然后让用户选择他们要进入的那个省,然后我们可以通过if判断,用户输入的是否在下一级中,在就将当前层赋值为这一级菜单,同时将上一级菜单的值append到空的列表中,不在就要输入错误的输入,然后直接进入下一层循环。如果选择是退出这层循环,这个我们用小写字母‘b’来判断,如果输入的是‘b’那么将父亲层的数据pop出来,并赋值给当前层,这样我们就可以退出当前循环了。整体的思路就是这样的。下面是代码:
menu = { '北京': { '朝阳': { '国贸': { 'CICC': {}, 'HP': {}, '渣打银行': {}, 'CCTV': {}, }, '望京': { '陌陌': {}, '奔驰': {}, '360': {}, }, '三里屯': { '优衣库': {}, 'apple': {}, }, }, '昌平': { '沙河': { '老男孩': {}, '啊泰包子': {}, }, '天通苑': { '链家': {}, '我爱我家': {}, }, '回龙观': {}, }, '海淀': { '五道口': { '谷歌': {}, '网易': {}, '搜狐': {}, '搜狗': {}, '快手': {}, }, '中关村': { '优酷': {}, '爱奇艺': {}, '汽车之家': {}, '新东方': {}, 'QQ': {}, } }, }, '上海': { '浦东': { '陆家嘴': { 'CICC': {}, '高盛': {}, '摩根': {}, }, '外滩': {}, '陆家嘴': {}, }, '闵行': {}, '静安': {}, }, '山东': { '济南': { }, '德州': { '乐陵': { '丁务镇': {}, }, '平原': {}, }, '青岛': {}, } } current_layer = menu # 实现动态循环 parent_layers = [] # 保存所有父级 while True: for key in current_layer: print(key) choice = input('>>>').strip() if len(choice) == 0: continue if choice in current_layer: parent_layers.append(current_layer) # 在进入下一层之前,把当前层(也就是下一层的父级) # 追加到列表中,下一次loop当使用b时 就能取得父级 current_layer = current_layer[choice] # 改成子层 elif choice == 'b': if parent_layers: # 当为不空时 current_layer = parent_layers.pop() # 取出最后一个值,因为他是下层的父级 else: print("无此项")