while循环
如果我们需要连续输出十句“你好棒”,那么我们需要重复敲十次print("你好棒"):
print("你好棒!")
print("你好棒!")
print("你好棒!")
print("你好棒!")
print("你好棒!")
print("你好棒!")
print("你好棒!")
print("你好棒!")
print("你好棒!")
print("你好棒!")
这样的操作繁琐且效率低下,在python中为我们重复执行某段代码提供了更好的解决方案,我们可以使用while和for来让当前代码进行循环操作。
在现实生活中,太阳每天东升西落,学生除了假期每天都要去上学,这些都是循环。每一次的循环都是建立在一定条件下的,比如每天到了什么时候太阳开始升起,学生在什么时候需要每天去学校,都是有一定前提条件的,因此当我们使用while和for来进行循环时,我们也需要加上该循环执行的前提条件。学生并不是永远都需要每天去学校上学,当他毕业后,他也许就不需要再重复每天去学校的行为了,因此绝大部分的循环都会有结束的条件。在while循环中,我们也同样需要设置循环的条件,同时我们还可以控制循环在什么时候结束(当然了,如果有需要,我们也可以让它一直循环下去,进入死循环或者说是无限循环)。
while中我们一般会用布尔类型的值来表示循环条件,比如当某条件为True时,进入循环。
以输出十句“你好棒”为例,我们需要“你好棒”这句话循环输出十次,那么我们的循环条件就是让它从1开始,循环到10结束。从1到10,我们可以定义一个初始变量i,赋值1,让i<=10,当循环每进行一次,我们就输出一句“你好棒”,初始变量i就加1,到第十次结束,i的值为11就不再进入循环,这样我们就能成功让“你好棒”输出十次了。代码如下:
# 定义一个变量i,赋初始值1
i = 1
# 利用while关键字,后面跟循环条件:当i<=10时,进入循环
while i <= 10:
# 每次进入循环就输出“你好棒”(循环体)
print("你好棒!")
# 每轮循环结束让i+1(条件控制)
i += 1
上述案例中,i<=10是该循环执行的循环条件,print("你好棒")是该循环需要执行的代码段,即循环体,i+=1是对循环条件的控制(如果没有i没有加1,那么它就永远是初始值1,1永远小于等于10,该循环条件一直为True就会永远循环下去)。
while循环的基本步骤:
1.定义初始变量,赋初始值
2.循环条件
3.循环体
4.进行条件控制
while循环基本格式:
变量名 = 初始值
while 条件判断:
循环体
条件控制while无限循环:
无限循环又叫死循环,恒成立的条件,循环的内容不设置条件不会停下来。
实现无限循环的方式:
方式1: 正常的while循环,不加条件控制
方式2: while循环条件用两个字面量比较结果是True
方式3(建议): while循环条件直接用True
方式4: while循环条件直接用1
tips: 循环一般要设置条件,满足对应条件跳出循环 使用关键字break
案例:无限循环
# 循环条件为True,就会一直进入循环
while True:
print("这句话会一直输出,不会停下来")
案例:求1-100之间偶数的和
方法一:从0开始,不断加2获得1-100之间的偶数
分析:
1. 从0开始:定义一个变量i,赋初始值0
2. 循环条件从1-100:i < =100
3. 循环体:利用循环内i不断自增的特点,定义一个变量存储i每轮循环的值,并加上当前循环中i的值(这个用于接收的变量需要在循环外定义,以确保它不会每一轮都被赋其他值)。
4. 条件控制:要得到偶数就让循环的i加2,i += 2
5. 在循环外输出最终结果(如果在循环内输出的话就会从第一轮累加的结果一致输出到最后一轮,我们只需要最终结果,所以需要在循环外输出)
(注意循环体内外的层级关系)
# ① 从0开始:定义一个变量i,赋初始值0 i = 0 # 循环外定义一个变量用于接收i每轮累加后的值,该变量初始值为0 sum = 0 # ② 循环条件从1-100:i<=100 while i <= 100: # ③ 循环体:利用循环内i不断自增的特点 # 用一个变量存储i每轮循环的值,并加上当前循环中i的值。 sum += i # ④ 条件控制:要得到偶数就让循环的i加2,i+=2 i += 2 # ⑤ 在循环外输出最终结果 # 如果在循环内输出的话就会从第一轮累加的结果一致输出到最后一轮 # 我们只需要最终结果,所以需要在循环外输出) print(sum)
方法二:通过偶数能被2整除的特点获得偶数
分析:
1.从1开始:定义一个变量i,赋初始值1
2.到100结束:循环条件为 i <= 100
3.循环体:判断从1-100的数是否能被2整除,如果可以则用循环外定义的其他变量存储i每轮循环的值,并加上当前循环中i的值(这个用于接收的变量需要在循环外定义,以确保它不会每一轮都被赋其他值)。
4.条件控制:i += 1(因为要判断1-100的数字是否为偶数,因此要从1开始循环到100,每次循环加1,确保i可以从1循环到100)
5. 在循环外输出最终结果(如果在循环内输出的话就会从第一轮累加的结果一致输出到最后一轮,我们只需要最终结果,所以需要在循环外输出)
(注意while循环内外和if函数内外的层级关系)
# 1.从1开始:定义一个变量i,赋初始值1 i = 1 # 循环外定义一个变量用于存储循环内的i累加的值 sum = 0 # 2.到100结束:循环条件为 i <= 100 while i <= 100: # 3.循环体:判断从1-100的数是否能被2整除 if i % 2 == 0: # 如果可以则用循环外定义的其他变量存储i每轮循环的值 # 并加上当前循环中i的值 sum += i # 4.条件控制:i += 1 # 因为要判断1-100的数字是否为偶数,因此要从1开始循环到100 # 每次循环加1,确保i可以从1循环到100) i += 1 # 5.在循环外输出最终结果 # 如果在循环内输出的话就会从第一轮累加的结果一致输出到最后一轮 # 我们只需要最终结果,所以需要在循环外输出 print(sum)
案例:打印九九乘法表
分析:
九九乘法表中,第一行为1*1,第二行为(1-2)*2,第三行为(1-3)*3...直到(1-9)*9,由上可以看出第一个乘数的取值范围受到第二个乘数影响,若设第二个取值范围波动不大的乘数为j,则i的取值范围为1-9;设第一个为i,其取值范围则为1-j。
由于第一个乘数 i 的取值范围受第二个乘数 j 影响,所以外层循环我们从第二个乘数 j 开始。
第一层循环用于循环第二个乘数 j,则:
1.1 定义初始变量,赋初始值1
1.2 循环条件:j <= 9
1.3 循环体:循环体中进行第二层循环,循环 i 的数。
2.1 循环 i 之前,先定义变量 i,赋初始值1
2.2 循环条件:i<=j
2.3 循环体:输出{ i } *{ j }={ i * j },这输出的是每一列,列与列之间不换行,加空格,即end="\t"
2.4 i+=1
2.5 每轮内层循环全部结束,输出的是每行内容,因此要换行,直接输出print()
1.4 条件控制:j+=1
# 第一层循环用于循环第二个乘数 j,则: # 1.1 定义初始变量j,赋初始值1 j = 1 # 1.2 循环条件:j<= 9 while j <= 9: # 1.3 循环体:循环体中进行第二层循环,循环 i 的数。 # 2.1 循环 i 之前,先定义变量 i,赋初始值1 i = 1 # 2.2 循环条件:i<=j while i <= j: # 2.3 循环体:输出{ i } *{ j }={ i * j },这输出的是每一列 # 列与列之间不换行,加空格,即end="\t" print(f"{i}*{j}={i * j}", end="\t") # 2.4 i+=1 i += 1 # 2.5 每轮内层循环全部结束,输出的是每行内容,因此要换行,直接输出print() print() # 1.4 条件控制:j+=1 j += 1
for循环
除了while,在python中进行循环还可以用for循环。for循环又叫遍历循环,它需要提前准备好待处理的数据集,然后它会将待处理数据集中的元素从中一个个取出来赋值给一个临时变量。
for循环基础格式:
for 临时变量 in 数据集:
循环体(临时变量只作用于当前循环内)
如果我们的待处理数据集为“Hello”,临时变量为i,那么for循环会将"Hello"中的“H”"E"“L”“L”"O"依次取出,赋值给i。代码和执行结果如下:
for i in "Hello":
print(i)
如果我们需要循环1-100的数字,那么我们不需要用一个有100个元素的数据集来进行循环,Python中对于整数的循环有更好的解决方案。通常,for循环会搭配range()函数一起使用。
range()函数格式:
range(x,y,z)
x 初始值 默认是0,如果要是其他数手动写上 y 结束值 不含y本身 z 步长 数字间的间隔,默认是1,如果要是其他数手动写上,如z为2,则相当于x到y(不含y)的数字每个+2
for循环进阶格式:for 临时变量 in range(x,y,z):
循环体
例如我们需要输出10遍"你好棒",那么使用for循环与range()函数搭配则可以这么写:
for i in range(10):
print("你好棒")
上面的代码中,range(10)的10表示的是结束值10(不包括10本身),开始值默认为0可以不写。如果我们需要打印1-10的数字,那么开始值就是1,结束值应该为11,可以写为range(1,11),比如:
for i in range(1,11):
print(i)
如果我们需要打印2-10之间所有的偶数,根据偶数加2还是偶数的常识,我们可以将步长设置为2,写作range(2,11,2)。
for i in range(2,11,2):
print(i)
案例:求1-100之间的偶数和
分析:
1.定义一个变量存储1-100的偶数累加的和
2.利用range(x,y,z)函数,让数字从0开始,到101(不含101,即100)结束,每个数字间间隔(步长)为2,通过for循环遍历,取出所有偶数
3.循环体:每一轮都让取出的偶数与前一轮相加,用循环外定义的变量存储
4.循环外输出结果
# 1.定义一个变量存储1-100的偶数累加的和 sum = 0 # 2.利用range(x,y,z)函数,让数字从0开始,到101(不含101,即100)结束 # 每个数字间间隔(步长)为2,通过for循环遍历,取出所有偶数 for i in range(0, 101, 2): # 3.循环体:每一轮都让取出的偶数与前一轮相加,用循环外定义的变量存储 sum += i # 4.循环外输出结果 print(sum)
案例:打印九九乘法表
分析:
九九乘法表中,第一行为1*1,第二行为(1-2)*2,第三行为(1-3)*3...直到(1-9)*9,由上可以看出第一个乘数的取值范围受到第二个乘数影响,若设第二个取值范围波动不大的乘数为j,则i的取值范围为1-9;设第一个为i,其取值范围则为1-j。
由于第一个乘数 i 的取值范围受第二个乘数 j 影响,所以外层循环我们从第二个乘数 j 开始。
第一层循环用于循环第二个乘数 j,则:
1.1第一层循环, j 的取值范围为range(1,10)
1.2 循环体:
2.1第二层循环,i 的取值范围为(1,j+1)
2.2 循环体:输出{i}*{j}={i*j},列与列之间不换行,要空格end="\t"
1.3 行与行之间需要换行print()
# 1.1第一层循环, j 的取值范围为range(1,10) for j in range(1, 10): # 1.2 循环体: # 2.1第二层循环,i 的取值范围为(1,j+1) for i in range(1, j + 1): # 2.2 循环体:输出{i}*{j}={i*j},列与列之间不换行,要空格end="\t" print(f"{i}*{j}={i * j}", end="\t") # 1.3 行与行之间需要换行print() print()
循环的中断
在循环进行的过程中,我们遇到一些特殊情况需要中断本次循环或者结束整个循环应该怎么办?在这两种情况下我们可以分别使用continue和break。
continue:
结束本次循环,继续下一次循环
break:
跳出循环,结束循环
tips:
1.continue和break对while和for循环都适用!
2.在嵌套循环中,continue和break只能作用在所在的循环,无法对上层循环起作用
综合案例:无限次猜数字小游戏
需求:编写猜数字(1-100)游戏的小程序,要求只要猜不对就继续猜,直到猜中为止并统计猜中及之前一共猜了多少次。
# 1.用随机数生成底数
import random
num = random.randint(1, 100)
# 5.1.再循环外定义一个计数器
count = 1
# 4.让猜数过程无限循环
while True:
# 循环体
# 2.定义一个变量接收猜的数字
guess = int(input("请输入您猜的数字(1-100):"))
# 5.2.循环内累计次数
count += 1
# 3.判断猜数范围
if 1 <= guess <= 100:
# 判断是否猜对
if guess == num:
print("恭喜您!猜对了")
break # 如果猜对跳出循环
elif guess > num:
print("你猜大了!")
elif guess < num:
print("您猜小了!")
else:
print("您的输入有误")
# 5.3循环外打印
print(f"您猜了{count}次,猜对了")