• 【第一章】:简介和入门


    Python简介

      Python的创始人为Guido van Rossum。1989年圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,做为ABC 语言的一种继承。之所以选中Python(大蟒蛇的意思)作为程序的名字,是因为他是一个叫Monty Python的喜剧团体的爱好者。

      ABC是由Guido参加设计的一种教学语言。就Guido本人看来,ABC 这种语言非常优美和强大,是专门为非专业程序员设计的。但是ABC语言并没有成功,究其原因,Guido 认为是非开放造成的。Guido 决心在Python 中避免这一错误。同时,他还想实现在ABC 中闪现过但未曾实现的东西。

      就这样,Python在Guido手中诞生了。可以说,Python是从ABC发展起来,主要受到了Modula-3(另一种相当优美且强大的语言,为小型团体所设计的)的影响。并且结合了Unix shellC的习惯。

      Python  已经成为最受欢迎的程序设计语言之一。2011年1月,它被TIOBE编程语言排行榜评为2010年度语言。自从2004年以后,python的使用率是呈线性增长 。

    Python入门

     一、python安装

    windows系统:

    1、下载安装包
        https://www.python.org/downloads/
    2、安装
        默认安装路径:C:python35
    3、配置环境变量
        【右键计算机】--》【属性】--》【高级系统设置】--》【高级】--》【环境变量】--》【在第二个内容框中找到 变量名为Path 的一行,双击】 --> 【Python安装目录追加到变值值中,用 ; 分割】
        如:原来的值;C:python35,切记前面有分号

    linux系统:

    无需安装,原装Python环境
    
    ps:如果自带2.6,请更新至3.0以上
    环境:yum install openssl-devel gcc++ gcc 可直接安装pip
    
    更新版本到3.5.2
    下载:wget https://www.python.org/ftp/python/3.5.2/Python-3.5.2.tgz
    
    解压:tar zxvf Python-3.5.2.tgz
    
    编译:cd Python-3.5.2
             ./configure --prefix=/usr/local/python3.5
    
    安装:make && make install
    
    默认安装位置/usr/local/lib/python3.5
    
    执行命令python3.5进入到运行环境
    
    mv /usr/bin/python /usr/bin/python2.6.6
    ln -s /usr/local/python3.5/bin/python3.5 /usr/bin/python
    修改yum环境     vi /usr/bin/yum
    改为如下内容  #!/usr/bin/python2.6.6

    pip安装:

    windows:
    1.在以下地址下载最新的PIP安装文件:http://pypi.python.org/pypi/pip#downloads
    2.下载pip-9.01.tar.gz (md5, pgp)完成之后,解压到一个文件夹,用CMD控制台进入解压目录,输入:python setup.py install  
    3.安装好之后,我们直接在命令行输入pip,同样会显示‘pip’不是内部命令,也不是可运行的程序。因为我们还没有添加环境变量
    C:Python27Scripts
    
    linux:
    1、官网下载pip安装包 https://pypi.python.org/pypi/pip
    2、解压下载的文件 tar zxvf pip-9.0.1.tar.gz 
    3、安装 python setup.py install
    4、执行pip命令进行验证       ln -s /usr/local/python3.5/bin/pip3 /usr/bin/pip3
    python2.7 首先下载并安装setuptools: wget --no-check-certificate https://bootstrap.pypa.io/ez_setup.py sudo python ez_setup.py --insecure

    python3.7 依赖包https://github.com/pyenv/pyenv/wiki 

    二、python初试

    在 /home/python/ 目录下创建 hello.py 文件,内容如下

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    #-Author-Lian
    
    print ("Hello World!")
    

    执行: ./hello.py      注:执行前需给予 hello.py 执行权限,chmod 755 hello.py

    三、变量赋值及命名规则

    声明一个变量name,变量name的值为:“lzl”

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
     
    name = "lzl"
    

    变量命名的规则

    变量定义的规则:
    
    变量名只能是 字母、数字或下划线的任意组合
    变量名的第一个字符不能是数字
    以下关键字不能声明为变量名
    ['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global',
     'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield']
    

    扩展 (给变量name1赋值Alex li,变量name2赋值为变量name1,name1重赋值Jack Chen,此时name2的值为多少?)

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    #-Author-Lian
    name1 = "Alex Li"
    
    name2 = name1
    print(name1, name2)
    
    name1 = "Jack Chen"
    
    print("What is the value of name2 now?")
    

    由图所示,所以最后name1的值为Jack Chen,name2的值为Alex li

     四、字符编码

    python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill)

    ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言,其最多只能用 8 位来表示(一个字节),即:2**8 = 256,所以,ASCII码最多只能表示 256 个符号。

    显然ASCII码无法将世界上的各种文字和符号全部表示,所以,就需要新出一种可以代表所有字符和符号的编码,即:Unicode

    Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,规定虽有的字符和符号最少由 16 位来表示(2个字节),即:2 **16 = 65536,
    注:此处说的的是最少2个字节,可能更多

    UTF-8,是对Unicode编码的压缩和优化,他不再使用最少使用2个字节,而是将所有的字符和符号进行分类:ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存...

    所以,python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill),如果是如下代码的话:

    报错:ascii码无法表示中文

    #!/usr/bin/env python
      
    print "你好,世界"
    

    改正:应该显示的告诉python解释器,用什么编码来执行源代码,即:

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
      
    print "你好,世界"
    

    注:python2.x版本,默认支持的字符编码为ASCll    python3.x版本,默认支持的是Unicode,不用声明字符编码可以直接显示中文

    五、用户交互及字符串拼接

    跟用户进行交互,并把输入的信息打印出来

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    #-Author-Lian
    ###########用户交互及字符串拼接################
    # python2.X与python3.X区别:    python2.X raw_input = python3.X input
    # 提示用户输入姓名、年龄、工作、工资并以信息列表的形式打印出
    
    name = input("Please input your name:")
    age = int(input("Please input your age:"))  #str强制转换为int
    job = input("Please input your job:")
    salary = input("Please input your salary:")
    
    info1 = '''
    ------------  Info of %s  ---------
    Name:%s
    Age:%d
    Job:%s
    Salary:%s
    ''' %(name,name,age,job,salary)     #%s检测数据类型为字符串,%d检测数据类型为整数,%f检测数据类型为浮点数 强制
    print(info1)
    
    info2 = '''
    ------------  Info of {_Name}  ---------
    Name:{_Name}
    Age:{_Age}
    Job:{_Job}
    Salary:{_Salary}
    ''' .format(_Name=name,
                _Age=age,
                _Job=job,
                _Salary=salary)
    print(info2)
    
    info3 = '''
    ------------  Info of {0}  ---------
    Name:{0}
    Age:{1}
    Job:{2}
    Salary:{3}
    ''' .format(name,age,job,salary)
    print(info3)
    

    六、if判断语句

    实例:用if语句验证用户登录,密文密码

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    #-Author-Lian
    #############验证用户登录-密文密码##############
    # 提示输入用户名密码
    # 验证用户名密码
    #       如果错误,则输出用户名密码错误
    #       如果成功,则输出欢迎,xxx!
    
    import getpass     #标准模块,import调用
    
    name = input("Please input your name:")
    password = getpass.getpass("Please input your password:")
    
    if name == "lzl" and pwd == "lzl@123":
        print ("Welcome to,lzl!")
    else:
        print ("The user name and password mistake")
    

    实例:用if语句实现猜幸运数字游戏

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    #-Author-Lian
    ##############猜幸运数字################
    # 提示用户输入猜的幸运数字(1-100)
    # 根据输入的数字做判断
    #         如果猜对,输出恭喜你猜对了
    #         如果猜的数字大了,输出数字往小点猜
    #         否则,输出数字往大点猜
    
    lucky_num = 66
    
    guess_num = int(input("Please enter your guess lucky number(1-100):"))
    
    if guess_num == lucky_num:
        print ("Congratulations you guessed it!")
    elif guess_num > lucky_num :
        print ("Think it smaller...")
    else:
        print ("Think it bigger...")
    

    七、while循环语句

    实例:猜数字游戏升级版(循环猜数字,直到猜到为止)

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    #-Author-Lian
    ##############猜幸运数字################
    
    lucky_num = 66       # 设置幸运数字
    
    while True:    # while循环:
                         # 输入猜的的幸运数字范围1-100
        guess_num = int(input("Please enter your guess lucky number(1-100):"))
    
        if guess_num == lucky_num:      # 如果猜对,输出恭喜你猜对了,并退出
            print ("Congratulations you guessed it!")
            break                       #break 结束循环 continue 跳出本次循环,继续下次循环 exit 结束程序
        elif guess_num > lucky_num :    # 如果猜的数字大了,输出数字往小点猜
            print ("Think it smaller...")
        else:                           # 否则,输出数字往大点猜
            print ("Think it bigger...")
        
    

    实例:猜数字游戏完善版(循环猜数字,允许猜三次机会)

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    #-Author-Lian
    ##############猜幸运数字+次数限制################
    
    lucky_num = 66       # 设置幸运数字
    count = 0            # 设置初始值count=0
    
    while count < 3 :    # while判断count是否小于3,如果小于3则:
                         # 输入猜的的幸运数字范围1-100
        guess_num = int(input("Please enter your guess lucky number(1-100):"))
    
        if guess_num == lucky_num:      # 如果猜对,输出恭喜你猜对了,并退出
            print ("Congratulations you guessed it!")
            break                       #break 结束循环 continue 跳出本次循环,继续下次循环 exit 结束程序
        elif guess_num > lucky_num :    # 如果猜的数字大了,输出数字往小点猜
            print ("Think it smaller...")
        else:                           # 否则,输出数字往大点猜
            print ("Think it bigger...")
        count += 1                       #每次循环结束count加1
    else:
        print ("You tried so many times!")  #while循环超过三次,则输出试过太多次了
    

    八、for循环语句

    实例:用for循环实现猜数字游戏,限制三次机会

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    #-Author-Lian
    ##############猜幸运数字+次数限制################
    
    lucky_num = 66       # 设置幸运数字
    
    for i in range(3):    # while判断count是否小于3,如果小于3则:
                         # 输入猜的的幸运数字范围1-100
        guess_num = int(input("Please enter your guess lucky number(1-100):"))
    
        if guess_num == lucky_num:      # 如果猜对,输出恭喜你猜对了,并退出
            print ("Congratulations you guessed it!")
            break                       #break 结束循环 continue 跳出本次循环,继续下次循环 exit 结束程序
        elif guess_num > lucky_num :    # 如果猜的数字大了,输出数字往小点猜
            print ("Think it smaller...")
        else:                           # 否则,输出数字往大点猜
            print ("Think it bigger...")
    else:
        print ("You tried so many times!")  #while循环超过三次,则输出试过太多次了
    

    九、扩展

    ① 编写登陆接口 要求:

    • 输入用户名密码
    • 认证成功后显示欢迎信息
    • 输错三次后锁定

    # 流程图如下:         

     # login_interface.py 程序代码

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    #-Author-Lian
    ################登录接口程序################
    
    # -*-      运行环境python3.5.2   -*-
    #user_information、locked_information、day1_login_interface.py三个文件拷贝到同一级目录
    #授权:chmod 755  day1_login_interface.py
    #执行:python  day1_login_interface.py
    
    ####记录可登录用户、密码信息文件user_information####
    # Dave    dave123
    # John    john123
    # Luffy    luffy123
    ####记录被锁定的用户信息文件locked_information####
    # lzl
    # Alex
    
    #
    Count = 1                           #设置计数器,统计下面第一个while大循环的次数 赋值变量Count,初始值为1
    Last_user = ""                     #针对上次登录的用户名进行记录,如果连续三次登录错误的用户名是一致的话才进行锁定
                                        #赋值变量Last_user,初始值为空
    Match_count = 1                     #统计Last_user与上次登录的用户名匹配的次数,变量Match_count初始值为1
    
    while True:
        Locked = open("locked_information", "r")  # 读取被锁定用户名信息文件
        User_pwd = open("user_information", "r")  # 读取可登录的用户、密码信息文件
    
        User = input("Please enter the login username:")            #提示用户输入登录用户名并赋值给User
        Passwd = input("Please enter login password:")              # 提示用户输入登录密码并赋值给Passwd
    
        if len(User) == 0:
            print("Error:Enter the user is null! please try again..")
            continue
        if Last_user == User:           #if语句判断,本次登录的用户名跟上次登录的用户名是否匹配
            Match_count +=1             #如果匹配成功,表示两次连续登录的用户名一致,Match_count计数加1
        else:                           #如果匹配失败,Match_count计数恢复为初始值1
            Match_count = 1
    
        Re_count = 3 - Count            #设置变量Re_count为还进行登录的剩余次数,判断登录失败后会用到
    
    
        for Blacklist in Locked.readlines():            #for循环读取被锁定用户名,生成变量Blacklist
            Blacklist = Blacklist.strip("
    ")           #对变量Blacklist进行去换行符操作
            if User == Blacklist:                   #判断如果输入的用户名在Blacklist中,则提示用户被锁定并退出登录
                print ("Login username ",User," is locked, login fails...")
                exit()                                #退出程序
    
        for i_f_m in User_pwd.readlines():              #for循环读取可登录用户、密码信息文件,赋值变量i_f_m
            i_f_m = (i_f_m.strip("
    ")).split()             #对变量i_f_m进行先去换行符,然后以空格符分割为列表的操作
            if User == i_f_m[0] and Passwd == i_f_m[1]:     #对登录用户名和密码进行匹配,两者都匹配成功则显示恭喜登陆成功
                print ("Congratulations to login successful!")
                exit()                                #退出程序
                print(User,Passwd)
    
        else:
            if Re_count > 0 :    #验证上面for循环匹配失败并且剩余登录次数大于0后,提示错误和剩余次数
                                 #如果去掉if判断,则在匹配用户锁定时打印信息重合,放到下面while循环里面则会添加多余输出
                print("Error: The username and password mistate!  You can also try", Re_count, "times...")
    
            while Re_count > 0 :    #while循环语句,重试登录次数大于0时,提示用户是否还要继续登陆
                If_cont = input("Whether or not to continue to login?(Y/N):")
                if If_cont == "Y":                  #匹配字符Y
                    break                           #跳出当前while,重新输入用户名密码
                elif If_cont == "N":                #匹配字符N
                    print ("-- Bye --")
                    exit()                           #终止程序
                else:                               #字符输入错误,重新提示输入正确的字符Y 和 N
                    print("*        Please enter 【Y】 or 【N】        *")
                    continue                        #跳出当前循环执行下次循环
            else:                   #while循环语句,当用户重试登录次数为0时,执行下面语句
                if Match_count == 3:                #连续三次输入的用户名一致,把用户名加入到黑名单
                    Locked = open("locked_information", "a")    #对文件locked_information追加写操作
                    Locked.write(User + "
    ")       #把用户名写入到黑名单并执行下换行符
                    print("Error: The username and password mistate! The current user ",User," is locked...")
                    break                           #提示锁定用户并退出程序
                else:                               #连续三次输入的用户名不一致,提示用户名密码错误,不进行锁定
                    print ("Error: The username and password mistate! Bye-bye!")
                    break                          #退出程序
    
        Count +=1                                   #循环结束,Count计数加1
        Last_user = User                            #循环结束,Last_userc重新赋值
    Locked.close()
    User_pwd.close()
    login_interface.py

     # 程序 readme

    # 这是一个模拟真实用户登录系统的程序
    
    ### 作者介绍:
    * author:lzl
    ### 博客地址:
    * http://www.cnblogs.com/lianzhilei/p/5703675.html
    
    ### 实现效果:
    * user_information文件记录了可登录用户名和密码,每次登录只有完全匹配文件中的用户名和密码才能登录
    * locked_information文件记录了被锁定的用户,每次登录输入被锁定的用户,会提示当前用户被锁定,并退出
    * 用户连续三次登录失败且三次输入的用户名一样,会显示当前用户被锁定,退出程序并且把用户名记录到locked_information
    * 用户连续三次登录失败,但三次的用户名不一样,提示登录失败,退出程序用户名不锁定
    * 前两次登录失败时可选择是否还要继续登录,登录失败时会显示剩余登录次数
    
    ### Bug 可完善的地方:
    * 随意输入任何用户名都可进行登录,即使不存在与user_information文件中也可被锁定
    * 输入的密码时可以改成密文的形式
    
    ### 运行环境:
    * Python3.0+ 最佳Python3.5.2
    
    
    ### 目录结构:
    
        Day1
        ├── 登录接口
        │   ├── day1_login_interface.py
        │   └── locked_information
        │   ├── user_information
        │   ├── login_interface.png
        │   └── readme
    
    ### linux 运行说明:
    
    * user_information、locked_information、day1_login_interface.py拷贝到同一级目录下
    * 加执行权限 chmod 755  day1_login_interface.py
    * 执行程序   python  day1_login_interface.py
    readme

    多级菜单,查询街道/地区邮政编码

    • 三级菜单
    • 可依次选择进入各子菜单
    • 子菜单实现b可以返回,q可以退出

     # 流程图如下

    multistage_menu.py程序代码如下:

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    #-Author-Lian
    ################多级菜单,查询街道/地区邮政编码################
    
    # -*-      运行环境python3.5.2   -*-
    #授权:chmod 755  day1_multistage_menu.py
    #执行:python  day1_multistage_menu.py
    #注:定义Main_menu主菜单  字典套字典套列表形式
    
    Main_menu = {                               #定义主菜单Main_menu作为数据库
        '北京':{
            '石景山区':['八宝山街道','老山街道','八角街道','古城街道','苹果园街道','金顶街街道','广宁街道','鲁谷社区'],
            '朝阳区':['和平街街道','朝外街道','劲松街道','建外街道','呼家楼街道','八里庄街道','三里屯街道','潘家园街道'],
            '昌平区':['城北街道','城南街道','天通苑北街道','天通苑南街道','霍营街道','回龙观街道','龙泽园街道','史各庄街道'],
            '东城区':['安定门街道','建国门街道','东直门街道','天坛街道','东四街道','龙潭街道','前门街道','景山街道'],
            '海淀区':['清华园街道','香山街道','清河街道','上地街道','万柳地区','中关村街道','海淀街道','学院路街道']
                },
        '上海':{
            '黄浦区':['南京东路街道','外滩街道','半淞园路街道','小东门街道','豫园街道','老西门街道','五里桥街道','淮海中路街道'],
            '浦东新区':['潍坊新村街道','陆家嘴街道','周家渡街道','塘桥街道','洋泾街道','东明路街道','花木街道','浦兴路街道'],
            '徐汇区':['湖南路街道','天平路街道','枫林路街道','徐家汇街道','斜土路街道','长桥街道','龙华街道','田林街道'],
            '长宁区':["华阳路街道","新华路街道","江苏路街道","天山路街道","周家桥街道","虹桥街道","仙霞新村街道","程家桥街道"],
            '杨浦区':['定海路街道','平凉路街道','江浦路街道','四平路街道','控江路街道','长白新村街道','延吉新村街道','殷行街道']
                },
        '香港':{
            '香港岛':['中西区','湾仔区','东区','南区','石澳','大浪湾','夏萍湾','龟背湾'],
            '九龙半岛':['油尖旺区','深水埗区','九龙城区','黄大仙区','观塘区','维多利亚港','旺角','新蒲岗'],
            '新界':['北区','大埔区','沙田区','西贡区','荃湾区','屯门区','元朗区','葵青区'],
            '港岛区':['中环','湾仔','南区','太平山','尖沙咀','钻石山','山顶','大屿山'],
            '九龙区':['龙门','九龙','侯王庙','万佛寺','东普陀','青松观','妙法寺','灵渡寺']
                }
    }
    
    import random                             #调用random,生成邮编码
    
    while True:
        Num_ct = 1                      #城市ID序号,初始值1
    
        Dic_city = {}                    #定义字典,初始值空
        Dic_county = {}
        Dic_street = {}
        print("               -*-   邮政编码查询系统   -*-")
        for City in Main_menu.keys():                       #循环 把可选的城市赋值给变量City
            print ("",Num_ct,City)                              #打印ID序号和城市名
            Dic_city[Num_ct] = City                             #绑定ID序号和城市名,生成字典Dic_city
            Num_ct +=1                                           #每次循环ID序号+1
        print( " q", "退出程序")
        City_id = input("请输入要查询城市的ID序号 :")           #for循环结束,输入要选择的城市ID 注:此时输入的类型为字符串
        if City_id == "q":  # 判断输入是否为q 退出程序
             print("    -*-   Bye-bye!    -*-")
             exit()
        elif City_id in ['1','2','3']:                          #匹配输入是否为1,2,3
            City_id = int(City_id)                                #字符类型转换  注:如果不转换,下面字典匹配不到key值
            Sec_menu = (Main_menu.get((Dic_city.get(City_id))))     #定义二级菜单,生成二级数据库
    
            while True:                                     #while 循环
                Num_co = 1                                                #市区ID序号,初始值1
                for County in Sec_menu.keys():                            #循环 把可选的市区赋值给变量County
                    print("",Num_co, County)                               #打印ID序号和市区名
                    Dic_county[Num_co] = County                             #绑定ID序号和市区名,生成字典Dic_county
                    Num_co += 1                                             #每次循环ID序号+1
                print(" b", "返回上级重新选择城市", "
    ", "q", "退出程序")
                County_id = input("请输入要查询城区的ID序号 :")            #输入要选择的市区ID
                if County_id == "b":                                        #判断输入是否为b 返回上级菜单
                    break
                elif County_id == "q":                                      #判断输入是否为q 退出程序
                    print("    -*-   Bye-bye!    -*-")
                    exit()
                elif County_id in ['1','2','3','4','5']:                   #判断输入是否为1-5
                    County_id = int(County_id)                                 #字符类型转换
                    Third_menu = (Sec_menu.get((Dic_county.get(County_id))))    #定义三级菜单,生成三级数据库
    
                    while True:                                   #while 循环
                        Num_st = 1                                           #街道数字标号,初始值1
                        for Street in Third_menu:                           #循环 把可选的街道赋值给变量Street
                            print ("",Num_st,Street)                         #打印ID序号和街道名
                            Dic_street[Num_st] = Street                       #绑定ID序号和市区名,生成字典Dic_street
                            Num_st +=1                                         #每次循环ID序号+1
                        print (" b","返回上级重新查询城区","
    ","q","退出程序")
                        Street_id = input("请输入要查询街道/区域的ID序号 :")        #输入要选择的街道ID序号
                        if Street_id == "b":                                    #判断输入是否为b 返回上级菜单
                            break
                        elif Street_id == "q":                                  #判断输入是否为q 退出程序
                            print("    -*-   Bye-bye!    -*-")
                            exit()
                        elif Street_id in ['1', '2', '3', '4', '5','6','7','8']:    #判断输入是否为1-8
                            Street_id = int(Street_id)                              #字符类型转换
    
                            print("您查询的地址:",Dic_city.get(City_id),Dic_county.get(County_id),Dic_street.get(Street_id),
                                  "   邮政编码为:",random.randint(100000,300000))   #查询成功 输出
                            exit()                                                  #查询成功 退出
                            ####留位####注:如果还行输入成功后加判断是否继续查询,可在此加代码
    
    
                        else:                   #输入格式错误,提示
                            print("           输入的格式错误!请重新输入数字 1 & 2 &  ...  & 7 & 8 或字符 b & q")
    
                else:                           #输入格式错误,提示
                    print("           输入的格式错误!请重新输入数字 1 & 2 & 3 & 4 & 5 或字符 b & q")
    
        else:                                   #输入格式错误,提示
            print("            输入的格式错误!请重新输入数字 1 & 2 & 3 或 字符 q")
    multistage_menu.py

    # 程序 readme

    # 这是一个模拟查询街道/地区邮政编码的程序
    # 多级菜单,使用了字典套字典套列表的形式
    
    ### 作者介绍:
    * author:lzl
    ### 博客地址:
    * http://www.cnblogs.com/lianzhilei/p/5703675.html
    
    ### 实现效果:
    * 进入程序每级菜单可选择要查询的ID序号,选择序号会进入到相应的地区子菜单中
    * 每级菜单都可输入b返回上一级菜单,输入q可退出程序
    * 任何一级菜单输入错误的字符,会提示重新输入ID序号
    * 最后三级菜单选择完毕,输入选择地区的邮政编码,查询完成,退出程序
    
    ### Bug 可完善的地方:
    * 邮政编码由随机数设定,数据不准确
    * 由于用到的字典是无序的,所以同一级菜单每次显示的ID序号可能不一样
    
    ### 运行环境:
    * Python3.0+ 最佳Python3.5.2
    
    
    ### 目录结构:
    
        Day1
        ├── 三级菜单
        │   ├── day1_multistage_menu.py
        │   ├── multistage_menu.png
        │   └── readme
    
    ### linux 运行说明:
    
    * 加执行权限 chmod 755  day1_multistage_menu.py
    * 执行程序   python  day1_multistage_menu.py
    readme
    BIG3CLIK6F-eyJsaWNlbnNlSWQiOiJCSUczQ0xJSzZGIiwibGljZW5zZWVOYW1lIjoibGFuIHl1IiwiYXNzaWduZWVOYW1lIjoiIiwiYXNzaWduZWVFbWFpbCI6IiIsImxpY2Vuc2VSZXN0cmljdGlvbiI6IkZvciBlZHVjYXRpb25hbCB1c2Ugb25seSIsImNoZWNrQ29uY3VycmVudFVzZSI6ZmFsc2UsInByb2R1Y3RzIjpbeyJjb2RlIjoiQUMiLCJwYWlkVXBUbyI6IjIwMTctMTEtMjMifSx7ImNvZGUiOiJETSIsInBhaWRVcFRvIjoiMjAxNy0xMS0yMyJ9LHsiY29kZSI6IklJIiwicGFpZFVwVG8iOiIyMDE3LTExLTIzIn0seyJjb2RlIjoiUlMwIiwicGFpZFVwVG8iOiIyMDE3LTExLTIzIn0seyJjb2RlIjoiV1MiLCJwYWlkVXBUbyI6IjIwMTctMTEtMjMifSx7ImNvZGUiOiJEUE4iLCJwYWlkVXBUbyI6IjIwMTctMTEtMjMifSx7ImNvZGUiOiJSQyIsInBhaWRVcFRvIjoiMjAxNy0xMS0yMyJ9LHsiY29kZSI6IlBTIiwicGFpZFVwVG8iOiIyMDE3LTExLTIzIn0seyJjb2RlIjoiREMiLCJwYWlkVXBUbyI6IjIwMTctMTEtMjMifSx7ImNvZGUiOiJEQiIsInBhaWRVcFRvIjoiMjAxNy0xMS0yMyJ9LHsiY29kZSI6IlJNIiwicGFpZFVwVG8iOiIyMDE3LTExLTIzIn0seyJjb2RlIjoiUEMiLCJwYWlkVXBUbyI6IjIwMTctMTEtMjMifSx7ImNvZGUiOiJDTCIsInBhaWRVcFRvIjoiMjAxNy0xMS0yMyJ9XSwiaGFzaCI6IjQ3NzU1MTcvMCIsImdyYWNlUGVyaW9kRGF5cyI6MCwiYXV0b1Byb2xvbmdhdGVkIjpmYWxzZSwiaXNBdXRvUHJvbG9uZ2F0ZWQiOmZhbHNlfQ==-iygsIMXTVeSyYkUxAqpHmymrgwN5InkOfeRhhPIPa88FO9FRuZosIBTY18tflChACznk3qferT7iMGKm7pumDTR4FbVVlK/3n1ER0eMKu2NcaXb7m10xT6kLW1Xb3LtuZEnuis5pYuEwT1zR7GskeNWdYZ0dAJpNDLFrqPyAPo5s1KLDHKpw+VfVd4uf7RMjOIzuJhAAYAG+amyivQt61I9aYiwpHQvUphvTwi0X0qL/oDJHAQbIv4Qwscyo4aYZJBKutYioZH9rgOP6Yw/sCltpoPWlJtDOcw/iEWYiCVG1pH9AWjCYXZ9AbbEBOWV71IQr5VWrsqFZ7cg7hLEJ3A==-MIIEPjCCAiagAwIBAgIBBTANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBMB4XDTE1MTEwMjA4MjE0OFoXDTE4MTEwMTA4MjE0OFowETEPMA0GA1UEAwwGcHJvZDN5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxcQkq+zdxlR2mmRYBPzGbUNdMN6OaXiXzxIWtMEkrJMO/5oUfQJbLLuMSMK0QHFmaI37WShyxZcfRCidwXjot4zmNBKnlyHodDij/78TmVqFl8nOeD5+07B8VEaIu7c3E1N+e1doC6wht4I4+IEmtsPAdoaj5WCQVQbrI8KeT8M9VcBIWX7fD0fhexfg3ZRt0xqwMcXGNp3DdJHiO0rCdU+Itv7EmtnSVq9jBG1usMSFvMowR25mju2JcPFp1+I4ZI+FqgR8gyG8oiNDyNEoAbsR3lOpI7grUYSvkB/xVy/VoklPCK2h0f0GJxFjnye8NT1PAywoyl7RmiAVRE/EKwIDAQABo4GZMIGWMAkGA1UdEwQCMAAwHQYDVR0OBBYEFGEpG9oZGcfLMGNBkY7SgHiMGgTcMEgGA1UdIwRBMD+AFKOetkhnQhI2Qb1t4Lm0oFKLl/GzoRykGjAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBggkA0myxg7KDeeEwEwYDVR0lBAwwCgYIKwYBBQUHAwEwCwYDVR0PBAQDAgWgMA0GCSqGSIb3DQEBCwUAA4ICAQC9WZuYgQedSuOc5TOUSrRigMw4/+wuC5EtZBfvdl4HT/8vzMW/oUlIP4YCvA0XKyBaCJ2iX+ZCDKoPfiYXiaSiH+HxAPV6J79vvouxKrWg2XV6ShFtPLP+0gPdGq3x9R3+kJbmAm8w+FOdlWqAfJrLvpzMGNeDU14YGXiZ9bVzmIQbwrBA+c/F4tlK/DV07dsNExihqFoibnqDiVNTGombaU2dDup2gwKdL81ua8EIcGNExHe82kjF4zwfadHk3bQVvbfdAwxcDy4xBjs3L4raPLU3yenSzr/OEur1+jfOxnQSmEcMXKXgrAQ9U55gwjcOFKrgOxEdek/Sk1VfOjvS+nuM4eyEruFMfaZHzoQiuw4IqgGc45ohFH0UUyjYcuFxxDSU9lMCv8qdHKm+wnPRb0l9l5vXsCBDuhAGYD6ss+Ga+aDY6f/qXZuUCEUOH3QUNbbCUlviSz6+GiRnt1kA9N2Qachl+2yBfaqUqr8h7Z2gsx5LcIf5kYNsqJ0GavXTVyWh7PYiKX4bs354ZQLUwwa/cG++2+wNWP+HtBhVxMRNTdVhSm38AknZlD+PTAsWGu9GyLmhti2EnVwGybSD2Dxmhxk3IPCkhKAK+pl0eWYGZWG3tJ9mZ7SowcXLWDFAk0lRJnKGFMTggrWjV8GYpw5bq23VmIqqDLgkNzuoog==
    pycharm激活码
  • 相关阅读:
    自我学习而已——javascript——变量,作用域和内存问题
    自我学习而已——javascript——数据类型部分
    面向对象三大特性之封装
    面向对象三大特性之继承与多态
    初识面向对象
    python常用模块(re模块)
    递归函数与算法
    Python之匿名函数
    python之内置函数
    各种推导式
  • 原文地址:https://www.cnblogs.com/lianzhilei/p/5703675.html
Copyright © 2020-2023  润新知