在写程序的时候,一定会遇到需要重复执行某条或某些指令的场景,例如用程序控制机器人踢足球,如果机器人持球而且还没有进射门范围,那么我们就要一直发出让机器人向球门方向移动的指令。这个场景中,让机器人向球门方向移动就是一个需要重复的动作。
循环结构就是程序中控制某条或某些指令重复执行的结构,在Python中构造循环结构有两种做法,一种是for-in
循环,一种是while
循环。
如果明确的知道循环执行的次数或者要对一个容器进行迭代(后面会讲到),那么我们推荐使用for-in
循环,例如下面代码中计算1~100求和的结果:
# 求1~100的和
# 定义一个求和的变量
num = 0
# 这里的range()函数包头不包尾,且从0开始累加1
# 跟数学里面的取值范围[0,101)有点相似
for i in range(101):
num += i
print('求的和为:',num)
当然我们的range函数还有给定步长进行累加的功能,跟数学的等差数列有点相似,步长就相当于等差数列的d。例如下面求1~100的奇数的和:
'''求1~100的奇数的和'''
# 给定一个求和的变量
sum = 0
for i in range(101):
# 判断是否为奇数,通过取模如果余数为0则为偶数
# 余数不为0则为奇数,此时if语句才能执行
# 当然我们这里也可以将if语句改为 if i % 2 != 0:
if i % 2:
sum += i
print('所有的奇数和为:',sum)
如果要构造不知道具体循环次数的循环结构,我们推荐使用while
循环。while
循环通过一个能够产生或转换出bool
值的表达式来控制循环,表达式的值为True
则继续循环;表达式的值为False
则结束循环。
我们可以通过下面的猜数字的游戏来说明一下while循环:
'''
猜数字的小游戏
'''
# 定义一个开关使用布尔值进行定义
b = True
# 定义一个需要猜的值
c = 48
while b:
# 通过键盘输入猜的数字
a = int(input('请输入一个0~100的数字:'))
if a == c:
print('恭喜您猜对了!')
b = False
elif a > c:
print('您输入的数偏大哦!')
elif a < c:
print('您输入的数偏小哦!')
break
关键字来提前终止循环,需要注意的是break
只能终止它所在的那个循环,这一点在使用嵌套的循环结构需要引起注意。除了break
之外,还有另一个关键字是continue
,它可以用来放弃本次循环后续的代码直接让循环进入下一轮。例如:
'''
测试break和continue的使用
'''
for i in range(10):
if i == 3:
print('此时我会执行continue语句跳过本次循环')
continue
elif i == 8:
print('此时我会执行break语句,中止程序')
break
print(i)
和分支结构一样,循环结构也是可以嵌套的,也就是说在循环中还可以构造循环结构。下面的例子演示了如何通过嵌套的循环来输出一个九九乘法表:
'''
打印九九乘法表
'''
for x in range(1,10):
for y in range(1,x+1):
print(f'{y}*{x} = {x*y}',end='\t')
print()
输入一个正整数判断是不是素数
素数指的是只能被1和自身整除的大于1的整数
# 导入求平方根的包
from math import sqrt
num = int(input('请输入一个正整数:'))
# 这里目的是减少循环的次数
end = int(sqrt(num))
is_prime = True
for x in range(2, end + 1):
if num % x == 0:
is_prime = False
break
if is_prime and num != 1:
print('%d是素数' % num)
else:
print('%d不是素数' % num)
输入两个正整数,计算它们的最大公约数和最小公倍数。
两个数的最大公约数是两个数的公共因子中最大的那个数;两个数的最小公倍数则是能够同时被两个数整除的最小的那个数。
x = int(input('x = '))
y = int(input('y = '))
# 如果x大于y就交换x和y的值
if x > y:
# 通过下面的操作将y的值赋给x, 将x的值赋给y
x, y = y, x
# 从两个数中较小的数开始做递减的循环
for factor in range(x, 0, -1):
if x % factor == 0 and y % factor == 0:
print('%d和%d的最大公约数是%d' % (x, y, factor))
print('%d和%d的最小公倍数是%d' % (x, y, x * y // factor))
break
打印三角形图案
# 第一种排列
row = int(input('请输入行数: '))
for i in range(row):
for _ in range(i + 1):
print('*', end='')
print()
print('第一种排列')
# 第二种排列
for i in range(row):
for j in range(row):
if j < row - i - 1:
print(' ', end='')
else:
print('*', end='')
print()
print('第二种排列')
# 第三种排列
for i in range(row):
for _ in range(row - i - 1):
print(' ', end='')
for _ in range(2 * i + 1):
print('*', end='')
print()
print('第三种排列')
输出结果为: