三、python基础之条件和循环
目录
一.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
三元表达式
语法:
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()
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341