首页 新闻 会员 周边

python多级菜单问题

0
悬赏园豆:5 [已解决问题] 解决于 2018-03-11 13:29
复制代码
 1 代码:
 2 dic_china = {
 3     "直辖市":{
 4         "北京市":["东城区","西城区","崇文区","宣武区","朝阳区","海淀区","丰台区",
 5           "石景山区","门头沟区","房山区","通州区","顺义区","昌平区","大兴区",
 6           "怀柔区","平谷区","延庆县","密云县",],
 8            },
 9     "":{
10         "浙江省":{
11             "杭州市":["拱墅区","上城区","下城区","江干区","西湖区","滨江区","萧山区","余杭区","建德市","富阳市",
12                    "临安市","桐庐县","淳安县"],
13             "宁波市":["海曙区","江东区","江北区","北仑区","镇海区","鄞州区","余姚市","慈溪市","奉化市","象山县",
14                    "宁海县"],
15             "温州市":["鹿城区","龙湾区","瓯海区","瑞安市","乐清市","洞头县","永嘉县","平阳县","苍南县","文成县",
16                    "泰顺县"],
17             "嘉兴市":["南湖区","秀洲区","海宁市","平湖市","桐乡市","嘉善县","海盐县"],
18             "湖州市":["吴兴区","南浔区","德清县","长兴县","安吉县"],
19             "绍兴市":["越城区","诸暨市","上虞市","嵊州市","绍兴县","新昌县"],
20             "金华市":["婺城区","金东区","兰溪市","义乌市","东阳市","永康市","武义县","浦江县","磐安县"],
21         },
22     }
23 }
24 
25 print('欢迎使用中国省市查询工具'.center(30,'-'))
26 while True:
27     #---------遍历字典china,并编号输出城市分类信息------
28    for i,j in enumerate(dic_china,1):
29         print(i,j)
30     classify_num = input('请选择想要查看的城市分类的编号[退出:q]:')
31     #---------判断输入编号是否正确----------
32      if classify_num.isdigit():
33         classify_num = int(classify_num)
34         if 1 <= classify_num <= len(dic_china):
35             #---------将客户选择的类别的城市信息存入新的字典中----------
36             province_municipality_list = list(dic_china.keys())
37             #---------判断客户是选择额直辖市类-------
38                if province_municipality_list[classify_num-1] == '直辖市':
39                 dic_municipality = dic_china[province_municipality_list[classify_num-1]]
40                 print(''.center(50, '-'))
41                 for i, j in enumerate(dic_municipality, 1):
42                     print(i, j)
43                 municipality_num = input('请选择想要查看的直辖市的编号[返回上一级菜单:q]:')
44                 #---------判断输入编号是否正确----------
45                     if municipality_num.isdigit():
46                     municipality_num = int(municipality_num)
47                     if 1 <= municipality_num <= len(dic_municipality):
48                         municipality_list = list(dic_municipality.keys())
49                         county_list = dic_municipality[municipality_list[municipality_num-1]]
50                         print('以下是该直辖市下所有区的信息:')
51                         print(county_list)
52                 elif municipality_num.upper() == 'Q':
53                     print(''.center(50,'-'))
54                 else:
55                     print('输入错误,请重新输入!!')
56             else:
57                 dic_province = dic_china[province_municipality_list[classify_num-1]]
58                 print(''.center(50, '-'))
59                 #---------遍历字典dic_Province,并编号输出省级城市信息---------
60                     for i, j in enumerate(dic_province, 1):
61                     print(i, j)
62                 province_num = input('请选择想要查看的省的编号[返回上一级菜单:q]:')
63                 # ---------判断输入编号是否正确----------
64                     if province_num.isdigit():
65                     province_num = int(province_num)
66                     if 1<= province_num <= len(dic_province):
67                         # ---------将客户选择的市信息存入新的字典中----------
68                         province_list = list(dic_province.keys())
69                         dic_city = dic_province[province_list[province_num-1]]
70                         print(''.center(50, '-'))
71                         for i, j in enumerate(dic_city, 1):
72                             print(i, j)
73                         city_num = input('请选择想要查看的市的编号[返回上一级菜单:q]:')
74                         if city_num.isdigit():
75                             city_num = int(city_num)
76                             if 1 <= city_num <= len(dic_city):
77                                 city_list = list(dic_city.key())
78 
79                 elif province_num.upper() == 'Q':
80                     print(''.center(50,'-'))
81                 else:
82                     print('输入错误,请重新输入!!')
83         else:
84             print('输入的编号不在城市分类的编号范围内,请重新输入!!')
85     elif classify_num.upper() == 'Q':
86         print('感谢您的使用!!')
87     else:
88         print('输入错误,请重新输入!!
复制代码


问题:
  代码中标红的位置,查询字典dic_city的key值存入city_list列表中,但是key方法无法使用,
  提示:Unresolved attribute reference 'key' for class
  (标红的代码,key少打了一个s,但是问题没有变,key方法不能使用)
  小白初学python第6天,不知道这里为什么不能用??烦请园区大神们为我解惑

Albert_learner的主页 Albert_learner | 初学一级 | 园豆:199
提问于:2018-03-10 14:29
< >
分享
最佳答案
0

建议打印一下 dic_city 的类型信息

收获园豆:4
dudu | 高人七级 |园豆:30994 | 2018-03-10 15:25

已经打印过了,时dict类型的

Albert_learner | 园豆:199 (初学一级) | 2018-03-10 23:29

所以我才觉得奇怪的,明明是dict类型,是不是我最开始建的字典china有问题,
直辖市分类--->北京--->列表,
而省分类---->浙江省---->市----->列表,
是不是这里有什么说法??

Albert_learner | 园豆:199 (初学一级) | 2018-03-10 23:35

@Albert_learner: 那么那个里面的数据正确吗?

随风行云 | 园豆:936 (小虾三级) | 2018-03-10 23:37

@生活还得继续: 数据是正确的,
存的是这些东西:
{
'杭州市': ['拱墅区', '上城区', '下城区', '江干区', '西湖区', '滨江区', '萧山区', '余杭区', '建德市', '富阳市', '临安市', '桐庐县', '淳安县'],
'宁波市': ['海曙区', '江东区', '江北区', '北仑区', '镇海区', '鄞州区', '余姚市', '慈溪市', '奉化市', '象山县', '宁海县'],
'温州市': ['鹿城区', '龙湾区', '瓯海区', '瑞安市', '乐清市', '洞头县', '永嘉县', '平阳县', '苍南县', '文成县', '泰顺县'],
'嘉兴市': ['南湖区', '秀洲区', '海宁市', '平湖市', '桐乡市', '嘉善县', '海盐县'],
'湖州市': ['吴兴区', '南浔区', '德清县', '长兴县', '安吉县'],
'绍兴市': ['越城区', '诸暨市', '上虞市', '嵊州市', '绍兴县', '新昌县'],
'金华市': ['婺城区', '金东区', '兰溪市', '义乌市', '东阳市', '永康市', '武义县', '浦江县', '磐安县'],
}
这个是dict类的,value存的是列表而已

Albert_learner | 园豆:199 (初学一级) | 2018-03-11 11:25

@生活还得继续: 但是我用dic_city.key()这个方法取key值的时候报错

Albert_learner | 园豆:199 (初学一级) | 2018-03-11 11:26

@Albert_learner: 认真看了一下,好像应该是dic_city.keys()?少了个s,这个报错一般都是方法名错误或不存在。。

随风行云 | 园豆:936 (小虾三级) | 2018-03-11 12:50

@生活还得继续: 是的,我又仔细看了下自己的代码,真的是哎,写代码还是要小心

Albert_learner | 园豆:199 (初学一级) | 2018-03-12 11:01
其他回答(3)
0

贴的代码排版很乱。不缩进格式不对应,都不想看代码了。。。。

收获园豆:1
随风行云 | 园豆:936 (小虾三级) | 2018-03-10 15:53

额,我在pycharm上缩进时正常的这里我是直接复制粘贴的,可能有些地方缩进的长度变了,当时没有注意,sorry

支持(0) 反对(0) Albert_learner | 园豆:199 (初学一级) | 2018-03-10 23:31
0

看了园中别人写的三级菜单,对比了两个字典,发现一个问题(字典中的元素进行额简化处理)
正确的字典(别人的)
zone = {
'华北':{ '山东' : {'青岛' : ['四方'],}, },
'华南':{'江苏' : {'苏州' : ['沧浪'],},},
}
不算错误,但是不合理的字典(我的)
dic_china = {
"直辖市":{"北京市":["东城区",],},
"省":{"浙江省":{"杭州市":["拱墅区",],},}
}
可以看出来我的字典是
直辖市分类--->北京--->列表,
而省分类--->浙江省--->市--->列表,
如果拆分建立的话,一个属于二级,一个是三级,所以最后dic_city无法使用keys()方法,
至于原因,我猜测:这样建立的字典是属于二级的,而不是三级的,原理可能类似与水桶,由最短的一块决定能装多少水,所以{"杭州市":["拱墅区",],}这一整个都被python识别为一个value,所以最后不能用keys()方法。

ps:以上是我自己验证过了的,但是最后的原因是我自己猜测的,不知道正不正确,所以不要请看到的大神能解惑,和我一样是小白的看看就好,记住和我一样是小白的看看就好!!!!!!!!

Albert_learner | 园豆:199 (初学一级) | 2018-03-11 13:28

下午又尝试了一下,发现直接输出dic_china['省']['浙江省'],输出结果为杭州市,即:我上午猜测{"杭州市":["拱墅区",],}被python识别为一个value的猜想又好像是错误的,真的是搞不懂啊,@dudu,大神知道具体的原因吗??

支持(0) 反对(0) Albert_learner | 园豆:199 (初学一级) | 2018-03-11 18:01
0

真烂, 浪费时间.

米酥2018 | 园豆:202 (菜鸟二级) | 2019-09-08 18:15
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册