目录
上一篇文章我们介绍了什么是循环语句以及 while 循环的用法和案例,这篇文章开始了解另一个重要的循环语句:for 循环
for 循环是将序列的内容依次取出,所以 for 循环也被称之为遍历循环
一、for 循环
1、for…in 循环
特点:
- for…in 循环可以遍历任何序列的项目,如一个列表或者一个字符串
- for…in 遍历的对象必须是可迭代对象(包括字符串、列表、元组、集合和字典)
- while 循环的循环条件是自定义的,for…in 循环无法定义循环条件
- for…in 循环是一种“轮询”机制,是对一批内容进行“逐个处理”
语法:
for 临时变量 in 可迭代对象:
循环体语句
[else:
执行语句] # 中括号部分可以省略,用法与 while 循环一致
示例:
# 遍历字符串
for i in '1234': # i为临时变量,'1234'为待遍历的字符串
print(i) # 依次打印字符串中的内容
else:
print("for循环结束")
# 遍历元组
for i in ('AA','BB','CC','DD'):
print(i)
# 遍历列表
for i in ['张三','李四','王五','赵六']:
print(i)
注意:理论上来讲,for 循环无法构建无限循环,因为待处理的数据集不可能无限大
练习:
# 字符串 name = "hello world"
# 通过for循环遍历所有的L
name = "hello world"
for i in name:
if i == "l":
print(i)
AI解释代码: 这段代码定义了一个字符串变量 name,值为 "hello world" 。接下来,使用 for 循环遍历字符串 name 中的每一个字符,并使用 if 条件语句判断是否等于字符 "l" 。若相等,则在控制台输出该字符 "l" 。因此,由于 name 字符串中有三个字符 "l" ,以上代码会输出三个字符 "l" 。
2、range() 语句
for 循环本质上是遍历“序列类型”,但是,使用range 语句,可以获得一个简单的数字序列
示例:
for i in range(n):
print(i,end='\t')
print('')
# 获得一个从0开始,到n结束的数字序列(不含n本身)
# 例如range(5),获得的数据是“0 1 2 3 4”
for i in range(n1, n2):
print(i,end='\t')
print('')
# 获取一个从n1开始,到n2结束的数字序列(不含n2本身)
# 例如range(2,8),获得的数据是“2 3 4 5 6 7”
for i in range(n1, n2, step):
print(i,end='\t')
print('')
# 获取一个从n1开始,到n2结束的数字序列(不含n2本身)
# step 为步长,默认为1
# 例如range(1,10,2),获取到的数据是“1 3 5 7 9”
for i in range(10, 1, -1):
print(i,end='\t')
# 从10到1,依次打印,(不含1本身)
# range(10,1,-1),获取到的数据是“10 9 8 7 6 5 4 3 2”
3、for 循环应用场景(重现 while 循环案例)
通过以下使用 for 循环的案例,我们可以看出 for 循环在减少代码数上具有明显的优势,但是使用场景的局限性也要比 while 明显,因为 for 循环无法定义循环条件
(1) 犯了错惹老婆生气,需要输出100次 “媳妇,我错了” 才能被原谅
for i in range(1,11):
print('媳妇⼉,我错了')
print('谢谢媳妇儿的原谅,以后再也不犯这个错了')
(2)请计算1-100的和
sum = 0
for i in range(1,101):
sum += i
print(sum)
AI解释代码: 以上代码是计算1到100的和。 首先,定义一个变量 sum,初始化为 0。 使用 for 循环,循环变量 i 从1到100。 在循环体中,将i加到 sum 中。 循环结束后,输出 sum 的值,即1到100之间所有整数的和。 最终输出的结果是5050。
(3)请计算1-100偶数和
sum = 0
for i in range(0,101,2):
sum += i
print(sum)
AI解释代码: 这段代码利用 for 循环将 0 到 100 中所有的偶数相加并输出结果。具体来说,代码首先定义了一个 sum 变量作为计数器,然后利用 range 函数生成一个从 0 到 100 的序列,其中步长为 2,也就是只包含偶数。在循环中,每遍历一个偶数,都将其加到计数器 sum 上。最后输出计数器 sum 的值。结果为 2550。
(4)请计算水仙花数
n1 = 0; n2 = 0; n3 = 0
for i in range(100, 1000):
n1 = i // 100
n2 = (i - n1 * 100) // 10
n3 = i - n1 * 100 - n2 * 10
if i == (n1**3+n2**3+n3**3):
print(i,end="\t")
AI解释代码: 这段代码的目的是查找三位数中所有符合“水仙花数”定义的数,即一个三位数各个位上数字的立方和等于这个三位数本身。 代码通过一个for循环遍历从100到999之间的所有三位数,然后通过整除和取余运算依次计算出这个三位数的百位数、十位数和个位数。然后,代码将这三个数的立方和计算出来,判断是否等于这个三位数本身,若是则输出这个三位数。 需要注意的是,与while循环不同的是,每次循环后不需要i+=1语句,因为for循环会自动遍历下一个数。
二、for 循环的嵌套应用
执行流程:当内部 for 循环执行完成之后,再执行下⼀次外部 for 循环
1、for 循环嵌套应用场景一
和女朋友闹矛盾生气了,为了哄女朋友,你决定每天道歉一次 ,并买三束鲜花 ,计划总共持续10天 。当你在第四天,买了第2束花后,女朋友不生气了,整个循环都会退出
for i in range(1,11):
for j in range(1,4):
# print('道歉第{}天,买了第{}束花'.format(i,j))
if i == 4 and j == 2:
break
if i == 4:
print("女朋友不生气了")
break
AI解释代码: 以上代码是一个嵌套循环,外层循环变量为 i,内层循环变量为 j,分别从 1 开始循环到 10 和 3。在内层循环中,如果 i 等于 4 并且 j 等于 2,就会执行 break 语句跳出内层循环。 在外层循环中,如果 i 等于 4,则会输出“女朋友不生气了”并执行 break 语句跳出外层循环,结束程序。 如果没有 break 语句,代码会一直循环执行,输出“道歉第i天,买了第j束花”,直到 i 循环到 10 结束为止。
2、for 循环嵌套应用场景二
使用 if 循环编写一个99乘法表
for i in range(1,10):
for j in range(1,10):
if j <= i:
print('{}*{}={}'.format(j,i,i*j),end='\t')
j += 1
print('')
i += 1
AI解释代码: 这段代码是一个简单的九九乘法表的程序,它的执行过程如下: 第1行代码:使用 for 循环对变量 i 进行遍历,范围从1到9。 第2行代码:使用 for 循环对变量 j 进行遍历,范围从1到9。 第3行代码:对 j 和 i 进行判断,如果 j 小于等于 i,则执行第4行代码。 第4行代码:输出 i 和 j 的乘积 i*j,并用 end='\t' 控制输出格式,使结果用制表符分隔。并且将 j 加 1。 第5行代码:执行换行操作。 第6行代码:将 i 加 1。 通过这段代码的嵌套循环,可以输出一个完整的九九乘法表。
3、for 循环和 while 循环配合应用场景
和女朋友吵架,每天道歉10遍,持续5天
for i in range(1,6):
print(f"这是我道歉的第{i}天")
j = 1
while j <= 10:
print(f"老婆,我错了,这是我今天的第{j}次道歉")
j += 1
print("老婆,我明天继续道歉")
AI解释代码: 以上代码是一个Python程序,使用了一个for循环和一个while循环,输出了一段道歉的话语。 首先,for循环将变量i从1到5遍历,每次循环执行以下操作: 1、使用f-string输出第i天的道歉语句。 2、初始化变量j为1。 3、进入while循环,当j小于等于10时,执行以下操作: · 使用f-string输出第j次道歉的话语。 · 将j加1。 4、跳出while循环后,输出一句明天继续道歉的话语。 这段代码的意图是要道歉的人每天都道歉10次,连续道歉5天。
三、for 循环的循环控制语句
while 循环和 for 循环都是重复性的执行特定的操作,在这个过程中,会出现一些其他情况,让我们不得不
-
跳过这次循环,进入下一次循环(continue)
-
终止当前循环(break)
1、continue 语句
中断本次循环,进入下一次循环
示例:
# 碰见3的倍数直接跳过
for i in range(1,10): # 遍历出1~9
if i % 3 == 0: # 判断i是否为3的倍数
continue # 满足条件直接跳过
print(i) # 打印出其余的数字
AI解释代码: 以上代码是一个简单的循环控制语句示例,其主要功能是遍历出1~9之间的数字,但是碰见3的倍数则直接跳过,不再执行后续的代码。 首先,在第1行代码中定义for循环,将遍历范围设置为1~9。在每一次循环中,会检测变量i是否为3的倍数,即判断i % 3是否等于0。如果等于0,说明i是3的倍数,满足条件,因此执行第4行代码中的continue语句,直接跳过本次循环,开始下一次循环。 如果i不是3的倍数,则在第6行代码中打印出当前的i值,然后开始下一次循环,直到遍历完1~9之间的所有数字。因此,在本例中,最终输出的数字为:1、2、4、5、7、8。
2、break语句
终止循环,结束当前(当层)循环
示例:
# 当交通工具的最高时速超过300km/h就停止
li = ["自行车","电瓶车","小轿车","高铁","飞机","火箭","卫星"]
for i in li:
if i == "高铁":
print("高铁最高时速超过300km/h了")
break
print(f"{i}的最高时速不到300km/h")
AI解释代码: 以上代码是一个简单的Python程序,程序运行时会打印出每一种交通工具的最高时速是否超过300km/h,如果有一种交通工具的最高时速超过了300km/h,程序就会停止打印。 具体来说,该程序首先定义了一个列表li,列表中包含了七种交通工具:自行车、电瓶车、小轿车、高铁、飞机、火箭、卫星。然后,程序使用for循环遍历整个列表,对于每个元素,打印它的最高时速。如果遍历到的元素是“高铁”,程序就会输出一条提示信息,表明高铁的最高时速已经超过了300km/h,并使用break语句退出循环。如果没有遍历到“高铁”,程序就会输出一条类似“自行车的最高时速不到300km/h”的信息。 因此,当运行以上代码时,我们可以看到以下输出:
# 自行车的最高时速不到300km/h
# 电瓶车的最高时速不到300km/h
# 小轿车的最高时速不到300km/h
# 高铁最高时速超过300km/h了
四、for 循环的综合练习
请使用 for 循环做一个猜数字游戏
要求:1、从1-100生成一个随机数
2、总共有5次机会
3、若中途猜对,循环就要终止
提示:这里会import(调用)到一个 random(随机)模块
import random
# 此处的number即为1-100的随机数
number = random.randint(1, 100)
print(number)
示例:
import random
print('这是一个猜100以内随机数的游戏,你有5次机会')
num1 = random.randint(1,100)
print(num1)
for i in range(1,5):
num2 = int(input('请输入你要猜的数:'))
if num2 > num1:
print('你猜大了,请继续')
if num2 < num1:
print('你猜小了,请继续')
i += 1
if num2 == num1:
print('恭喜你猜对了!')
break
if num2 != num1:
num3 = int(input('最后一次机会了:'))
if num3 != num1:
print('游戏结束,该随机数为{}'.format(num1))
else:
print('恭喜你猜对了!')
AI解释代码: 以上代码是一个猜数游戏的Python代码,具体解释如下: 1、通过import random引入Python的随机数模块。 2、打印出游戏说明和规则,随机生成一个1到100之间的整数并赋值给num1。 3、进入for循环,循环4次,每次猜测一个数。 4、通过input()函数获取玩家所猜测的数,通过int()将其转换为整数并赋值给num2。 5、判断num2与num1的大小关系,如果num2大于num1则打印“你猜大了,请继续”,如果num2小于num1则打印“你猜小了,请继续”,如果num2等于num1则打印“恭喜你猜对了!”并跳出循环。 6、如果猜测4次后仍未猜对,则提供最后一次机会,通过input()获取玩家所猜测的数并赋值给num3。 7、判断num3与num1是否相等,如果不相等则打印“游戏结束,该随机数为[num1]”,如果相等则打印“恭喜你猜对了!”。