【python之路】【4、文件操作】数据类型、文件操作-作业 用文件储存三级菜单并执行

 1 #!/usr/bin/python
 2 # -*- coding: utf-8 -*-
 3 # __author__:"watalo"
 4 # date: 2019/9/23
 5 
 6 '''
 7 1.用文件操作的方式实现三级菜单,用户可增、删、改、查(1级1级的做)
 8 2.需要用的函数:
 9     str(),字典转字符串
10     eval(),字符串直接调用引号里的内容,内容是字典话,那就。。。
11 OK,let's go!
12 【idea&question:】
13     1、直接在文件里写好省、市、区名字?
14     开头就出现问题,省市区分文件写,还是写在一个文件,分文件写又应该怎么写,难道每个市都要单独命名一个文件?这TM是个问题啊
15     1.1、为了自动搞出这些名字来,我决定加一个作业,就是用for循环来写,市的名字简化成 省名_1,区名字简化为,省名_1_1这样。
16     写一个menu()函数来实现。for循环已经循环晕了。
17     2、将文件内容变成字典类型,逐渐添加形成一个大字典
18     3、用之前学的字典三级菜单(高大上版)循环。>>>>>>>>>>实现了三级菜单的‘查’功能
19     4、考虑怎么做增、删、改,基本想法是在while循环的过程中添加功能。
20         可以预期的问题,改完后,只是对字典进行了修改,【字典】中的内容怎么返还回去改【文件】。
21 '''
22 
23 # 1、自动生成文件
24 def menu(a): # 用a文件里单行内容为名字,生成新文件,并且给新文件添加内容为
25     b = str(a)
26     with open(b, 'r', encoding='utf-8') as m:
27         for prov in m:
28             with open(prov.strip(), 'w', encoding='utf-8') as p:  # 创建以省命名的文件
29                 for i in range(1, 3):
30                     city = str(prov.strip()) + '' + str(i) + '\n'  # 格式化城市名称
31                     p.writelines(city)  # 写入格式化城市名称
32 
33 menu('prov')  # 生成市级文件
34 with open('prov', 'r', encoding='utf-8') as m:  # 生成区级文件
35     for key in m:
36         menu(key.strip())
37 
38 
39 # 2、通过文件生成一个字典
40 def file_to_dict(a=str(),b={}):
41     menu_dict = dict()
42     with open(a, 'r', encoding='utf-8') as m:
43         for key in m:
44             menu_dict.setdefault(key.strip(), {})
45     return menu_dict
46 
47 dict_menu = file_to_dict('prov')
48 for key in dict_menu:
49     dict_menu[key] = file_to_dict(key)
50     m = dict_menu[key]
51     for key2 in m:
52         m[key2] = file_to_dict(key2)
53 
54 # 3、3级菜单循环
55 def foldedmenu(dict_menu_c):
56     # dict_menu_c = dict_menu #有预感这句话 换个名字对后面‘增删改’功能会有很大的作用
57     parent_layer = []
58     while True:  # 生成一个循环loop
59         for key in dict_menu_c:  # 遍历字典的键值,也就是第一层字典key
60             print(key)  # 显示出来
61         choice = input('>>>:').strip()  # 输入显示出来的第一层,或者 b 返回
62         if len(choice) == 0: continue  # 基本判断,确保没有输入东西的时候重复
63         if choice in dict_menu_c:
64             parent_layer.append(dict_menu_c)  # 当前层级的字典,直接添加到 列表里面备用
65             dict_menu_c = dict_menu_c[choice]  # 循环赋值给dict_menu_c,用于进入下一个层级
66         elif choice == 'b':
67             if parent_layer:  # [] 空列表 就是 False
68                 dict_menu_c = parent_layer.pop()  # 取出列表的最后一个值
69         elif choice == 'q':
70             print('--------END---------')
71             break
72         else:
73             print('请正确输入指令')
74 
75 foldedmenu(dict_menu)

猜你喜欢

转载自www.cnblogs.com/watalo/p/11581947.html