《Python零基础快乐学习之旅》学习笔记7——循环设计

第7章 循环设计

7.1 基本for循环

for循环可以让程序将整个对象内的元素遍历(也可以叫迭代),在遍历过程中,同时可以记录或输出每次遍历的状态或轨迹。for循环基本语法格式如下:

for var in 可迭代对象: 
程序代码段

可迭代对象(iterable object)可以是列表、元组、字典与集合或range()。在信息科学中,迭代(iteration)可以解释为重复执行语句,上述语法可以解释为将可迭代对象的元素当作var,重复执行,直到每个元素都被执行一次,整个循环才会停止。

for循环基本操作

fruits = ['apple', 'orange', 'banana', 'peach', 'pear']
for fruit in fruits:
    print(fruit)

执行结果:

apple
orange
banana
peach
pear

使用for循环时,如果程序代码段只有一行,它的语法格式可以用下列方式表达:

for var in 可迭代对象:程序代码段

如前面的例子可写成:

fruits = ['apple', 'orange', 'banana', 'peach', 'pear']
for fruit in fruits:print(fruit)

当for循环的程序代码段有多行程序语句时,这些语句都需要做缩进处理。它的语法格式可用下列方式表达:

for var in 可迭代对象:
程序代码
程序代码
......

程序实例:

count = 0;
fruits = ['apple', 'banana', 'cherry', 'durian']
for fruit in fruits:
    if(fruit != ''):count = count+1
    print("第 %d 种水果是:%s" % (count,fruit.title()))

执行结果:

1 种水果是:Apple
第 2 种水果是:Banana
第 3 种水果是:Cherry
第 4 种水果是:Durian

将for循环应用在数据类型的判断:

files = ['demo1.py', 'demo2.py', 'demo3.java', 'demo4.php']
py = []
for file in files:
    if file.endswith('.py'): # 以.py为扩展名
        py.append(file)      # 加入列表
print(py)

执行结果:

['demo1.py', 'demo2.py']

7.2 range()函数

Python可以使用range()函数产生一个等差级序列,这样的等差级序列称为可迭代对象或range对象。如果只是执行普通的循环迭代,可以直接使用range()对象作为循环的计数器,这类迭代只有迭代时计数指针需要内存,所以可省略内存空间,range()函数的用法与列表的切片(slice)类似。

range (start, stop, step)

从start开始,以step为步长,产生从start~stop-1的等差数列。(start默认为0,step默认为1)

>>> for x in range(3):
	print(x)

	
0
1
2
>>> for x in range(1,5):
	print(x)

	
1
2
3
4
>>> for x in range(1,10,2):
	print(x)

	
1
3
5
7
9
>>> type(x)
<class 'int'>
>>> for x in range(3,-3,-2):
	print(x)

	
3
1
-1

7.2.1 只有一个参数的range()函数

n = int(input("请输入星号数量:")) # 定义星号的数量
for number in range(n):            # for循环
    print("*",end="")              # 打印星号

执行效果:

请输入星号数量:4
****

7.2.2 有两个参数的range()函数

当range()函数搭配两个参数时,它的语法格式如下:

range (start, end) # start是起始值,end-1是终止值,step默认为1

上述可以产生起始值为start到终止值为end-1之间,每次递增1的序列,start或end可以是负整数,如果终止值小于起始值,则会产生空序列或称空range对象。

>>> for x in range(10,2):
	print(x)

	
>>> for x in range(-1,2):
	print(x)

	
-1
0
1

7.2.3 有3个参数的range()函数

当range()函数搭配3个参数时,它的语法格式如下:

range (start, end, step) # start为起始值,end为终止值,step为间隔值(或步长)

从起始值start开始,以end-1为终止值,产生以step为步长的等差序列。

>>> for x in range(-1,2):
	print(x)

	
-1
0
1
>>> for x in range(2,10,2):
	print(x)

	
2
4
6
8
>>> for x in range(10,0,-2):
	print(x)

	
10
8
6
4
2

使用range()函数搭配3个参数,产生列表:

start = 2
end = 9
step = 2
number1 = list(range(start, end, step))
print("当start值为%2d,end值为%2d,step值为%2d时的range()串行 = " % (start, end, step), number1)
start = -2
end = 9
step = 3
number1 = list(range(start, end, step))
print("当start值为%2d,end值为%2d,step值为%2d时的range()串行 = " % (start, end, step), number1)
start = 5
end = -5
step = -3
number1 = list(range(start, end, step))
print("当start值为%2d,end值为%2d,step值为%2d时的range()串行 = " % (start, end, step), number1)

执行结果:

当start值为 2,end值为 9,step值为 2时的range()串行 =  [2, 4, 6, 8]
当start值为-2,end值为 9,step值为 3时的range()串行 =  [-2, 1, 4, 7]
当start值为 5,end值为-5,step值为-3时的range()串行 =  [5, 2, -1, -4]

删除列表内所有元素:

fruits = ['apple', 'banana', 'orange', 'pear']
print("目前fruits列表:",fruits)
#i = 1
for fruit in fruits[:]:
    fruits.remove(fruit)
    print("删除 %s " % fruit)
    print("目前fruits列表:",fruits)

执行结果:

目前fruits列表: ['apple', 'banana', 'orange', 'pear']
删除 apple 
目前fruits列表: ['banana', 'orange', 'pear']
删除 banana 
目前fruits列表: ['orange', 'pear']
删除 orange 
目前fruits列表: ['pear']
删除 pear 
目前fruits列表: []

