while 循环的基础语法
while 条件:
条件满足时,做的事情1
条件满足时,做的事情2
条件满足时,做的事情3
……
注意:
- while的条件需得到布尔类型,True表示继续循环,False表示结束循环
- 需要设置循环终止的条件,如i += 1配合 i < 100,就能确保100次后停止,否则将无限循环
- 空格缩进和if判断一样,都需要设置
while 循环的基础案例
猜数字案例:设置一个范围1-100的随机整数变量,通过while循环,配合input语句,判断输入的数字是否等于随机数
#无限次机会,猜到数字
import random
#1-100之间的随机数
num = random.randint(1,100)
flag = True
count = 0
while flag:
gutss = int(input("请输入猜测的数字:"))
count+=1
if gutss == num:
print("猜中了!")
flag = False
elif gutss > num:
print("猜大了")
else:
print("猜小了")
print(f"用了{count}次,猜中了随机数字{num}")
输出结果:
D:\Study\PythonManage\.venv\Scripts\python.exe D:\Study\PythonManage\Demo\Demo1.py
请输入猜测的数字:50
猜小了
请输入猜测的数字:75
猜小了
请输入猜测的数字:85
猜小了
请输入猜测的数字:95
猜大了
请输入猜测的数字:90
猜大了
请输入猜测的数字:86
猜小了
请输入猜测的数字:88
猜大了
请输入猜测的数字:87
猜中了!
用了8次,猜中了随机数字87
while 循环的嵌套应用
while 条件1:
条件1满足时,做的事情1
条件1满足时,做的事情2
条件1满足时,做的事情3
……
while 条件2:
条件2满足时,做的事情1
条件2满足时,做的事情2
条件2满足时,做的事情3
……
注意:
同判断语句的嵌套一样,循环语句的嵌套,要注意空格缩进。
基于空格缩进来决定层次关系
注意条件的设置,避免出现无限循环(除非真的需要无限循环)
while 循环的嵌套案例
打印 99 乘法表
#循环打印99乘法表
i = 1 #控制列
while i <= 9:
j = 1 #控制行
while j <= i:
print(f"{j}*{i}={i*j}\t", end=' ') #输出表达式
j = j + 1
print("") #每个行后换行
i = i + 1
补充:
print输出不换行
默认print语句输出内容会自动换行,只要在 print 语句中,加上 end=‘’ 即可输出不换行
print("Hello World",end='')
print('1')
print('-------------------')
print("Hello World")
print('1')
输出结果:
D:\Study\PythonManage\.venv\Scripts\python.exe D:\Study\PythonManage\Demo\Demo1.py
Hello World1
-------------------
Hello World
1
制表符 \t
在字符串中,有一个特殊符号:\t,效果等同于在键盘上按下:tab键。它可以让我们的多行字符串进行对齐。
for 循环的基础语法
除了while循环语句外,Python同样提供了for循环语句。
两者能完成的功能基本差不多,但仍有一些区别:while循环的循环条件是自定义的,自行控制循环条件for循环是一种”轮询”机制,是对一批内容进行”逐个处理”
for 临时变量 in 待处理数据集:
循环满足条件时执行的代码
注意:
同while循环不同,for循环是无法定义循环条件的。只能从被处理的数据集中,依次取出内容进行处理。
所以,理论上讲,Python的for循环无法构建无限循环(被处理的数据集不可能无限大)
for循环中的临时变量,其作用域限定为:循环内;这种限定:是编程规范的限定,而非强制限定不遵守也能正常运行,但是不建议这样做如需访问临时变量,可以预先在循环外定义它。
range 语句
range(num): 获取一个从0开始,到num结束的数字序列(不含num本身)
如range(4)取得的数据是:[0, 1, 2, 3]
range(num1,num2):获取一个从 num1 开始,到 num2 结束的数字序列,不含 num2 本身
如 range(1,4)取得的数据是:[1,2,3]
range(num1,num2,step):获取一个从 num1 开始,到 num2 结束的数字序列,数字的步长,已 step 为准,默认为 1, 不含 num2 本身
如 range(1,10,2)取得的数据是:[1,3,4,7,9]
for 循环的嵌套应用
for 临时变量 in 待处理数据集:
循环满足条件时执行的代码
……
for 临时变量 in 待处理数据集:
循环满足条件时执行的代码
……
for 循环的嵌套和 while 循环的嵌套一样,都是通过缩进确定层次关系的。
通过 for 循环打印 99 乘法表
#循环打印99乘法表
i = 1 #控制列
for i in range(1,10):
j = 1 #控制行
for j in range(j,i+1):
print(f"{j}*{i}={i*j}\t", end=' ') #输出表达式
j = j + 1
print("") #每个行后换行
i = i + 1
循环中断:break,continue
for 循环和 while 循环都是重复性的执行特定的语句,是否可以通过特定方式跳过或提前推出当前循环呢?
对于这种情况,Python 提供了 break、continue 关键字,用来对循环进行直接结束和临时跳过。
continue:中断本次循环,直接进入下一次循环。只可控制 continue 所在行所处的循环,如果在嵌套循环的内层循环,不能跳过外层循环。
break:直接结束所在循环。只可控制 break 所在行所处的循环,如果在嵌套循环的内层循环,不能终止外层循环。
案例
某公司,账户余额有1W元,给20名员工发工资。
员工编号从1到20,从编号1开始,依次领取工资,每人可领取1000元
领工资时,财务判断员工的绩效分(1-10)(随机生成),如果低于5,不发工资,换下一位
如果工资发完了,结束发工资。
import random
#初始化薪水10000
salary = 10000
#根据工号循环发工资
money = 1000
for i in range(1,21):
#获取当前员工的绩效
kh = random.randint(1,10)
if kh < 5:
continue #考核分数低于5不发工资,下一位
salary -= money
if salary < 1000 and salary >= 0:
print(f"工号为{i}的员工领取工资{money}")
elif salary >= 1000:
print(f"工号为{i}的员工领取工资{money}")
else:
print("工资已发完!")
break
输出结果:
D:\Study\PythonManage\.venv\Scripts\python.exe D:\Study\PythonManage\Demo\Demo1.py
工号为1的员工领取工资1000
工号为2的员工领取工资1000
工号为3的员工领取工资1000
工号为4的员工领取工资1000
工号为5的员工领取工资1000
工号为8的员工领取工资1000
工号为11的员工领取工资1000
工号为13的员工领取工资1000
工号为15的员工领取工资1000
工号为16的员工领取工资1000
工资已发完!