循环结构

for-in循环while循环break和continue关键字练习

在写程序的时候,一定会遇到需要重复执行某条或某些指令的场景,例如用程序控制机器人踢足球,如果机器人持球而且还没有进射门范围,那么我们就要一直发出让机器人向球门方向移动的指令。这个场景中,让机器人向球门方向移动就是一个需要重复的动作。

循环结构就是程序中控制某条或某些指令重复执行的结构,在Python中构造循环结构有两种做法,一种是for-in循环,一种是while循环。

for-in循环

如果明确的知道循环执行的次数或者要对一个容器进行迭代(后面会讲到),那么我们推荐使用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循环。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和continue关键字

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('第三种排列')

输出结果为:

精彩文章

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: