#_author:Administrator
#date:2019/11/06
#三级菜单(高大上版)
#作业要求
#1.展示省市县(数据存在文件中)
#2.对文件实现增删改
with open('menutxt','r',encoding='utf8') as f_read:
str_menu=eval(f_read.read().strip())
print(str_menu)
current_menu=str_menu
parent_menu=[]#保存所有父级,最后一个元素永远是父级
flag=True
while flag:
#print(parent_menu)
for key in current_menu:#1
print(key)####
choose=input('请选择:添加[add],修改[mod],删除[rem],返回上一级[b],退出[q]'.strip())
if len(choose) == 0: continue
if choose in current_menu:
parent_menu.append(current_menu)#在进入下一层之前,把当前层(也就是下一层的父级)追加到列表中,
#下一次循环,当用户选择b的时候,就可以直接取列表的最后一个值出来
current_menu=current_menu[choose]#2#进入子层
if not current_menu:#3
print('已经是最后一层了')#4
elif choose=='add':
add_ele=input('请输入你要添加的省份'.strip())
if add_ele in current_menu:
print('您添加的省份存在')
else:
current_menu[add_ele]={}#
elif choose=='mod':
mod_ele=input('请输入你要修改的省份'.strip())
if mod_ele in current_menu:
new_ele=input('请输入新省份:')
current_menu[new_ele]=current_menu[mod_ele]#(!!!)
current_menu.pop(mod_ele) #修改新省份要将原来的省份删除
else:
print('您修改的省份不存在')
elif choose=='rem':
rem_ele=input('请输入你要删除的省份:'.strip())
if rem_ele in current_menu:
current_menu.pop(rem_ele)#
else:
print('您删除的省份不存在')
elif choose=='b':
#如果列表记录中没有内容,则证明在第一层,不需要返回
if parent_menu:
current_menu=parent_menu.pop()#取出列表的最后一个值,因为它就是当前层父级
elif choose=='q':
flag=False
else:
print('您输入有误')
with open('update2','w',encoding='utf8')as f_write:
dic_menu=str(current_menu).strip()
f_write.write(dic_menu)#
Output:
{'陕西省': {'西安市': {'长安县': {}, '户县': {}}, '渭南市': {'富平县': {}, '华县': {}, '蒲城县': {}}}, '湖南省': {'长沙市': {'文艺县': {}, '金盆县': {}, '岳麓县': {}, '会春县': {}}, '衡阳市': {'衡南县': {}, '衡山县': {}, '衡东县': {}, '祁东': {}}}}
陕西省
湖南省
请选择:添加[add],修改[mod],删除[rem],返回上一级[b],退出[q]陕西省
西安市
渭南市
请选择:添加[add],修改[mod],删除[rem],返回上一级[b],退出[q]西安市
长安县
户县
请选择:添加[add],修改[mod],删除[rem],返回上一级[b],退出[q]长安县
已经是最后一层了
请选择:添加[add],修改[mod],删除[rem],返回上一级[b],退出[q]b
长安县
户县
请选择:添加[add],修改[mod],删除[rem],返回上一级[b],退出[q]b
西安市
渭南市
请选择:添加[add],修改[mod],删除[rem],返回上一级[b],退出[q]b
陕西省
湖南省
请选择:添加[add],修改[mod],删除[rem],返回上一级[b],退出[q]mod
请输入你要修改的省份湖南省
请输入新省份:江苏省
陕西省
江苏省
请选择:添加[add],修改[mod],删除[rem],返回上一级[b],退出[q]江苏省
长沙市
衡阳市
请选择:添加[add],修改[mod],删除[rem],返回上一级[b],退出[q]rem
请输入你要删除的省份:长沙市
衡阳市
请选择:添加[add],修改[mod],删除[rem],返回上一级[b],退出[q]add
请输入你要添加的省份加油
衡阳市
加油
请选择:添加[add],修改[mod],删除[rem],返回上一级[b],退出[q]加油
已经是最后一层了
请选择:添加[add],修改[mod],删除[rem],返回上一级[b],退出[q]b
衡阳市
加油
请选择:添加[add],修改[mod],删除[rem],返回上一级[b],退出[q]b
陕西省
江苏省
请选择:添加[add],修改[mod],删除[rem],返回上一级[b],退出[q]q