三、python基础之条件和循环

发布时间:2019-08-24 09:26:47编辑:auto阅读(1117)

    目录

    一.if语句

    1.1 功能

    1.2 语法

    1.2.1:单分支,单重条件判断

    1.2.2:单分支,多重条件判断

    1.2.3:if+else

    1.2.4:多分支if+elif+else

    1.2.5:if语句小结

    1.3 案例

    1.4 三元表达式

    二.while语句

    2.1 功能

    2.2 语法

    2.2.1:基本语法

    2.2.2:计数循环

    2.2.3:无限循环

    2.2.4:while与break,continue,else连用

    2.2.5:while语句小结

    2.3 案例

    三.for语句

    3.1 功能

    3.2 语法

    3.2.1:基本语法

    3.2.2:遍历序列类型

    3.2.3:遍历可迭代对象或迭代器

    3.2.4:for基于range()实现计数循环

    3.2.5:for与break,continue,else

    3.2.6:for语句小结

     


    一.if语句


     

    1.1 功能


    计算机又被称作电脑,意指计算机可以像人脑一样,根据周围环境条件(即expession)的变化做出不同的反应(即执行代码)


    if语句就是来控制计算机实现这一功能


     

    1.2 语法


     

    1.2.1:单分支,单重条件判断


    if expression:


        expr_true_suite


    注释:expession为真执行代码expr_true_suite


     

    1.2.2:单分支,多重条件判断


    if not  active or over_time >= 10:


        print('Warning:service is dead')


        warn_tag+=1


     

    1.2.3:if+else


    if expression:


        expr_true_suite   


    else:


        expr_false_suite


     

    1.2.4:多分支if+elif+else


    if expession1:


        expr1_true_suite


    elif expression2:


        expr2_true_suite


    elif expession3:


        expr3_true_suite


    else:


        none_of_the_above_suite


     

    1.2.5:if语句小结


    if 后表达式返回值为True则执行其子代码块,然后此if语句到此终结,否则进入下一分支判断,直到满足其中一个分支,执行后终结if

    expression可以引入运算符:not,and,or,is,is not

    多重expression为加强可读性最好用括号包含

    if与else缩进级别一致表示是一对

    elif与else都是可选的

    一个if判断最多只有一个else但是可以有多个elif

    else代表if判断的终结

    expession可以是返回值为布尔值的表达式(例x>1,x is not None)的形式,也可是单个标准对象(例 x=1;if x:print('ok'))

    所有标准对象均可用于布尔测试,同类型的对象之间可以比较大小。每个对象天生具有布 尔 True 或 False 值。空对象、值为零的任何数字或者 Null 对象 None 的布尔值都是 False。

    下列对象的布尔值是 False


    1036857-20161009183745420-126465507.png


    三元表达式


    语法:


    expr_true_suite if expession else expr_false_suite


    案例一:


    >>> active=1

    >>> print('service is active') if active else print('service is inactive')

    service is active

    案例二:


    >>> x=1

    >>> y=2

    >>> smaller=x if x < y else y

    >>> smaller

    1

    二.while语句


     

    2.1 功能


    while循环的本质就是让计算机在满足某一条件的前提下去重复做同一件事情(即while循环为条件循环,包含:1.条件计数循环,2条件无限循环)


    这一条件指:条件表达式


    同一件事指:while循环体包含的代码块


    重复的事情例如:从1加到10000,求1-10000内所有奇数,服务等待连接


     

    2.2 语法


     

    2.2.1:基本语法


    while expression:


        suite_to_repeat


    注解:重复执行suite_to_repeat,直到expression不再为真


     

    2.2.2:计数循环


    count=0

    while (count < 9):

        print('the loop is %s' %count)

        count+=1 

     

    2.2.3:无限循环


    count=0

    while True:

        print('the loop is %s' %count)

        count+=1



    tag=True

    count=0

    while tag:

        if count == 9:

            tag=False

        print('the loop is %s' %count)

        count+=1 


    while语句小结


    条件为真就重复执行代码,直到条件不再为真,而if是条件为真,只执行一次代码就结束了

    while有计数循环和无限循环两种,无限循环可以用于某一服务的主程序一直处于等待被连接的状态

    break代表跳出本层循环,continue代表跳出本次循环

    while循环在没有被break打断的情况下结束,会执行else后代码


    2.3 案例

    用户登陆验证

    import getpass


    account_dict={'alex':'123','eric':'456','rain':'789'}

    count = 0

    while count < 3:

        name=input('用户名: ').strip()

        passwd=getpass.getpass('密码: ')

        if name in account_dict:

            real_pass=account_dict.get(name)

            if passwd == real_pass:

                print('登陆成功')

                break

            else:

                print('密码输入错误')

                count+=1

                continue

        else:

            print('用户不存在')

            count+=1

            continue

    else:

        print('尝试次数达到3次,请稍后重试')



    三.for语句


     

    3.1 功能


    for 循环提供了python中最强大的循环结构(for循环是一种迭代循环机制,而while循环是条件循环,迭代即重复相同的逻辑操作,每次操作都是基于上一次的结果,而进行的)


     

    3.2 语法


     

    3.2.1:基本语法


    for iter_var in iterable:


        suite_to_repeat


    注解:每次循环, iter_var 迭代变量被设置为可迭代对象(序列, 迭代器, 或者是其他支持迭代的对 象)的当前元素, 提供给 suite_to_repeat 语句块使用.


    3.2.2:遍历序列类型

    name_list=['alex','eric','rain','xxx']


    #通过序列项迭代

    for i in name_list:

        print(i)


    #通过序列索引迭代

    for i in range(len(name_list)):

        print('index is %s,name is %s' %(i,name_list[i]))


    #基于enumerate的项和索引

    for i,name in enumerate(name_list,2):

        print('index is %s,name is %s' %(i,name)) 


    3.2.3:遍历可迭代对象或迭代器


    迭代对象:就是一个具有next()方法的对象,obj.next()每执行一次,返回一行内容所有内容迭代完后,


    迭代器引发一 个 StopIteration 异常告诉程序循环结束. for 语句在内部调用 next() 并捕获异常.


    for循环遍历迭代器或可迭代对象与遍历序列的方法并无二致,只是在内部做了调用迭代器next(),并捕获异常,终止循环的操作


    很多时候你根本无法区分for循环的是序列对象还是迭代器 


    3.2.4:for基于range()实现计数循环


    range()语法:


    range(start,end,step=1):顾头不顾尾


    range(10):默认step=1,start=0,生成可迭代对象,包含[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

    range(1,10):指定start=1,end=10,默认step=1,生成可迭代对象,包含[1, 2, 3, 4, 5, 6, 7, 8, 9]

    range(1,10,2):指定start=1,end=10,step=2,生成可迭代对象,包含[1, 3, 5, 7, 9]

    注:for基于range()实现计数循环,range()生成可迭代对象,说明for循环本质还是一种迭代循环


     

    3.2.5:for与break,continue,else


    同while


     

    3.2.6:for语句小结


    for循环为迭代循环

    可遍历序列成员(字符串,列表,元组)

    可遍历任何可迭代对象(字典,文件等)

    可以用在列表解析和生成器表达式中

    break,continue,else在for中用法与while中一致


    作业:用户登录验证

    表结构:

    CREATE TABLE `user_login` (

      `id` int(11) NOT NULL AUTO_INCREMENT,

      `name` varchar(20) NOT NULL DEFAULT '',

      `pwd` varchar(20) NOT NULL DEFAULT '',

      PRIMARY KEY (`id`)

    ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8



    代码:

    #!/usr/bin/python

    #-*- coding: utf-8 -*-

    import MySQLdb

    import sys


    sys.path.insert(0,"/etc/dbbin")

    from lib import configgetter

    getter = configgetter.Configuration("conf/mysql.cfg")

    suser = "mysqlha"

    spasswd = getter.passget("mysql",suser)


    def MysqlSelect(host,port,db,sql,charset="utf8"):

        try:

            conn = MySQLdb.connect(host=host,port=port,user=suser,passwd=spasswd,db=db)

            cursor = conn.cursor()

            charsql = "set names %s" %charset

            cursor.execute(charsql)

            cursor.execute(sql)

            result = cursor.fetchall()

            return result

        except Exception,ex:

            print "execute is faild : %s" %sql

            ex_info = str(ex)

            print ex_info

            return 2,ex_info





    def UserLogin():

        errcode = 0

        while True:

            name = raw_input('Please input user name:').strip()

            pwd = raw_input('Please input user password: ').strip()

            namesql = "select name from user_login where name = '%s'" % name

            passwdsql = "select pwd from user_login where name = '%s'" % name

            name_group = MysqlSelect('10.20.8.1',3488,'tt',namesql)

            pwd_group = MysqlSelect('10.20.8.1',3488,'tt',passwdsql)

            print errcode

            if name_group != ():

                if name == name_group[0][0] and errcode == 3:

                    print "%s   user has been locked  " % name

                    continue

                if name == name_group[0][0]:

                    if pwd == pwd_group[0][0]:

                        print "%s login sucess" % name

                        break

                    else:

                        print "User password error,Please try again"

                        errcode += 1

            else:

                 print " %s user not exists" % name

                 break

    UserLogin()


关键字