第五章:python中的语句(流程控制)
流程控制:具体指控制程序的执行流程,而程序的执行流程分为三种结构:顺序结构、分支结构(if判断)、循环结构(whlie、for循环)
一、条件判断语句
1、什么是条件判断
根据条件判断结果的真假去执行不同分支对应的子代码。
2、为什么要有条件判断
让计算机类似于人一样根据需要来判断是否需要做某些事情。
如:天气晴朗,就出去嗨皮!!!否则,在家看书!!!
3、如何使用条件判断
1、顺序结构
根据程序的顺序依次执行。前面所提到的代码几乎都是顺序结构。
2、分支结构
2.1 if语法
用if关键字来实现分支结构
if 条件1: # 如果条件1的结果为True,就依次执行:代码1、代码2,......
代码1
代码2
......
elif 条件2: # 如果条件2的结果为True,就依次执行:代码3、代码4,......
代码3
代码4
......
elif 条件3: # 如果条件3的结果为True,就依次执行:代码5、代码6,......
代码5
代码6
......
else: # 其它情况,就依次执行:代码7、代码8,......
代码7
代码8
......
# 注意:
# 1、python用相同缩进(4个空格表示一个缩进)来标识一组代码块,同一组代码会自上而下依次运行
# 2、条件可以是任意表达式,但执行结果必须为布尔类型
# 在if判断中所有的数据类型也都会自动转换成布尔类型
# 2.1、None,0,空(空字符串,空列表,空字典等)三种情况下转换成的布尔值为False
# 2.2、其余均为True
# 应用
'''
如果:成绩>=90,那么:优秀
如果成绩>=80且<90,那么:良好
如果成绩>=70且<80,那么:普通
其他情况:很差
'''
score = input('请输入你的成绩:')
# 因为input()接收用户输入的数据都是字符串,int转为整形
score = int(score)
if score >= 90:
print('优秀')
elif score >= 80 and score < 90:
# 这里的分数小于90其实可以省略,因为必须要小于90才能进入这个判断
print('良好')
elif score >= 70:
print('普通')
else:
print('很差')
# if 嵌套
'''
如果:女人的 年龄>=18并且<22岁 并且 身高>170并且体重<100 并且是漂亮的,那么:表白;
否则:叫阿姨**
如果表白成功,那么:在一起
否则:打印。。。
'''
age_of_girl = int(input('输入年龄:'))
height = int(input('输入身高:'))
weight = int(input('输入体重:'))
if 18 <= age_of_girl < 22 and height > 170 and weight < 100 :
success = input('表白是否成功:')
if success == '是':
print('这就是爱情!!!表白成功,在一起')
else:
print('什么爱情不爱情的,我爱nmn麻花情...')
else:
print('阿姨好')
二、循环语句
1、什么是循环
循环就是重复执行某段代码块
2、为什么要用循环
让计算机像人一样在需要的时候重复做一件相同的事。
3、while循环(条件循环)
python中while 循环也被称为条件循环
while 条件:
代码1
代码2
代码3
while的运行步骤:
步骤1:如果条件为真,那么依次执行:代码1、代码2、代码3、......
步骤2:执行完毕后再次判断条件,如果条件为True则再次执行:代码1、代码2、代码3、......,
如果条件为False,则循环终止
1、while循环的的基本使用
用户认证程序
# 用户认证程序的基本逻辑:就是接收用户输入的用户名密码然后与程序中存放的用户名密码进行判断。
# 判断成功则登陆成功,判断失败则输出账号或密码错误
username = "sunoeast"
password = "222"
in_name = input("请输入用户名:")
in_pwd = input("请输入密码:")
if in_name == username and in_pwd == password:
print("登陆成功@@@")
else:
print("输入的用户名或密码错误!!!")
# 通常认证失败的情况下,会要求用户重新输入用户名和密码进行验证。
# 如果我们想给用户三次试错机会,本质就是将上述代码重复运行三遍,把代码复制3次太过冗余。
username = "sunoeast"
password = "222"
# 第一次验证
in_name = input("请输入用户名:")
in_pwd = input("请输入密码:")
if in_name == username and in_pwd == password:
print("登陆成功@@@")
else:
print("输入的用户名或密码错误!!!")
# 第二次验证
in_name = input("请输入用户名:")
in_pwd = input("请输入密码:")
if in_name == username and in_pwd == password:
print("登陆成功@@@")
else:
print("输入的用户名或密码错误!!!")
# 第三次验证
in_name = input("请输入用户名:")
in_pwd = input("请输入密码:")
if in_name == username and in_pwd == password:
print("登陆成功@@@")
else:
print("输入的用户名或密码错误!!!")
# 即使是小白的你,也觉得的太low了不是,以后要修改功能还得修改3次,写重复的代码是程序员最不耻的行为。(使用while循环实现)
username = "sunoeast"
password = "222"
# 记录错误验证的次数
count = 0
while count < 3:
in_name = input("请输入用户名:")
in_pwd = input("请输入密码:")
if in_name == username and in_pwd == password:
print("登陆成功")
else:
print("输入的用户名或密码错误!")
count += 1
2、while + break的使用
不难发现,使用while循环后,代码精简很多,上述的代码还存在一个问题就是输入正确的用户名和密码后也无法结束循环,所以python中用break来结束循环。
username = 'sunoeast'
password = '222'
count = 0
while count < 3:
in_name = input('请输入你的用户名:')
in_pwd = input('请输入你的密码:')
if in_name == username and in_pwd == password:
print('登录成功@@@')
break
else:
print('用户名或密码错误!!!')
count += 1
3、while循环嵌套+break
如果使用while循环嵌套了多层,要想退出循环需要在每一层都加上break
username = "sunoeast"
password = "222"
count = 0
while count < 3: # 第一层循环
in_name = input("请输入用户名:")
in_pwd = input("请输入密码:")
if in_name == username and in_pwd == password:
print("登陆成功@@@")
while True: # 第二层循环
cmd = input('请输入你要操作的命令: ')
if cmd == 'N':
break # 用于结束本层循环,即第二层循环
print('运行%s命令中...' % cmd)
break # 用于结束本层循环,即第一层循环
else:
print("输入的用户名或密码错误!!!")
count += 1
补充:结束while循环的本质就是使条件变为假,或者使用break语句直接打断循环
while循环嵌套 + tag
针对嵌套多层的while循环,如果我们的目的很明确就是要在某一层直接退出所有层的循环,其实有一个窍门,就让所有while循环的条件都用同一个变量,该变量的初始值为True,一旦在某一层将该变量的值改成False,则所有层的循环都结束
username = "sunoeast"
password = "222"
count = 0
tag = True
while tag:
in_name = input("请输入用户名:")
in_pwd = input("请输入密码:")
if in_name == username and in_pwd == password:
print("登陆成功@@@")
while tag:
cmd = input('请输入你需要操作的命令: ')
if cmd == 'N':
tag = False # tag变为False, 所有while循环的条件都变为False
print('正在运行%s命令!!!' % cmd)
else:
print("输入的用户名或密码错误!!!")
count += 1
4、while + continue
break代表结束本层循环(即跳出本层循环),continue则是用于结束本次循环,进入下一次循环
# 打印1到10之间,除3以外的所有数字
number = 1
while number < 11:
if number == 3:
# 必须添加+1的操作在continue前,否则continue结束后number的值一直是3,程序一直在运行中。
number += 1
# 结束掉本次循环,即本次循环continue之后的代码都不会运行了,而是直接进入下一次循环
continue
print(number)
number += 1
5、while + else
在while循环的后面,还可以跟else语句,当while循环正常执行完程序并且语句中没有被break中断,才能够执行else中的语句。通常也可以用else来验证循环是不是正常循环结束。
count = 0
while count <= 5 :
count += 1
print("这是第%s次循环" %count)
else:
print("循环正常执行完啦!!!")
print("-"*30)
'''
输出结果:
这是第1次循环
这是第2次循环
这是第3次循环
这是第4次循环
这是第5次循环
这是第6次循环
循环正常执行完啦!!! #没有被break打断,所以执行了该行代码
------------------------------
'''
# 执行过程中被break打断
count = 0
while count <= 5 :
count += 1
if count == 3:
break
print("这是第%s次循环"%count)
else: # else里面的代码不会被执行
print("循环正常执行完啦!!!")
print("-"*30)
'''
输出结果:
这是第1次循环
这是第2次循环
------------------------------
'''
4、for循环
循环语句的第二种实现的方式是for循环,理论上for循环可以做到的事情while循环都可以实现。python中的for循环主要是用来循环取值(遍历),遍历时比while循环用起来更方便简洁。
1、for循环的基本使用
'''
格式:
for 元素 in 可迭代对象: # 可迭代对象可以是字符串、列表、元组、字典、集合,详细介绍后面补上。
代码一
代码二
...
# 例子1:
for item in ['a','b','c']:
print(item)
'''
运行结果
a
b
c
# 参照例1来介绍for循环的运行步骤
# 步骤1:从列表['a','b','c']中读出第一个值赋值给item(item=‘a’),然后执行循环体代码
# 步骤2:从列表['a','b','c']中读出第二个值赋值给item(item=‘b’),然后执行循环体代码
# 步骤3: 重复以上过程直到列表中的值读尽
'''
# 循环不仅能够对可迭代对象进行读取和输出,还可以用于重复某一过程。
# for循环中的代码循环次数是根据可迭代对象的元素个数决定的。
for i in ['a','b','c']:
print('你好小白!!!')
2、遍历字典
# 简单版:for循环的实现方式
for k in {'name':'jason','age':18,'gender':'male'}:
# for 循环默认取的是字典的key赋值给变量名k
print(k)
# 复杂版:用while循环联合迭代器完成
2.5、补充:range()函数
range(start,stop,step)函数能够获取一个连续增加的不可变的整数序列,参数start为序列的起始数值;
参数stop为序列的终止数值;参数step为步长,默认值为1。
那么,range(5)就能够获取一个0~4的整数序列,这个序列包含了5个元素。
所以,for循环在进行迭代时,能够迭代5次,也就将下方向右缩进的语句块执行了5次。
for i in range(5):
print('你好小白!')
# 代码中变量i并没有什么作用,但是python语法规定必须不可少,range(5)是关键
3、for循环的嵌套
# 用for循环嵌套的方式打印如下图形:
*****
*****
*****
*****
for i in range(4): # 将下面的代码重复打印4次,即行
for j in range(5):
print("*",end='') # 每次打印的*都不换行
print() # 表示换行
4、for + break
username = "sunoeast"
password = "222"
for i in range(3):
in_name = input("请输入用户名:")
in_pwd = input("请输入密码:")
if in_name == username and in_pwd == password:
print("登陆成功@@@")
break # 类似于while循环
else:
print("输入的用户名或密码错误!!!")
5、for + continue
# 打印1到10之间,除3以外的所有数字
for i in range(1,11):
if i == 3:
continue # 跳过i等于3的数字
print(i)
6、for + else
# 正常执行完
for i in range(1,6):
print("这是第%s次循环" %i)
else:
print("循环正常执行完啦!!!") # 正常运行
print("-"*30)
# 跳出循环
for i in range(1,6):
if i == 3:
break
print("这是第%s次循环" %i)
else:
print("循环正常执行完啦!!!") # 不会运行
print("-"*30)
练习1:分别求出列表中的偶数和与奇数和
l = [1, 2, 3, 4, 5, 6, 7, 8, 9]
count1 = 0 # 创建变量,用于奇数求和
count2 = 0 # 创建变量,用于偶数求和
for i in l: # 循环遍历列表中全部元素
if i % 2 == 0: # 判断变量i中存储的为偶数
count2 += i # 进行偶数求和运算
continue # 结束当前循环过程,进入下一次循环
count1 += i # 进行奇数求和运算
print(count1) # 显示输出结果为:25
print(count2) # 显示输出结果为:20
# 代码中,当i为偶数时,会进行偶数求和运算,然后跳过当前的循环,不会进行奇数求和运算;而为奇数时,才会进行奇数求和运算。
练习2:九九乘法表
for i in range(1,10):
for j in range(1,i+1):
print('%s*%s=%s' %(i,j,i*j),end=' ')
print()