004_省市县级联菜单小程序

#_*_coding:utf-8_*_'''写程序:多级菜单需求:1.现有省份、市、县3级结构,要求程序启动后,允许用户可依次选择进入各子菜单2.可在任意一级菜单返回上一级3.可以在任意一级菜单退出Created on 2019年9月13日@author: Administrator'''#利用openpyxl读写excel,注意这里只能是xlsx类型的excel#安装...
摘要由CSDN通过智能技术生成
#_*_coding:utf-8_*_
'''
写程序:多级菜单
需求:
1.现有省份、市、县3级结构,要求程序启动后,允许用户可依次选择进入各子菜单
2.可在任意一级菜单返回上一级
3.可以在任意一级菜单退出

Created on 2019年9月13日

@author: Administrator
'''
#利用openpyxl读写excel,注意这里只能是xlsx类型的excel
#安装的话,直接输入命令"pip install openpyxl"就行,很快就能安装完毕。
import openpyxl;


def loadSheet(rows,worksheet,areaDict):
    #循环遍历该sheet页中每行记录
    for i in range(rows):
        #跳过第一行
        if i<=0:
            continue;
        
        #获取第n行中的数据列表
        row = [item.value for item in list(worksheet.rows)[i]];
        prov = row[0]; #省份名称
        city = row[1]; #地市名称
        town = row[2]; #区县名称
        #根据省份名称获取该省份对应的字典
        cityD = areaDict.get(prov);
        #如果能获取到,则寻找该字典中key为city的区县集合
        if cityD: #如果找到了
            townD = cityD.get(city); #获取该区县集合
            #如果区县列表不为空,则将该区县元素添加到集合中,如果为空则新建一个集合并将其放入地市字典中
            if townD: #如果找到了集合
                townD.add(town); #将新的元素放入该集合中
                cityD[city] = townD; #并将更新后的集合放回地市字典中
            else: #如果没有找到区县集合
                townD={town}; #将该区县放入一个新的集合中
                cityD[city] = townD;#将该新的集合放入地市字典
        else:
            #print("没有获取到该省份[%s]对应的字典!" % prov);
            cityD = {};
            cityD[city] = {town};
            areaDict[prov] = cityD;
    return areaDict;

#检查入参
def checkInput(command):
    result = 1;
    if command == "quit":
        result = -1;
    elif len(command.strip())<=0:
        print("不能为空,请重新输入!");
        result = 0;
    elif " " not in command and command != "1":
        print("输入的值不合法,请输入1或者'菜单编号 名称'");
        result = 0;
    elif " " in command:
        result = 1;    
    return result; 

#从用户选择的上级菜单返回下级菜单列表集合
def getDictListFromUserSelect(areaDict,name,level):
    if level == 1 and len(name)<=0:
        print("省份");   
        for key in areaDict.keys():
            print("%s" % key);
            
    elif level == 1 and len(name)>0:
        cityDict = areaDict.get(name);
        if cityDict: 
            print("省份--地市");
            print(name);
            for key in cityDict.keys():
                print("----%s" % key);
        else:
            print("对不起,您输入的【%s】有误查不到,请重新输入!" % name);
    elif level == 2 and len(name)>0:
        noon = True;
        for key,values in areaDict.items():            
            townDict = values.get(name);
            if townDict:
                noon = False;            
                print("省份--地市--区县");
                print(key);  
                print("----%s" % name);
                for town in townDict:
                    print("--------%s" % town);
            else:
                continue;
        if noon:
            print("对不起,您输入的【%s】有误查不到,请重新输入!" % name);
        return;
        
    
    
#主函数入口
if __name__ == "__main__":    
    print("1.开始执行主程序...");    
    #定义一个地域字典
    areaDict={};
        
    #加载城市列表数据
    filename = "D:\java\workspace\Python_001\省市县区.xlsx";
    workbook = openpyxl.load_workbook(filename);#加载文件
    worksheet = workbook.get_sheet_by_name("省市县区");#获取第一个sheet页
    rows = worksheet.max_row;#获取最大行号
    
    print("2.调用加载xlsx文件的函数加载字典...")
    areaDict = loadSheet(rows,worksheet,areaDict);   
    print(areaDict);
    
    print("3.与用户交互获取用户要查询的省份、地市、区县...");
    print("==========================================================")
    print('''
省份--地市--区县
请模拟用户选择地域菜单的动作,输入两个值中间用空格分隔,第一个值为数字(1,2,3),分别代表选择
哪一列;第二个值为具体的名称。必须从第一个菜单开始选择,否则无法进行。首次选择时可以只输入1,
 二次选择时,必须输入菜单号和菜单中的名称。
例如:1
    1 河北省
    2 银川市   
''')
    print("==========================================================")
    
    goon = True;
    while goon:
        command = input("请模拟选择菜单动作,1,2,3分别代表三级目录,选择一级时不需要输入名称:");
        flag = checkInput(command);
        if flag == -1:
            print("用户退出!");
            goon = False;
            break; 
        elif flag == 0:            
            continue;
        else:
            name="";
            level = 1;
            if " " in command:
                arry=command.split(" ");
                name = arry[1];
                try:
                    level = int(arry[0]);
                except:
                    level = 1;
            getDictListFromUserSelect(areaDict,name,level);
    
    
    workbook.close();

运行效果如下:

总结:

1.读取excel文件:需要安装openpyxl类库。

  利用openpyxl读写excel,注意这里只能是xlsx类型的excel
  安装的话,直接输入命令"pip install openpyxl"就行,很快就能安装完毕。

import openpyxl;

filename = "D:\省市县区.xlsx";
workbook = openpyxl.load_workbook(filename);
worksheet = workbook.get_sheet_by_name("省市县区");
rows = worksheet.max_row;
row3=[item.value for item in list(worksheet.rows)[2]]
print('第3行值',row3)
col3=[item.value for item in list(worksheet.columns)[2]]
print('第3行值',col3)
cell_2_3=worksheet.cell(row=2,column=3).value
print('第2行第3列值',cell_2_3)

  省市县区.xlsx参见资源中附件

2.函数的定义

def 函数名(参数):
    函数体...
    return 返回值 

3.字符串的相关处理

s = " and ddeeewx ";
#1.大写变小写,小写变大写
s.swapcase();

#2.首字母大写
s.capitalize();

#3.忽略大小写
s.casefold();

#4.字符串居中总长度为50,不够的补充*
s.center(50,'*');

#5.统计目标字符在字符串中出现的次数
s.count('0',0,5);

#6.将tab键长度变为指定的数值
s.expandtabs(20);

#7.查找字符串,没有返回-1
s.find('0');

#8.字符串格式化
s='I am {0} ,age is {1}';
s.format('alex',22);

s='I am {name}, age is {age}';
s.format(name='掌声',age=22);

#9.去除空格和tab
s.strip(); 去除首尾的空格
s.lstrip();去除左侧的空格
s.rstrip();去除右侧的空格

#10.字符串拆分
comand = "1 北京";
arr = command.split(" "); #使用空格拆分字符串
code = arr[0];
name = arr[1];

#11.两个字符串比较使用==
a = " zhangsan ";
b = "zhangsan";
if a == b:
    then True;
else:
    False;

#12.判断字符串中是否含有某个字符
a = "zhangsan@lisi";
if "@" in a:
    then True;
else:
    False;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值