循环普遍存在于日常生活中,同样,在程序中,循环功能也是至关重要的基础功能。
循环在程序中同判断一样,也是广泛存在的,是非常多功能实现的基础:
bilibili循环轮播图
循环和判断一样,同样是程序中最基础最核心的逻辑功能
3.1 while循环的基础应用
while循环的语法格式:
while 条件:
条件满足时,做的事情1
条件满足时,做的事情2
...(省略)...
只要条件满足,会无限循环执行
例如:
小美心软,只要表白100次,就会成功
print("小美,我喜欢你")
print("小美,我喜欢你")
print("小美,我喜欢你")
...(还有97次)...
对于上面的案例,我们可以使用while循环语句简单搞定:
i = 0
while i < 100:
print("小美,我喜欢你")
i += 1
while循环注意点:
1. while的条件需得到布尔类型,True表示继续循环,False表示结束循环
2. 需要设置循环终止的条件,如 i += 配合 i < 100 ,就能确保100次后停止,否则将无限循环
3. 空格缩进不能忘,和 if 判断一样,都需要设置
3.2 练习案例:求1-100的和
i = 1
sum = 0
while i <= 100:
sum += i
i += 1
print(f"1-100的累加和是:{sum}")
输出结果:
3.3 练习案例:while循环猜数字
代码源码,可以运行:
import random
num = random.randint(1,100)
# 定义一个变量,记录总共猜测了多少次
count = 0
# 通过一个布尔类型的变量,做循环是否继续的标记
flag = True
while flag:
guess_num = int(input("请输入你猜测的数字:"))
count += 1
if guess_num == num:
print("猜中了")
# 设置为False就是终止循环的条件
flag = False
else:
if guess_num > num:
print("你猜的大了")
else:
print("你猜的小了")
print(f"你总共猜了{count}次")
输出结果:
l
3.4 while循环的嵌套应用
生活中的嵌套循环
程序中的循环:
while 条件1:
条件1满足时,做的事情1
条件1满足时,做的事情2
...(省略)...
while 条件2:
条件2满足时,做的事情1
条件2满足时,做的事情2
...(省略)...
while循环的嵌套使用
# 外层:表白100天的控制
# 内层:每天的表白都送10只玫瑰花的控制
i = 1
while i <= 100:
print(f"今天是第{i}天,准备表白......")
j = 1
while j <= 10:
print(f"送给小美第{j}朵玫瑰花")
j += 1
print("小美,我喜欢你")
i += 1
print(f"坚持到第{i-1}天,表白成功")
注意:
1. 同判断语句的嵌套一样,循环语句的嵌套,要注意空格缩进(基于空格缩进来决定层次关系)
2. 注意条件的设置,避免出现无限循环。
3.5 while循环练习案例:九九乘法表
补充知识1:print输出不换行
默认print语句输出内容会自动换行,如下图
在即将完成的案例中,我们需要使用print语句,输出不换行的功能,非常简单,实现方式如下:
如图,在print语句中,加上end = ' ' 即可输出不换行了
补充知识2:制表符 \t
在字符串中,有一个特殊符号 \t ,效果等同于在键盘上按下:tab键
它可以让我们的多行字符串进行对齐
比如:
练习案例:
分析:
1. 控制行的循环 i <= 9
2. 控制每一行输出的循环 j <= i
3. 输出不换行:print( j * i , end = ' ')
4. 对齐:\t
代码源码,可以运行:
# 定义外层循环的控制变量
# i:行数 j:列数
i = 1
while i <= 9:
# 定义内层循环的控制变量
j = 1
while j <= i:
# 内层循环的print语句,不要换行,通过\t制表符进行对齐
print(f"{j} * {i} = {j * i}\t ", end = '' )
j += 1
i += 1
# print空内容,就是输出一个换行
print()
输出结果:
3.6 for循环的基础语法
1.基础语法
除了while循环语句外,Python同样提供了for循环语句
两者能完成的功能基本差不多,但仍有一些区别:
- while循环的循环条件是自定义的,自行控制循环条件
- for循环是一种 “轮询” 机制,是对一批内容进行 “逐个处理”
for循环基础语法:
for 临时变量 in 待处理数据集:
循环满足条件时执行的代码
name = "itheima"
for x in name:
#将name的内容,挨个取出赋予x临时变量
#就可以在循环体内对x进行处理
print(x)
for循环是将字符串的内容:依此取出。所以,for循环也被称为:遍历循环
for循环注意点:
同while循环不同,for循环是无法定义循环条件的。
只能从被处理的数据集中,依此取出内容进行处理。
所以,理论上讲,python的for循环无法构建无限循环(被处理的数据集不可能无限大)
要注意,循环内的语句,需要有空格缩进。
3.7 for循环练习案例:数一数有几个a
代码源码,可运行:
#统计如下字符串中,有多少个字母a
name = "itheima is a brand of itcast"
#定义一个变量,用来统计有多少个a
count = 0
#for 循环统计
#for 临时变量 in 被统计的数据
for x in name:
if x == "a"
count += 1
print(f"被统计的字符串有{count}个a")
运行结果:
3.8 range语句
for循环语句,本质上是遍历:序列类型
尽管除字符串外,其他的序列类型目前没学习到,但是不妨碍我们通过学习range语句,获得一个简单的数字序列。
语法1:
range(num)
获取一个从0开始,到num结束的数字序列(不含num本身)
如range(5)取得的数据是:{0,1,2,3,4}
语法2:
range(num1,num2)
获得一个从num1开始,到num2结束的数字序列(不含num2本身)
如,range(5,10)取得的数据是:[5,6,7,8,9]
语法3:
range(num1,num2,step)
获得一个从num1开始,到num2结束的数字序列(不含num2本身)
数字之间的步长,以step为准(step默认为1)
如,range(5,10,2)取得的数据是:[5,7,9]
演示Python中的range()语句的基本使用:
- range语法1:range(num)
for x in range(10):
print(x)
运行结果:
- range语法2:range(num1,num2)
for x in range(5,10):
#从5开始,到10结束(不包含10本身)的一个数字序列,数字之间间隔是1
print(x)
运行结果:
- range语法3:range(num1,num2,step)
for x in range(5,10,2):
#从5开始,到10结束(不包含10本身)的一个数字序列,数字之间的间隔是2
print(x)
运行结果:
for x in range(10):
print("送玫瑰花🌹")
3.9 for循环临时变量作用域
for i in range(5):
print(i)
print(i)
如图代码,思考一下:
红框中的print语句,能否访问到变量i?
规范上:不允许
实际上:可以
临时变量,在编程规范上,作用范围(作用域),至限定在for循环内部
如果在for循环外部访问临时变量:
- 实际上是可以访问到的
- 在编程规范上,是不允许,不建议这么做的
for循环中的临时变量,其作用域限定为:循环内
如需访问临时变量,可以预先在循环外定义它
3.10 for循环的嵌套应用
同样以向小美表白的案例为例
- 坚持表白100天
- 每天送花10束
演示嵌套应用for循环:
i = 1
for i in range(1,101):
print(f"今天是向小美表白的第{i}天,坚持.")
#写内层循环
for j in range(1,11):
print(f"送给小美的第{j}朵玫瑰花")
print(f"小美,我喜欢你(第{i}天的表白结束)")
print(f"第{i}天,表白成功")
我们目前学习了两个循环,while循环和for循环
这两类循环语句是可以相互嵌套的,如下,小美表白的案例可以改为:
i = 1
for i in range(1,101):
print(f"今天是向小美表白的第{i}天,坚持.")
j = 1
while j <= 10:
print(f"送给小美的第{j}朵玫瑰花")
j += 1
print(f"小美,我喜欢你(第{i}天的表白结束)")
print(f"第{i}天,表白成功")
注意:
- 需要注意缩进,嵌套for循环同样通过缩进确定层次关系
- for循环和while循环可以相嵌套使用
3.11 for循环练习案例:for循环打印九九乘法表
外层循环控制行数,内层循环控制每一行的内容
代码源码,可运行:
#通过外层循环控制行数
for i in range(1,10):
#通过内层循环控制每一行的内容
for j in range(1,i+1):
print(f"{j} * {i} = {j * i}\t",end='')
#外层循环可以通过print输出一个回车符
print()
运行结果:
3.12 continue和break
思考:无论是while循环还是for循环,都是重复性的执行特定操作
在这个重复的过程中,会出现一些其它情况让我们不得不:
- 暂时跳过某次循环,直接进入下一次
- 提前退出循环,不再继续
对于这种场景,Python提供continue和break关键字
用以对循环进行临时跳过和直接结束
continue
continue关键字用于:中断本次循环,直接进入下一次循环
continue可以用于:for循环和while循环,效果一致
for i in range(1,100):
语句1
continue
语句2
上面代码:
- 在循环中,遇到continue就结束当次循环,进行下一次
- 所以,语句2是不会执行的
应用场景:
在循环中,因为某些原因,临时结束本次循环
演示循环语句的中断控制:break和continue
for i in range(1,6):
print("语句1")
continue
print("语句2")
运行结果:
continue在嵌套循环中的应用
continue关键字只可以控制:它所在的循环临时中断
演示continue的嵌套循环:
for i in range(1,6):
print("语句1")
for j in range(1,6):
print("语句2")
#这个continue只能控制内层for循环,对外层的for循环是没有任何影响的
#语句3是压根不会执行的,语句1,2,4都可以执行
continue
print("语句3")
print("语句4")
break
break关键字用于:直接结束循环
break可以用于:for循环和while循环,效果一致
for i in range(1,100):
语句1
break
语句2
语句3
上面代码:
- 在循环中,遇到break就结束循环了
- 所以,执行了语句1后,直接执行语句3了
演示循环中断语句break:
for i in range(1,101):
print("语句1")
break
print("语句2")
print("语句3")
运行结果:
break在嵌套循环中的应用
break关键字同样只可以控制:它所在的循环结束
演示break的嵌套循环:
for i in range(1,6):
print("语句1")
for j in range(1,6):
print("语句2")
#这个break同时只能控制内层for循环,对外层的for循环是没有任何影响的
#直接输出语句1,语句2(只执行1次,因为遇到了break),然后输出语句4
break
print("语句3")
print("语句4")
运行结果:
总结:
- continue的作用是:中断所在循环的当次执行,直接进入下一次
- break的作用是:直接结束所在的循环
- ⚠️注意事项:
- continue和break,在for和while循环中作用一致
- 在嵌套循环中,只能作用在所在的循环上,无法对上层(外层)循环起作用
3.13 循环综合案例:发工资
代码源码,可运行:
#定义账户余额变量
money = 10000
#for循环对员工发放工资
for i in range(1,21):
import random
score = random.randint(1,10)
if score < 5:
print(f"员工{i}绩效分{score},不满足,不发工资,下一位")
#continue跳过发放
continue
#if判断余额足不足
if money >= 1000:
money -= 1000
print(f"员工{i},满足条件发放工资1000,公司账号余额:{money}")
else:
print("余额不足,当前余额:{money}元,不足以发工资,不发了,下个月再来")
#break结束发放
break
运行结果: