Python从入门到精通——3.2 循环结构

Dunm1e Lv3

前言

首先我们需要了解以下为什么我们要使用循环结构。比如你想要对一个文字重复输出,比如输出9999编,难道你要敲9999个print()吗?这显然是不现实的,你就算复制粘贴也要很长时间。所以我们引入了循环结构,你只需要设置循环条件,以及循环结构中需要执行的操作即可。循环操作的应用面很广,可以和上一章的分支结构相结合来使用。

循环结构就是程序中控制某条或者某些指令重复执行的结构。在Pytho中有for循环和while循环两种。
image.png

图片来源:菜鸟教程

while循环

如果不知道具体的循环次数,我们可以使用while循环。while循环的核心就是条件设置,当不满足条件时就跳出循环。while循环通过一个能够产生或转换出bool值的表达式来控制循环,表达式的值为True则继续循环;表达式的值为False则结束循环。
下面我们来看一个GIF动画演示

下面先来看一个例子,利用while循环来进行求和:
image.png
可以看到,当while语句的条件满足时,将会一直进行循环操作,直到条件不满足
所以利用这个思想,我们可以进行无限循环,比如让表达式的条件始终为True
image.png
这样无限循环最后肯定会让内存爆满从而强行停止,这样是不是可以偷偷做一些事情,我也不知道是什么。可以利用CTRL+C强行退出循环

while else 语句

while语句结束后,也就是条件表达式为False时,将会执行else后的语句
image.png

接下来我们再举一个while循环经典的例子:

上面的break关键字,可以让程序跳出循环,不仅是while循环,后面的for循环也可以跳出,但是break是只能跳出一层循环的
还有个关键字是continue,是指直接放弃当前循环后面的代码,进入下一轮循环
image.png

for循环

for循环是很强大的,可以遍历任何可迭代对象,包括一个列表或者一个范围。
image.png
image.png

上面的例子使用到了for...in语句,一般是遍历某个字符串或者列表等具有一系列单独数据的对象

for循环也可以遍历一个范围,我们一般是利用range()函数
我们先来介绍一下range()函数,我们一般用这个函数来构造一个整数范围,可以是连续的也可以是间隔的,我们先举几个例子

  • range(101):可以用来产生0到100范围的整数,需要注意的是取不到101。
  • range(1, 101):可以用来产生1到100范围的整数,相当于前面是闭区间后面是开区间。
  • range(1, 101, 2):可以用来产生1到100的奇数,其中2是步长,即每次数值递增的值。
  • range(100, 0, -2):可以用来产生100到1的偶数,其中-2是步长,即每次数字递减的值。

当我们想遍历一个列表等对象时,你可能不知道这个对象的长度,这样我们就可以结合range()len()函数:
image.png
image.png

这里再讲一个关键字pass
这个关键字可以用到本节的循环结构中,也可以用到之后需要学习的函数中
pass是一个空语句,只是为了保持程序结构完整性,不做任何事情,一般可以理解为跳过,或者空等待。
image.png
image.png

最后再来几个练习吧

[!NOTE] 练习1: 输入一个正整数判断是不是素数。
提示:素数指的是只能被1和自身整除的大于1的整数。

1
2
3
4
5
6
7
8
9
10
11
12
13
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)

[!NOTE] 练习2:输入两个正整数,计算它们的最大公约数和最小公倍数。

1
2
3
4
5
6
7
8
9
10
11
12
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

[!NOTE] 练习3:打印如下所示的三角形图案。

1
2
3
4
5
*
**
***
****
*****
1
2
3
4
5
    *
**
***
****
*****
1
2
3
4
5
    *
***
*****
*******
*********
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
row = int(input('请输入行数: '))
for i in range(row):
for _ in range(i + 1):
print('*', end='')
print()

for i in range(row):
for j in range(row):
if j < row - i - 1:
print(' ', end='')
else:
print('*', end='')
print()

for i in range(row):
for _ in range(row - i - 1):
print(' ', end='')
for _ in range(2 * i + 1):
print('*', end='')
print()

[!NOTE] 练习4:打印乘法口诀表
可以尝试左下三角和右上三角

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#左上角
for i in range(1,10):

    for j in range(i,10):

        print(f"{i}*{j}={i*j}",end = '\t')

    print()

#右上角
for i in range(1,10):

    for k in range(1,i):

        print(end = '\t')

    for j in range(i,10):

        print(f"{i}*{j}={i*j}",end = '\t')

    print()
   
#左下角
for i in range(1,10):

    for j in range(1,i+1):

        print(f"{i}*{j}={i*j}",end = '\t')

    print()
   
#右下角
for i in range(1,10):

    for k in range(9,i,-1):

        print(end = '\t')

    for j in range(1,i+1):

        print(f"{i}*{j}={i*j}",end = '\t')

    print()

  • Title: Python从入门到精通——3.2 循环结构
  • Author: Dunm1e
  • Created at : 2024-09-29 18:26:37
  • Updated at : 2024-10-09 23:42:10
  • Link: https://dunm1e.github.io/2024/09/29/3670918b968d/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments
On this page
Python从入门到精通——3.2 循环结构