7.3 进阶的for循环应用

7.3.1 巢状for循环

一个循环内有另一个循环,我们称之为巢状循环。如果外层循环要执行n次,内层循环要执行m次,则整个循环需执行n*m次。设计这类循环时要注意以下几点:

  • 外层循环的索引值变量与内层循环的索引值变量不要同名,以免混淆。
  • 注意程序代码的缩进

下列是巢状循环基本语法:

for var1 in 可迭代对象:	# 外层for循环
...
	for var2 in 可迭代对象:	# 内层for循环

打印九九乘法表:

for i in range(1, 10):
    for j in range(1, 10):
        if j <= i:
            result = i * j
            print("%d*%d=%-3d" % (j, i, result), end=" ")  # %-3d表示每个输出预留3个,左对齐
    print()  # 换行输出

执行结果:
在这里插入图片描述

绘制直角三角形:

for i in range(1, 10):
    for j in range(1, 10):
        if j <= i:
            print("aa", end="")
    print() # 换行输出

执行结果:
在这里插入图片描述

7.3.2 强制离开for循环-break指令

在for循环中,当某些条件发生需要退出循环时,可使用break指令。常用的语法格式如下:

for var in 可迭代对象:
	程序代码段1
	if 条件语句:	# 判断条件语句
		程序代码段2
break	# 如果条件语句为True,则退出for循环
	程序代码段3

程序实例:

# 一个列表scores内含有10个分数元素,列出前5名。
scores = [69, 73, 88, 66, 90, 78, 83]
scores.sort(reverse = True) # 从大到小排序
count = 0
for sc in scores:
    count += 1
    print(sc, end=" ")
    if count == 5:  # 取前5名
        break       # 离开for循环

执行结果:

90 88 83 78 73 

7.3.3 for循环暂时停止不往下执行-continue指令

在设计for循环时,如果期待某些条件发生时不往下执行循环内容,可以使用continue指令。该指令通常与if语句搭配使用。常用的语法格式如下:

for var in 可迭代对象:
	程序代码段1
	if 条件语句:	# 如果条件语句为True,则不执行程序代码段3
		程序代码段2
continue
	程序代码段3

程序实例:

scores = [69, 73, 88, 66, 90, 78, 83]
sc_A = []
for score in scores:
    if score < 80:       # 小于80则不往下执行
        continue
    sc_A.append(score)  # 添加到列表sc_A中
print(sc_A)

执行结果:

[88, 90, 83]

7.4 while循环

一般while循环使用的语意上是条件控制循环,在符合特定条件下执行。for循环则是一种技术循环,会重复执行特定次数。

7.4.1 基本while循环

程序实例:

answer = 36
guess = 0
while guess != answer:
    guess = int(input("猜一个1~100之间的整数:"))
    if guess > answer:
        print("再小一点")
    elif guess < answer:
        print("再大一点")
    else:
        print("恭喜答对啦")

执行结果:
在这里插入图片描述

7.4.2 巢状while循环

while循环也允许嵌套,此时的语法格式如下:

while 条件运算:	# 外层while循环
	...
	while 条件运算:	# 内层while循环
		...

程序实例:

# 打印九九乘法表
i = 1
while i <= 9:
    j = 1
    while j <= i:
        result = i * j
        print(f'{j}*{i}={result}', end='\t')
        j += 1
    print()
    i += 1

执行效果:
在这里插入图片描述

7.4.3 强制离开while循环-break指令

在设计while循环时,如果期待某些条件发生时可以离开循环,可以通过在循环内执行break指令退出循环。常用的语法格式如下:

while 条件语句A:
	程序代码段1
	if 条件语句B:	# 判断条件语句A
		程序代码段2
break	# 如果条件语句A为True,则离开while循环
	程序代码段3

程序实例:

scores = [69, 73, 88, 66, 90, 78, 83]
scores.sort(reverse = True) # 从大到小排序
count = 0
while True:         # while无限循环
    print(scores[count], end=" ")
    count += 1
    if count == 5:  # 取前5名
        break       # 离开for循环

执行结果:

90 88 83 78 73 

7.4.4 while循环暂时停止不往下执行-continue指令

在设计while循环时,若期待某些条件发生时可以不往下执行循环内容,则可使用continue指令。常用的语法格式如下:

while 条件运算A:
	程序代码段1
	if 条件语句B: 	# 如果条件语句是True,则不执行程序代码段3
		程序代码段2
continue
	程序代码段3

程序实例:

# 列出1~10之间的偶数
index = 0
while index <= 10:
    index += 1;
    if (index % 2 != 0):  # 测试是否为奇数
        continue          # 不往下执行
    print(index)          # 输出偶数

执行结果:

2
4
6
8
10

7.4.5 while循环条件语句与可迭代对象

while循环的条件语句也可以和可迭代对象配合使用,此时它的语法格式如下:

while var in 可迭代对象:
程序代码段

程序实例:

# 删除列表内的apple字符串
fruits = ['apple', 'banana', 'orange', 'apple', 'watermelon', 'pear', 'apple']
fruit = 'apple'
print("删除前的fruits:", fruits)
while fruit in fruits:  # 只要列表中包含apple,循环就继续
    fruits.remove(fruit)
print("删除后的fruits:", fruits)

执行结果:

删除前的fruits: ['apple', 'banana', 'orange', 'apple', 'watermelon', 'pear', 'apple']
删除后的fruits: ['banana', 'orange', 'watermelon', 'pear']

往期文章:

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦里逆天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值