# question   11
import ast
from functools import reduce

def file_read():
    with open('D:\\pytharm\\jichuyufa\\day2\\pro_cty_con.txt', 'r', encoding='utf8') as f:
        san_dic = ast.literal_eval(f.read())
        return san_dic

dic = file_read()
print(dic)
ke = list(dic.keys())
print('provinces:', ke)
# print('-----------------')
cits = []
township = []
for i in ke:
    # print(dic[i])
    for j in dic[i]:
        # print(j)
        cits.append(j)
        township.append(dic[i][j])
        # print(dic[i][j])
print('citys:', cits)
# print('-----------------')
# print('township:', township)
township = reduce(lambda x, y: x + y, township)
print('township:', township)

def file_wi(dic_add):
    with open('D:\\pytharm\\jichuyufa\\day2\\pro_cty_con.txt', 'w+', encoding='utf8') as f:
        f.write(dic_add)
        # pass

def add_dic(dic):
    dic_insert = {}
    dic_insert1 = {}
    li_insert = []
    new_flag = True
    while new_flag:
        pro_new = input('输入Q结束:输入q返回,输入要添加的省')
        if pro_new == 'q':
            break
        elif pro_new == 'Q':
            exit()
        elif pro_new in ke:
            print('省份已经存在')
            cit_bool = input('输入y或者Y,要在该省添加城市')
            if cit_bool.lower() == 'y':
                # pass
                cty_new = input('输入Q结束:输入q返回,输入要添加的市')
                if cty_new == 'q':
                    break
                elif cty_new == 'Q':
                    exit()
                elif cty_new in cits:
                    print('该城市已经存在')
                    town_bool = input('输入y或者Y,要在该城市添加县')
                    if town_bool.lower() == 'y':
                        while True:
                            township_new = input('输入Q结束:输入q返回,输入要添加的县')
                            if township_new == 'q':
                                break
                            elif township_new == 'Q':
                                exit()
                            elif township_new in township:
                                print('该县已经存在')
                            else:
                                print(1)
                                # 新数据构造字典
                                dic[pro_new][cty_new].append(township_new)
                        new_flag = False
                    else:
                        continue
                else:
                    while True:
                        township_new = input('输入Q结束:输入q返回,输入要添加的县')
                        if township_new == 'q':
                            break
                        elif township_new == 'Q':
                            exit()
                        elif township_new in township:
                            print('该县已经存在')
                        else:
                            print(1)
                            # 新数据构造字典
                            li_insert.append(township_new)
                            dic_insert1[cty_new] = li_insert
                            dic_city_is = dic[pro_new]
                            # print(dic_city_is, type(dic_city_is))
                            dic_city_is = dict(dic_city_is, **dic_insert1)
                            dic_insert[pro_new] = dic_city_is
                    new_flag = False
            else:
                continue
        else:
            cty_new = input('输入Q结束:输入q返回,输入要添加的市')
            if cty_new == 'q':
                break
            elif cty_new == 'Q':
                exit()
            elif cty_new in cits:
                print('该城市已经存在')
                continue
            else:
                while True:
                    township_new = input('输入Q结束:输入q返回,输入要添加的县')
                    if township_new == 'q':
                        break
                    elif township_new == 'Q':
                        exit()
                    elif township_new in township:
                        print('该县已经存在')
                    else:
                        print(1)
                        # 新数据构造字典
                        li_insert.append(township_new)
                        dic_insert1[cty_new] = li_insert
                        dic_insert[pro_new] = dic_insert1
                new_flag = False
    print(dic_insert)
    # 字典合并
    dic = dict(dic, **dic_insert)
    print(dic)
    file_wi(str(dic))

# 调用添加方法
# add_dic(dic)

