针对python2.7和python3.4二个版本的不同之处说明如下:

1、在python3.4下,经测试字符串存储的类型已经都成为str,包括英文,汉字

而在python2.7下,经测试字符串存储类型,英文为unicode;汉字为str

(1)在python2.7下还需要设置默认编码,具体如下:

reload(sys)
sys.setdefaultencoding('utf-8')

要不然会报如下错误:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 18: ordinal not in range(128)

(2)在python2.7下还需要对汉字的str进行转码,具体如下:

s = s.decode('utf-8')

#! /usr/bin/env python
#coding=gbk

################################################
# Task Name: 三级菜单                           #
# Description:打印省、市、县三级菜单             #
#              可返回上一级                      #
#               可随时退出程序                   #
#----------------------------------------------#
# Author:Mike M Zhu                       #
################################################

area_dic = {
'香港':{'香港':['香港']},
'澳门':{'澳门':['澳门']},
'台湾':{'台湾':['台湾']},
'钓鱼岛':{'钓鱼岛':['钓鱼岛']},
'北京市':{
'市辖区':['市辖区'],
'东城区':['东城区'],
'西城区':['西城区'],
'崇文区':['崇文区'],
'宣武区':['宣武区'],
'朝阳区':['朝阳区'],
'丰台区':['丰台区'],
'石景山区':['石景山区'],
'海淀区':['海淀区'],
'门头沟区':['门头沟区'],
'房山区':['房山区'],
'通州区':['通州区'],
'顺义区':['顺义区'],
'昌平区':['昌平区'],
'大兴区':['大兴区'],
'怀柔区':['怀柔区'],
'平谷区':['平谷区'],
'密云县':['密云县'],
'延庆县':['延庆县']},
'山东' : {
'青岛' : ['四方','黄岛','崂山','李沧','城阳'],
'济南' : ['历城','槐荫','高新','长青','章丘'],
'烟台' : ['龙口','莱山','牟平','蓬莱','招远']},
'江苏' : {
'苏州' : ['沧浪','相城','平江','吴中','昆山'],
'南京' : ['白下','秦淮','浦口','栖霞','江宁'],
'无锡' : ['崇安','南长','北塘','锡山','江阴']},
'浙江' : {
'杭州' : ['西湖','江干','下城','上城','滨江'],
'宁波' : ['海曙','江东','江北','镇海','余姚'],
'温州' : ['鹿城','龙湾','乐清','瑞安','永嘉']},
'安徽' : {
'合肥' : ['蜀山','庐阳','包河','经开','新站'],
'芜湖' : ['镜湖','鸠江','无为','三山','南陵'],
'蚌埠' : ['蚌山','龙子湖','淮上','怀远','固镇']},
'广东' : {
'深圳' : ['罗湖','福田','南山','宝安','布吉'],
'广州' : ['天河','珠海','越秀','白云','黄埔'],
'东莞' : ['莞城','长安','虎门','万江','大朗']},
'上海市':{
'闵行区':['闵行区'],
'长宁区':['长宁区'],
'浦东新区':['浦东新区'],
'嘉定区':['嘉定区'],
'青浦区':['青浦区'],
'闸北区':['闸北区'],
'宝山区':['宝山区'],
'静安区':['静安区'],
'虹口区':['虹口区'],
'黄浦区':['黄浦区'],
'松江区':['松江区'],
'普陀区':['普陀区'],
'徐汇区':['徐汇区'],
'奉贤区':['奉贤区'],
'杨浦区':['杨浦区']}
}
#area_dic
#省:pro 11个  市:city    区:town

pro_list = list(area_dic.keys())
while True:
    print("".center(50,'='))
    for i in pro_list:
        print(str(pro_list.index(i)+1)+'-'+i)    #打印省列表和对应编号
    pro_id_input = raw_input("请输入您的省编号,或按q退出:")
    if pro_id_input.isdigit():               #判断是否是数字
        pro_id_input = int(pro_id_input)
        if pro_id_input > 0 and pro_id_input <= len(pro_list):
            pro_name = pro_list[pro_id_input-1]
            print("您输入的省名为:%s,其城市列表如下:" %pro_name)            
            city_list = list(area_dic[pro_name].keys())  
            while True:
                #根据省打印所在城市列表和对应编号 
                print("城市".center(50,'='))
                for c in city_list:
                    print(str(city_list.index(c)+1) + '-' + c)
                city_id_input = raw_input("请输入您的城市编号,或按b返回上级菜单,或按q退出:")
                if city_id_input.isdigit():
                    city_id_input = int(city_id_input)
                    if city_id_input > 0 and city_id_input <= len(city_list):
                        city_name = city_list[city_id_input-1]
                        print("您输入的城市名位:%s, 其区县列表如下:" %city_name)
                        town_list = area_dic[pro_name][city_name]
                        while True:
                            print("区县".center(50,'='))
                            for t in town_list:
                                print(str(town_list.index(t)+1) + '-' +t)
                            backorquit_input = raw_input("按b返回上级菜单,或按q退出:")
                            if backorquit_input == 'b':
                                break
                            elif backorquit_input == 'q':
                                exit() 
                            else:
                                print('您的输入有误!')
                    else:
                        print('输入的城市编号%s不存在' %city_id_input)  
                elif city_id_input == 'b':
                    break
                elif city_id_input == 'q':
                    exit()
                else:
                    print('您的输入有误!')
        else:
            print('输入的省编号%s不存在' %pro_id_input)
    elif pro_id_input == 'q':
        break
    else:
        print('您的输入有误!')
    

 

 posted on 2018-01-20 00:47  superpapaman  阅读(119)  评论(0)    收藏  举报