无限嵌套菜单很费脑,分享一下思路
b
的作用是在用户进入下级目录,把a
放到b
里面,然后把a[c]
复制到当前的a
,代表进入下级目录
- 打印a的keys
- 判断用户输入是不是‘back’,如果是‘back’
- 判断上级目录列表是否为空
- 如果为空就代表当前所在位置是根目录,执行break语句
- 如果上级目录不为空,则代表当前所在位置不是根目录,把b里面的最后一个元素复制到a,代表返回上级目录,删除b里面的最后一个元素,代表已经退出上级目录
- 判断上级目录列表是否为空
- 如果用户输入的内容不在a里面,直接进入下一次输入
- 如果上面的判断条件都不成立,则执行进入下级菜单操作,把当前的菜单保存到b,把a改成用户行选择的菜单,然后进入下一循环
#!/bin/python3
# -*- coding:utf-8 -*-
#var
a = {
'你的爷爷':{
'你的爸爸':{
'你的孙子':{
}
},
'你的野爹':{
}
},
'你的祖母':{
'你的曾祖母':{
'你的曾曾祖母':{
}
}
}
}
b = [] #存储上级目录
d = [] #存储当前所在位置
def get_location(list): #获取当前位置,格式”你的爷爷>你的爸爸>“
string = "" #初始化字符串
if list: #假如list里面有内容
for x in list: #从传入的list里面遍历
string += "%s>" %x #不断累加list
return string #结束遍历后返回
else:
return ">" #返回根目录字符
while True:
for x in a.keys(): #遍历当前菜单
print(x)
c = input("%s"%get_location(d)) #请求用户输入
if c == 'b': #假如用户输入b,返回上级菜单操作
if not b: #如果上集目录变量为空
break #退出程序
a = b[-1] #将上级目录赋值到当前目录
b.pop() #删除上级目录列表里面最后一个元素
d.pop() #删除当前所在位置的最后一个元素
if c not in a: #如果输入的内容不再当前菜单里面,则直接进入下一循环
continue
#如果输入的内容符合当前菜单的内容
b.append(a) #将当前目录存储到上级目录的变量里面
a = a[c] #将当前菜单改成用户选择的菜单
d.append(c) #把用户选择的位置存储到d里面
学习使人进步,到此拜读!