def dic_display(dic):
    # 定义颜色
    def get_color(text, color='red'):
        """
        将字符串格式化为带颜色内容
        :param text: 接收字符串
        :param color:默认红色
        :return: ->str 返回带颜色的内容
        """
        color_table = {
            "red": "\033[31m",
            "green": "\033[32;1m",
            "yellow": "\033[33;1m",
            "purple": "\033[36;1m",
            "end": "\033[0m",  # 结束符号
        }
        li = [color_table.get(color), str(text), color_table["end"]]
        print(li)
        return ''.join(li)
    while True:
        province = input('输入Q结束,输入你喜欢的省:')
        if len(province) == 0:
            print("不能为空!")
            continue
        elif province == 'Q':
            exit()
        elif province not in dic:
            print('天朝的省份都不知道,打死你哥龟孙!!!')
            continue
        city_list=[]
        for i in dic[province]:
            city_list.append(i)
        # print(city_list)
        print(get_color('%s省包括:%s' % (province, city_list), 'green'))

while True:
            city = input("输入Q结束:输入q返回,输入城市查看县:")
            if city == 'q':
                break
            elif city == 'Q':
                exit()
            elif city in city_list:             #必须放倒最后否则下面的while不会被执行
                township = dic[province][city]
                print(get_color('%s县包括:%s' % (city,township),'yellow'))

while True:
                    county = input("输入Q结束,输入q返回,输入县进入县:")
                    if county == 'q':
                            break
                    elif county == 'Q':
                        exit()
                    elif county in township:
                        print(get_color(('%s县欢迎您!!!' % county),'purple'))

# 调用显示方法
# dic_display(dic)

while True:
    cho_ic = input('退出输入T,显示输入1,添加输入2')
    print(cho_ic)
    if cho_ic == '1':
        # print(11111111111111)
        dic_display(dic)
    elif cho_ic == '2':
        # print(2222222222222)
        add_dic(dic)
    elif cho_ic == 'T':
        break
    else:
        print('请按照要求输入')

数据

{'江西': {'萍乡': ['安源', '彭高', '上栗'], '新余': ['良山', '新钢', '兴安岭']}, '北京': {'大兴区': ['礼贤镇', '魏善庄镇', '北臧村镇'], '昌平区': ['沙河', '化庄', '白浮泉']}, '福建': {'莆田': ['荔城', '西天尾', '九化山'], '厦门': ['湖里', '思明', '海仓']}, '山西': {'大同': ['左权', '左权1', '左权2'], '太原': ['小店', '清徐', '榆次', '太1', '太23']}, '辽宁': {'沈阳': ['东一', '东二', '东单']}}

省市县_me的更多相关文章

  1. jQuery - 全国省市县三级联动

    最近有空用jquery做了一个全国省市县的三级联动,在以后或许可以用的到 ,遗憾的是我还没用封装,等有空看能不能封装成一个插件 废话不多说,贴上代码: <!doctype html> &l ...

  2. wex5 实战 省市县三级联动与地址薄同步

    无论是商城,还是快递,都要用到省市县三级联动,和地址薄,今天就以实战来制作,难点有3个: 1:三级联动,有wex5组件实现,相对简单,实战里对行数据进行了拼接 2:  地址薄选项,利用inputSel ...

  3. 利用JavaScript来实现省份—市县的二级联动

    所谓省-市二级联动是指当选择省份下拉选择框时,市县的下拉框会根据选择的省市而有相应的市县加载出来,如下图所示选择"上海市",城市的下拉选择框只会出现上海的市县: 这种二级联动非常常 ...

  4. 省市县三级联动 sql语句

    发现在网上的省市县三级联动大部分是mysql的.就算是sqlserver的,也不准确.于是就把mysql的给改了下,适用sqlserver.sql语句如下: CREATE TABLE Dic_Area ...

  5. C#.NET 大型通用信息化系统集成快速开发平台 4.0 版本 - 标准省市县数据的公司选择窗口实现

    若全国各地有上千个分公司,加盟店,网点,那就需要一个友善的选择分公司的功能,得有标准的全国省市县的划分数据.这样有了牢靠的基础数据后,才能开发程序得心应手了.当习惯了开发一个公司内部系统时,全国性大公 ...

  6. Java文件处理:分离全国省市县ID(数据来自和风天气)

    最近,在做第一行代码上的酷欧天气APP,但是发现书中的API已经用不了了,所以选择了和风天气的API,但是,在遍历省市县数据是遇到了麻烦,之前中国天气网是有个省市对应下一级行政区列表的,像这样: 但是 ...

  7. 省市县联动dropdownlist

    下面就是在提交按钮的单击事件中填写代码(代码区)(前提是把省市县的数据库建好) protected void Page_Load(object sender, EventArgs e)         ...

  8. 全中国的省市县镇乡村数据获取以及展示java源代码

    第一步.准备工作(数据源+工具): 数据源(截止目前最全面权威的官方数据):http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2013/ 爬取数据的工具 ...

  9. 用 eric6 与 PyQt5 实现python的极速GUI编程(系列02)---- 省市县(区)下拉列表多级联动

    [概览] 本文实现如下的程序: 主要步骤如下: 1.在eric6中新建项目,新建窗体 2.(自动打开)进入PyQt5 Desinger,编辑图形界面,保存 3.回到eric 6,对上一步得到的界面文件 ...

