一:三级菜单的文艺青年版
dic = {
"河北": {
"石家庄": ["鹿泉", "藁城", "元氏"],
"邯郸": ["永年", "涉县", "磁县"],
},
"河南": {
"郑州": ["1", "2", "3"],
"平顶山": ["4", "5", "6"]
},
"山西": {
"A": ["11", "22", "33"],
"C": ["44", "55", "66"]
}
}
layer_list=[]
current=dic
while True:
for i in current:
print(i)
choice=input('==>')
if choice in current:
layer_list.append(current)
current=current[choice]
elif choice=='q':
current=layer_list[-1]
layer_list.pop()
else:
print('错误!请重新输入!')
二.
fields_list=fields.split('|')
d={}
l=[0]
while data:
for key in data:
if key in fields_list:
d[key]=data[key]
if type(data[key])==dict:
l.append(data[key])
data=l.pop()
print(d)
递归的解法:
l='fld2|fld3|fld7|fld19'.split('|') result={} def foo(dic,lst): for i in dic : if i in lst: result[i]=dic[i] if type(dic[i])==dict: foo(dic[i],lst) foo(data,l) print(result)
如此简单!
单论这两个例子,采用栈的方法,有一些共同点:
1 题目特点
情况能无线套下去。无穷无尽
2 解题思路
1 有一个空列表,存储数据。
2 一定有一个不变的变量名,每循环一次,变量名内的数据就会变动,往空列表中追加。
3 这个变量名可能开始就要赋值,直接用最初的字典赋值,拿来用。目前这两个题是这样的,而且都是字典。
4 一定有列表的pop代码。