第四章 python循环语句
4.1 while循环
4.1.1 while循环的基础语法
只要条件满足,程序就会无限循环执行
while 条件:
条件满足时,执行语句1
条件满足时,执行语句2
条件满足时,执行语句3
......
注意:
- 条件要么是布尔类型,要么其运算结果为布尔类型
- 需要设置循环终止的条件,否则将无限循环
- 空格缩进和if判断一样,需要设置
i = 0
while i < 100:
print("学习python")
i += 1 # 使循环有头有尾
# 案例:求1-100的和
sum = 0
i = 1
while i <=100: #当i为101时,程序结束
sum += i
i += 1
print(f"1-100的和是:{sum}")
4.1.2 while循环的基础案例
案例:猜数字
设置一个1-100的随机整数变量,通过while循环和input语句,判断输入的数字是否等于随机数
- 无限次机会,直到猜中为止
- 每一次猜不中,会提示大了或小了
- 猜完数字后,提示猜了几次
# 获取范围在1-100的随机数字
import random
num = random.randint(1,100)
# 定义一个变量,记录总共猜了多少次,进入一次循环,count+1
count = 0
# 通过一个布尔类型的变量作为循环是否继续的标记
flag = True
while flag:
get_num = int(input("请输入你猜测的数字:"))
count += 1
if get_num == num:
print("恭喜你,猜对了")
# 设置False是循环终止的条件
flag = False
else:
if get_num > num:
print("你猜的大了")
else:
print("你猜的小了")
print(f"你总共猜了{count}次")
4.1.3 while循环的嵌套应用
嵌套语法:
while 条件1:
条件满足时,执行语句1
条件满足时,执行语句2
条件满足时,执行语句3
......
while 条件2:
条件满足时,执行语句1
条件满足时,执行语句2
条件满足时,执行语句3
......
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}天,表白成功")
注意:
- 通过空格缩进决定层次关系
- 注意条件的设置,避免出现无限循环
- 循环条件的控制很重要,层次越多越复杂
4.1.4 while循环的嵌套案例
案例:打印九九乘法表(对掌握多层循环、逻辑思维等有帮助,好好分析⭐)
# 定义外层循环的控制变量 i <= 9
i = 1
while i <= 9:
# 定义内层循环的控制变量,控制每一行输出的循环 j <= i
j = 1
while j <= i:
# 内层循环的print语句,不换行,使用\t进行对齐
print(f"{j}*{i}={j * i}\t",end='')
j += 1
i += 1
print() # 输出一个换行
print默认输出换行,若要输出不换行,在print语句中,加上end=’ '即可输出不换行
\t:制表符,等同于tab键,可以让多行字符串进行对齐
4.2 for循环
4.2.1 for语句的基础语法
while循环的条件是自定义的,自行控制循环条件
for循环时一种”轮询“机制,是对一批内容进行”逐个处理“
for 临时变量 in 序列类型:
循环满足条件时执行的代码
序列类型:其内容可以一个个依次取出的类型,包括字符串、列表、元组等
# 遍历字符串
# 定义字符串name
name = "python"
# for循环处理字符串
for x in name:
print(x)
# 输出结果
p
y
t
h
o
n
for循环是将字符串中的内容依次取出,又称遍历循环
注意:
- for循环无法定义循环条件,只能从被处理的数据集中,依次取出内容进行处理
- 循环内的语句,需要有空格缩进
练习案例:数一数有几个a
定义字符串变量name,内容为:”Today,I will study python like yesterday“
通过for循环,遍历字符串,统计有多少个英文字母:”a“
# 定义字符串name
name = "Today,I will study python like yesterday"
# 定义一个变量,统计字母个数
count = 0
# for循环统计
for i in name:
if i =='y':
count = count + 1
print(f"{name}中总共含有{count}个字母y")
# 输出结果
D:\dev\python\python3.10.4\python.exe D:/Projects/PycharmProjects/pythonProject/test1.py
Today,I will study python like yesterday中总共含有5个字母y
4.2.2 range语句
range语句可以获得一个简单的数字序列
通过range快速的锁定for循环的执行次数以完成相关需求
语法有三种:
-
range(num)
:获取一个从0开始,到num结束的数字序列(不含num本身)# range语法1 for x in range(10): print(x) # 输出结果 0 1 2 3 4 5 6 7 8 9
-
range(num1,num2)
:获取一个从num1开始,到num2结束的数字序列(不包含num2本身)# range语法2 for x in range(5,10): print(x) # 输出结果 5 6 7 8 9
-
range(num1,num2,step)
:获取一个从num1开始,到num2结束的数字序列(不包含num2本身),数字之间的步长以step为准(step默认为1)# range语法3 for x in range(1,10,3): print(x) # 输出结果 1 4 7
练习案例:有几个偶数
定义一个数字变量num,使用range()语句,获取从1到num的序列,使用for循环遍历,在遍历过程中统计偶数个数。
num = 10
count = 0
for x in range(1,num):
if x % 2 == 0:
count += 1
print(count)
4.2.3 变量作用域
在for循环的语法中,临时变量在编程规范上的作用范围只限定在for循环内部
如果要在for循环外部访问到临时变量:
- 实际上是可以访问到的
- 在编程规范上是不允许的
- 如需访问临时变量,预先在循环外定义它
4.2.4 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循环可以相互嵌套
练习案例:for循环实现九九乘法表
for i in range(1, 10):
for j in range(1, i + 1):
print(f"{j}*{i}={i*j}\t",end='')
print()
4.3 循环中断:break和continue
遇到如下情况时:
- 暂时跳过某次循环,直接进行下一次
- 提前退出循环,不再继续
4.3.1 continue关键字
continue:中断本次循环,直接进入下一次循环,可以用于for循环、while循环、嵌套循环。只对所在循环生效,无法对上层循环起作用
for i in range(1, 10):
语句1
continue
语句2
在循环内,遇到continue就结束档次循环,进行下一次,所以在上面的代码中,语句2不会执行
# continue用于for循环
for i in range(1, 6):
print("语句1")
continue
print("语句2")
# 输出结果
语句1
语句1
语句1
语句1
语句1
# continue用于嵌套循环
for i in range(1,3):
print("语句1")
for j in range(1,3):
print("语句2")
continue
print("语句3")
print("语句4")
#输出结果
语句1
语句2
语句2
语句4
语句1
语句2
语句2
语句4
4.3.2 break关键字
break:直接结束循环,用于for循环、while循环、嵌套循环。只对所在循环生效,无法对上层循环起作用
for i in range(1, 10):
语句1
break
语句2
语句3
在循环内,遇到break就结束循环。上述代码执行语句1后,直接执行语句3
# break用于for循环
for i in range(1,10):
print("语句1")
break
print("语句2")
print("语句3")
#输出结果
语句1
语句3
# break用于嵌套循环
for i in range(1,5):
print("语句1")
for j in range(1,5):
print("语句2")
break
print("语句3")
print("语句4")
# 输出结果
语句1
语句2
语句4
语句1
语句2
语句4
语句1
语句2
语句4
语句1
语句2
语句4
4.4 循环综合案例
案例:发工资
某公司,账户余额有10000元,给20名员工发工资
- 员工编号从1到20,从编号1开始,依次领取工资,每人可领取1000元
- 领取工资时,财务判断员工的绩效分(1-10)(随机生成),如果低于5,不发工资,换下一位
- 如果工资发完了,结束发工资
# 自己写的
import random
money = 10000
for i in range(1, 21):
performance = random.randint(1, 10)
if performance < 5:
print(f"员工{i},绩效分{performance},低于5,不发工资,下一位")
continue
else:
money -= 1000
print(f"向员工{i}发放工资1000元,账户余额还剩余{money}元")
if money == 0:
print("工资发完了,下个月领取吧")
break
自己写的有一点小问题:应该先判断工资余额,再进行工资发放
# 老师写的
import random
# 定义账户余额变量
money = 10000
for i in range(1, 21):
# 员工绩效分
performance = random.randint(1, 10)
if performance < 5:
print(f"员工{i},绩效分{performance},低于5,不发工资,下一位")
# 跳过发放
continue
# 判断余额是否足够
if money >= 1000:
money -= 1000
print(f"向员工{i}发放工资1000元,账户余额还剩余{money}元")
else:
print("工资发完了,下个月领取吧")
# 结束发放工资
break