三级菜单的惨案
程序: 三级菜单
要求:
1. 打印省、市、县三级菜单
2. 可返回上一级
3. 可随时退出程序
三级菜单,多简单的东西,想都不用想循环就是了
dic = {
'山东':{'济宁':{'1':'1','2':'2'},
'济南':{'11':'11','22':'22'}},
'北京':{'昌平':{'111':'111','222':'222'},
'海淀':{'1111':'1111','2222':'2222'}}
}
while 1:
for i in dic:
print(i)
c1 = input('请输入省份:')
if c1 in dic:
while 1:
for j in dic[c1]:
print(j)
c2 = input('请输入市:')
if c2 in dic[c1]:
while 1:
for k in dic[c1][c2]:
print(k)
c3 = input('请输入县城:')
if c3 in dic[c1][c2]:
print(dic[c1][c2][c3])
# exit()
elif c3.upper() == 'Q':
exit()
elif c3.upper() == 'K':
break
else:
print('请正确输入')
elif c2.upper() == 'Q':
exit()
elif c2.upper() == 'K':
break
else:
print('请正确输入')
elif c1.upper() == 'Q':
exit()
else:
print('请正确输入')
看着几十行代码分分钟就出来了多简单。既有代码量,有能实现功能。
就是时间长了 看着越发的恶心
自己看着都反胃,我记得有种东西叫递归函数:自己日自己 自己调用自己,
这么多层,功能都差不多自己调用自己多简单,鼓捣了不知道多久以后,新鲜的代码出炉
dic = {
'山东':{'济宁':{'1':'1','2':'2'},
'济南':{'11':'11','22':'22'}},
'北京':{'昌平':{'111':'111','222':'222'},
'海淀':{'1111':'1111','2222':'2222'}}
}
def demo( dic,old_dic = dic):
for i in dic:
print(i)
info = input('<<<')
if info in dic:
if isinstance(dic[info],str):
print(dic[info])
else:
demo(dic[info],dic)
elif info == 'q':
exit()
elif info == 'k':
demo(old_dic)
else:
print('请正常输入')
demo(dic)
demo(dic,dic)
研究了一会,美滋滋 结果也出来了,但是吧,我自己写的递归自己都看不明白,递归这东西有点太高深了。搞不懂!!
有没有简单的东西,看一眼就能看懂,还不废脑子。
有一个词叫做堆栈。队列:先进先出。栈:先进后出,既然用到了循环,能不能往这上面靠一靠,蹭一蹭热度
我们可以把数据仍到列表里,利用列表的pop来模拟栈,只要下一层中有数据就放到列表中。既不用递归,也不用那么多行代码进行循环。只需要每次循环最后一个元素就可以拿到需要操作的数据,听起来很简单,美滋滋,于是乎继续回炉重造
dic = {
'山东':{'济宁':{'1':'1','2':'2'},
'济南':{'11':'11','22':'22'}},
'北京':{'昌平':{'111':'111','222':'222'},
'海淀':{'1111':'1111','2222':'2222'}}
}
li = []
li.append(dic)
while li:
content = li.pop()
for i in content:
print(i)
user_input = input('<<<')
if user_input in content:
li.append(content)
li.append(content[user_input])
if isinstance(content[user_input],str):
print('到底了')
elif user_input.upper() == 'B':
pass
elif user_input.upper() == 'Q':
break
else:
print('你输入有问题')
li.append(content)
emm感觉越来越倒退了,连函数都没封装,我在去封装个函数QAQ
dic = {
'山东':{'济宁':{'1':'1','2':'2'},
'济南':{'11':'11','22':'22'}},
'北京':{'昌平':{'111':'111','222':'222'},
'海淀':{'1111':'1111','2222':'2222'}}
}
def func(dic):
li = []
li.append(dic)
while li:
content = li.pop()
for i in content:
print(i)
user_input = input('<<<')
if user_input in content:
li.append(content)
li.append(content[user_input])
if isinstance(content[user_input],str):
print('到底了')
elif user_input.upper() == 'B':
pass
elif user_input.upper() == 'Q':
break
else:
print('你输入有问题')
li.append(content)
func(dic)
一个三级菜单,玩到心力憔悴.啊啊啊啊啊!!!本来开开心心准备装逼,然后发现装逼不成反被操 我要等着去试试能不能用上生成器!!! 心累,没事给自己挖坑玩