综合实例
# 综合实例
## 10086语音服务
## 购物系统
## 综合实例要点
### 少用if...else...嵌套,函数可以构成字典后用for...in,循环
### 简单程序往前放,if.(真).执行的函数.else (假) 返回,可以用if 假.,返回(continue)循环,否则执行函数.
### 定义的函数下面加三引号自动补全需要说明的参数,然后写参数说明
## 市、区、镇三级菜单分级显示
### 采用递归方式
#递归方法占用内存大,速度慢
menu = {
"江北区":{
"鱼嘴镇":{
"大鱼村":{},
"中鱼村":{},
"小鱼村":{}
},
"复盛镇": {
"大盛村":{},
"中盛村":{},
"小盛村":{}
},
"五宝镇": {
"大宝村":{},
"中宝村":{},
"小宝村":{}
}
},
"渝中区":{
"大坪镇":{
"大坪村":{},
"中坪村":{},
"小坪村":{}
},
"石油镇": {
"大油村":{},
"中油村":{},
"小油村":{}
},
"解放镇": {
"大放村":{},
"中放村":{},
"小放村":{}
}
},
"沙坪坝区":{
"井口镇":{
"大井村":{},
"中井村":{},
"小井村":{}
},
"土主镇": {
"大主村":{},
"中主村":{},
"小主村":{}
},
"童家桥村": {
"大童村":{},
"中童村":{},
"小童村":{}
}
}
}
def menu_func(menu):
while True:
for key in menu:
print(key)
inp = input(">>>").strip()
if inp.upper()=="Q":
return "q" #这里输入q后返回q,然后下面通过flag接收,再判断是q继续返回q,直到退出最外层,退出程序
if inp.upper()=="B":
return "b" #注意这里返回退出的函数是回到上层调用递归函数的位置,不是直接退出程序
elif menu.get(inp):
flag = menu_func(menu[inp]) #递归函数,传进输入字符的字典
if flag=="q":
return "q" #这里让返回q一层一层往上退出程序
menu_func(menu)
### 采用压栈方式循环提取
#采用栈循环方法,效率高,速度块
menu = {
"江北区":{
"鱼嘴镇":{
"大鱼村":{},
"中鱼村":{},
"小鱼村":{}
},
"复盛镇": {
"大盛村":{},
"中盛村":{},
"小盛村":{}
},
"五宝镇": {
"大宝村":{},
"中宝村":{},
"小宝村":{}
}
},
"渝中区":{
"大坪镇":{
"大坪村":{},
"中坪村":{},
"小坪村":{}
},
"石油镇": {
"大油村":{},
"中油村":{},
"小油村":{}
},
"解放镇": {
"大放村":{},
"中放村":{},
"小放村":{}
}
},
"沙坪坝区":{
"井口镇":{
"大井村":{},
"中井村":{},
"小井村":{}
},
"土主镇": {
"大主村":{},
"中主村":{},
"小主村":{}
},
"童家桥村": {
"大童村":{},
"中童村":{},
"小童村":{}
}
}
}
l_st = [menu]
print(l_st[-1])
while l_st:
for key in l_st[-1]: #循环列表最后一个元素里面的字典KEY
print(key)
inp = input(">>>")
if inp.upper() == "B":
l_st.pop() #删除最后一个元素
elif inp.upper() == "Q":
break
elif l_st[-1].get(inp):
l_st.append(l_st[-1][inp]) #把取得的字典添加到列表最后
*XMind - Trial Version*
浙公网安备 33010602011771号