python之流程控制与运算符 第一:流程控制 第二:运算符

一:if条件语句

计算机之所以能做很多自动化的任务,因为它可以自己做条件判断。

单分支语句:

  单分支,单个条件

age = 20
if age >= 18:
    print('your age is ',age)
    print('if 判断语句是true')

结果:
your age is  20
if 判断语句是true

  单分支,多个条件

age = 20
if age >= 18 and age < 19:
    print('your age is ',age)
    print('if 判断语句是true')
else:
    print('your age is ',age)
    print('if 判断语句是False')

输出结果:
your age is  20
if 判断语句是False

多分支语句:

  多分支,if..else语句:

age = 20
if age >= 18:
    print('your age is ',age)
    print('if 判断语句是true')
else:
    print('your age is ',age)
    print('if 判断语句是False')

输出结果:
your age is  20
if 判断语句是true

    多分支,if+elif+else 

  elifelse if的缩写,完全可以有多个elif,所以if语句的完整形式就是:

if <条件判断1>:
    <执行1>
elif <条件判断2>:
    <执行2>
elif <条件判断3>:
    <执行3>
else:
    <执行4>

eg:

age = 20
if age >= 18 and age < 19:
    print('your age is ',age)
    print('if 判断语句是true')
elif age < 20:
    print('your age is ',age)
    print('if 判断语句是False,elif判断语句是True')
else:
    print('your age is ',age)
    print('if 判断语句是False,elif判断语句是False')

输出结果:
your age is  20
if 判断语句是False,elif判断语句是False
if语句执行有个特点,它是从上往下判断,如果在某个判断上是True,把该判断对应的语句执行后,就忽略掉剩下的elifelse,所以,请测试并解释为什么下面的程序打印的是teen
age = 20
if age >= 6:
    print('teen')
elif age >= 18:
    print('adult')
else:
    print('kid')

结果:
teen

三元表达式:

如果if msg 为True,则执行if左边的,为False,则执行else之后的
#三元表达示
msg=1
print("msg is True")if msg else print("msg is False")

结果:
msg is True

用户验证登录:

#!/usr/bin/env python
#_*_coding:utf-8_*_

'''
提示输入用户名和密码

验证用户名和密码
     如果错误,则输出用户名或密码错误
     如果成功,则输出 欢迎,XXX!
'''

import getpass

name=input('用户名: ')
passwd=getpass.getpass('密码: ')

if name == 'cyy' and passwd == '123':
    print('my baby')
else:
    print('滚开')

总结:

  1. if 后表达式返回值为True则执行其子代码块,然后此if语句到此终结,否则进入下一分支判断,直到满足其中一个分支,执行后终结if
  2. 条件判断可以引入运算符:not,and,or,is,is not
  3. 多重条件判断为加强可读性最好用括号包含
  4. if与else缩进级别一致表示是一对
  5. elif与else都是可选的
  6. 一个if判断最多只有一个else但是可以有多个elif
  7. else代表if判断的终结
  8. 条件判断可以是返回值为布尔值的表达式(例x>1,x is not None)的形式,也可是单个标准对象(例 x=1;if x:print('ok'))
  9. 所有标准对象均可用于布尔测试,同类型的对象之间可以比较大小。每个对象天生具有布 尔 True 或 False 值。空对象、值为零的任何数字或者 Null 对象 None 的布尔值都是 False。

一下几种的布尔值都为False:

None、False(布尔型)、所有的值为0的数、0(整型)、0.0+0.0j(复数)、""(空字符串)、[](空列表)、{}(空元组)、()(空字典)

二:while循环语句

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

这一条件指:条件表达式

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

基本用法:

while 执行条件:
     循环体
 
# 如果条件为真,那么循环体则执行
# 如果条件为假,那么循环体不执行

计数循环:

count=0
while count<10:
    print('===》',count)
    count+=1

无限循环:

while True:
    print("success")

break,continue区别:

count=0
while (count < 9):
    count+=1
    if count == 6:
        print('跳出本层循环,即彻底终结这一个/层while循环')
        break
    print('the loop is %s' %count)


输出结果:
the loop is 1
the loop is 2
跳出本层循环,即彻底终结这一个/层while循环
count=0
while (count < 9):
    count+=1
    if count == 6:
        print('跳出本次循环,即这一次循环continue之后的代码不再执行,进入下一次循环')
        continue
    print('the loop is %s' %count)

输出结果:
the loop is 1
the loop is 2
跳出本次循环,即这一次循环continue之后的代码不再执行,进入下一次循环
the loop is 4
the loop is 5
the loop is 6
the loop is 7
the loop is 8
the loop is 9

标志位:tag

tag=True
while tag:
    a=input("level1")
    if a == 'quit': break
    while tag:
        b = input("level2")
        if b == 'quit': break
        while tag:
            c=input('level3')
            if c == 'quit': break
            while tag:
                d=input('level4')
                if d == 'quit':break
                if d == 'exit':tag=False

print('====>')


结果:
level1
level2
level3
level4
level4
level4
level4
level4
level4
level4quit
level3
level4
level4
level4exit
====>

break、continue与else连用

while 1:
    print('跳出来了')
    break
else:
    print('正常结束了')

结果:
跳出来了

while 1:
    print('跳出来了')
    continue
else:
    print('正常结束了')

结果:
一直输出:
跳出来了

总结:

  • 条件为真就重复执行代码,直到条件不再为真,而if是条件为真,只执行一次代码就结束了
  • while有计数循环和无限循环两种,无限循环可以用于某一服务的主程序一直处于等待被连接的状态
  • break代表跳出本层循环,continue代表跳出本次循环
  • while循环在没有被break打断的情况下结束,会执行else后代码

三:for循环语句

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

基本语法:

for i in 循环范围:

    循环体

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

遍历序列类型:

name_list=['zzl','cyy','zl','cy']

#通过序列项迭代
for i in name_list:
    print(i)

结果:
zzl
cyy
zl
cy


#通过序列索引迭代
for i in range(len(name_list)):
    print('index is %s,name is %s' %(i,name_list[i]))

结果:
index is 0,name is zzl
index is 1,name is cyy
index is 2,name is zl
index is 3,name is cy


#基于enumerate的项和索引
for i,name in enumerate(name_list,2):
    print('index is %s,name is %s' %(i,name))

结果:
index is 2,name is zzl
index is 3,name is cyy
index is 4,name is zl
index is 5,name is cy

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

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

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

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

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

>>> f=open('test.txt','r')

for i in f:
    print(i.strip())
zzl
cyy
zl
cy

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

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

  • range(20):默认step=1,start=0,生成可迭代对象,包含[0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,16,17,18.19]
  • range(1,20):指定start=1,end=20,默认step=1,生成可迭代对象,包含[1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,16,17,18.19]
  • range(1,20,2):指定start=1,end=20,step=2,生成可迭代对象,包含[1, 3, 5, 7, 9,11,13,15,17,19]

eg:

for i in range(20):
    print(i)

结果:
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

for i in range(1,20):
    print(i)

结果:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

for i in range(1,20,2):
    print(i)

结果:
1
3
5
7
9
11
13
15
17
19

总结:

  • for循环为迭代循环
  • 可遍历序列成员(字符串,列表,元组)
  • 可遍历任何可迭代对象(字典,文件等)
  • 可以用在列表解析和生成器表达式中
  • break,continue,else在for中用法与while中一致

四:练习

验证用户三次登录

#!/usr/bin/env python
#-*-coding:utf-8-*-

count = 0   #记录用户输入密码的次数
flag = 1    #标志位
lock = []
user_pass = []
username = input('please input your username:')

#读取黑名单的内容
f = open('E:ocean作业info_lock.txt','r')
lock_file = f.readlines()
print(lock_file)
f.close()

#将黑名单文件内容作为列表元素追加到列表中
for i in lock_file:
    line = i.strip('
')
    lock.append(line)

#若输入的用户名在黑名单中,如果在则给出提示信息:用户已经被锁定,请联系管理员。
if username in lock:
    print('User %s is locked,please contact Administrator.' %username)
else:
#输入的用户名不在黑名单中,则提示用户输入密码信息
    while True:
        count += 1
        passwd = input("please input your password:")
        f = open('E:ocean作业info_user.txt','r')
        user_file = f.readlines()
        print(user_file)
        f.close()
        for i in user_file:
            user_pass = i.strip().split()
            #判断输入的用户名==user_pass[0] and 密码==user_pass[1],如果相等,则提示欢迎信息并退出循环,如果不相等则
            #结束本次循环
            if username == user_pass[0] and passwd == user_pass[1]:
                print('welcome user %s login !' %username)
                flag = True
                break
            else:
                continue
        #若flag为真,则用户名和密码输入正确跳出整个循环体,否则,若用户输入密码错误的次数为3,则给出提示信息:用户已经被锁定
        #并将username追加到黑名单中
        if flag is True:
            break
        else:
            if count == 3:
                lock_file = open('E:ocean作业info_lock.txt','a')
                lock_file.write('%s
' %username)
                lock_file.close()
                print('The user has tried three times, the program has locked the user')
                break

第二:运算符

一:算数运算

python之流程控制与运算符
第一:流程控制
第二:运算符

对应:

a=1
b=3
print(a+b)
结果:4
print(b-a)
结果:2
print(a*b)
结果:3
print(1/3)
结果:0.3333333333333333
print(a%b) #取模,返回除法的余数
结果:1
print(a**b) #幂,取a的b次方
结果:1
print(a//b) #相除,取整数部分
结果:0

二:比较运算

python之流程控制与运算符
第一:流程控制
第二:运算符 

红色部分用法是现在不用的哦

a=1
b=3
print(a==b)
结果:False
print(a!=b)
结果:True
print(a>b)
结果:False
print(a<b)
结果:True
print(a>=b)
结果:False
print(a<=b)
结果:True

三:赋值运算

python之流程控制与运算符
第一:流程控制
第二:运算符

a=1#简单赋值运算
a+=5 #加法赋值
print(a)
结果:6

a-=2#减法赋值
print(a)
结果:4

a*=2#乘法赋值
print(a)
结果:8

a/=2 #除法赋值
print(a)
结果:4.0

a%=3
print(a)#取模赋值
结果:1.0

b=3
b**=2  b的开方/指数
print(b)
结果:9
b=3 b//=3 #3里面有几个b print(b) 结果:1

四:位运算

python之流程控制与运算符
第一:流程控制
第二:运算符

五:逻辑运算

python之流程控制与运算符
第一:流程控制
第二:运算符

  • 返回的为O,None,空的为False,其余的全部为True
  • and:如果一个False,则为False。
  • or:如果一个为True,则为True。
  • not:取反即可
  • and-or连用的时候,连续判断即可,最好加上(),增加代码可读行。

六:成员运算

python之流程控制与运算符
第一:流程控制
第二:运算符

dic={'a':1,'b':2}
print('a' in dic)
结果:True

msg='abcd'
print('a' in msg)
结果:True

lis=[1,3,4,5,6]
print(1 not in  lis)
结果:False

七:身份运算

python之流程控制与运算符
第一:流程控制
第二:运算符

msg='abc'
print(msg is 'abc') #msg是'abc'嘛?

结果:
True

# 判断类型
print(type(msg) is str)
print(type(msg) is tuple)
print(type(msg) is list)
print(type(msg) is int)
print(type(msg) is dict)

结果:
True
False
False
False
False

八:运算符的优先级排序:自上而下,优先级从高到低

python之流程控制与运算符
第一:流程控制
第二:运算符