随机推荐

  1. UIView.animateWithDuration 没有动画过渡效果直接跳到最后

    当我在viewDidLoad()方法内添加以下代码的时候发现程序运行时不会有动画过度效果,而是直接跳到了最后. let x = (self.view.bounds.size.width - 268) ...

  2. TX2-start 6 CPU kernel-开启高功耗模式

    1.TX2简介 Jetson TX2是由一个GPU和一个CPU集群组成.CPU集群由双核denver2处理器和四核ARM Cortex-A57组成,通过高性能互连架构连接.拥有6个CPU核心和一个GP ...

  3. 自动化工具-jenkins

    jenkins自动化工具使用教程 自动化构建.测试.部署.代码检测越来越重要.主要有一下几点原因 企业做大,项目变多,多端支持(web,h5,小程序等) 微服务提倡高内聚低耦合,项目因拆分变多 Dev ...

  4. Python类之魔术方法

    一.什么是魔术方法? 在Python的方法,我们经常会遇见__XXX__(),这样的方法,我们一般称为"魔术方法",赶紧搬个小板凳,我们一起来看看魔术方法有啥神奇的地方,这些方法又 ...

  5. CSS3 Flexbox轻巧实现元素的水平居中和垂直居中(转)

    CSS3 Flexbox轻松实现元素的水平居中和垂直居中 网上有很多关于Flex的教程,对于Flex的叫法也不一,有的叫Flexbox,有的叫Flex,其实这两种叫法都没有错,只是Flexbox旧一点 ...

  6. 微软通过.NET Native为Windows Store应用提速

    .NET Native是微软的一次尝试,旨在降低Windows Store应用的启动时间和内存占用. 自从去年11月份,有人发现Windows Store应用的启动速度有了大幅提高后,对该项目的猜测就 ...

  7. XtraForm

    禁用窗体大小变化 this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; Note:设置成FixedSingle是无效 ...

  8. ActiveMQ消息持久化存储策略

    ActiveMQ的内核是Java编写的,也就是说如果服务端没有Java运行环境ActiveMQ是无法运行的.ActiveMQ启动时,启动脚本使用wrapper包装器来启动JVM.JVM相关的配置信息在 ...

  9. ORA-32004 的错误处理

    启动数据库时,收到了ORA-32004 的错误,错误多是一些过时且在当前版本中不在使用的参数,如果碰到类似的错误,只需要将其 reset即可. SQL> startup;ORA-32004: o ...

  10. JVM 之:Java 内存区域与内存溢出

    内存区域 Java 虚拟机在执行 Java 程序的过程中会把他所管理的内存划分为若干个不同的数据区域.Java 虚拟机规范将 JVM 所管理的内存分为以下几个运行时数据区:程序计数器.Java 虚拟机 ...