三、python基础之条件和循环

2023-01-31 02:01:07 条件 循环 基础

目录

一.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()


相关文章