|
文章目录

循环 是编程语言常见的一种流程控制
所谓循环 就是反复的执行一段代码
我们人类语言要让别人反复的做一些事,可以这样说: 请你一直怎样怎样,或者请你反复怎样怎样
Python语言要让计算机反复的做一些事 就要使用循环语句
Python中有两种类型的循环: while 循环 和 for 循环
1. while循环
while循环 是: 检查一个条件表达式,只要条件表达式计算结果为True 时, 就执行下面缩进的代码
如此反复,直到条件表达式计算结果为False时,结束 循环
while循环的基本语法:
while 条件:
条件满足时,做的事情1
条件满足时,做的事情2
pass
i = 0
# 冒号和缩进不要忘了.
# 当条件的运算结果为True的时候, 会运行while代码块下的代码.
# 若while后的条件一直为True, 则会一直循环运行while代码块下的代码.
# 若为False, 则表示结束循环.
# 所以需要设置循环终止的条件,否则将进入无限循环.
案例:
*
**
***
****
*****
******
*******
********
*********
**********
# 打印这样的一个高为10的直角三角形.
i = 1
while i <= 10:
print('*' * i)
i += 1
对于while循环的使用需要当心死循环, 所以需要注意循环条件.
1.1 while循环的嵌套
当我们需要在while循环内执行另一个循环时,我们可以使用while循环嵌套的形式
while循环嵌套的基本语法
while 条件1:
条件1满足时,做的事情1
条件1满足时,做的事情2
pass
while 条件2:
条件2满足时,做的事情1
条件2满足时,做的事情2
pass
# 第一个while循环将重复执行内部代码块,直到条件1不再满足为止。在内部代码块中,我们有另一个while循环,它将重复执行内部代码块,直到条件2不再满足为止。这种嵌套的循环结构可以用于处理许多问题.
# 需要注意的是,在使用嵌套循环时,我们需要仔细考虑内部和外部循环之间的交互,以确保程序能够正确地执行。另外,需要注意的是,循环嵌套可能会导致程序的执行速度变慢,因此我们应该尽可能地避免不必要的循环嵌套.
案例1: 打印99乘法表
1x1=1
1x2=2 2x2=4
1x3=3 2x3=6 3x3=9
1x4=4 2x4=8 3x4=12 4x4=16
1x5=5 2x5=10 3x5=15 4x5=20 5x5=25
1x6=6 2x6=12 3x6=18 4x6=24 5x6=30 6x6=36
1x7=7 2x7=14 3x7=21 4x7=28 5x7=35 6x7=42 7x7=49
1x8=8 2x8=16 3x8=24 4x8=32 5x8=40 6x8=48 7x8=56 8x8=64
1x9=9 2x9=18 3x9=27 4x9=36 5x9=45 6x9=54 7x9=63 8x9=72 9x9=81
"""
1x1=1
1x2=2 2x2=4
1x3=3 2x3=6 3x3=9
1x4=4 2x4=8 3x4=12 4x4=16
1x5=5 2x5=10 3x5=15 4x5=20 5x5=25
1x6=6 2x6=12 3x6=18 4x6=24 5x6=30 6x6=36
1x7=7 2x7=14 3x7=21 4x7=28 5x7=35 6x7=42 7x7=49
1x8=8 2x8=16 3x8=24 4x8=32 5x8=40 6x8=48 7x8=56 8x8=64
1x9=9 2x9=18 3x9=27 4x9=36 5x9=45 6x9=54 7x9=63 8x9=72 9x9=81
"""
# 1. 外部循环 ✖右边是外部循环
# 2. 内部循环 ✖左边是内部循环
i = 1
while i <= 9:
j = 1
while j <= i:
print(f'{j}x{i}={j*i}', end='\t')
j += 1
print('')
i += 1
1.2 补充学习:print函数
系统方法print的定义:
def print(self, *args, sep=' ', end='\n', file=None):
pass
默认情况下调用print()方法会自动换行,因为参数end的缺省值是'\n'
比如:
print('hello world')
`如果想要指定结尾的表现,可以修改参数end的取值``,比如设置为空就和C语言中的printf函数一样了,不会默认换行
print('hello world', end='')
2. for循环
2.1 range函数
在学习for循环之前, 先来学习range语句. 这是一个最常与for循环一起用的语句.
语法:
range(start, stop[, step])
参数说明:
- start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);
- stop: 计数到 stop 结束,
但不包括 stop
。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5 - step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)
2.2 for循环
在python中, 除了while循环语句, 还提供了另外一种循环: for循环语句. 也叫做遍历.
语法:
for 临时变量 in 序列(可迭代对象):
# for循环体的代码块
# for循环中定义了一个临时变量,那么在整个循环体中都可以使用这个变量,包括循环体内部的if语句或者嵌套的循环, 但是在for循环的循环体外就不要使用此临时变量了.
for循环是一种常见的迭代结构, 用于遍历序列中的元素, 在python中, for循环可以用于遍历列表, 元组, 字符串, 字典, 集合等容器类型中的元素, 并将这些元素逐一赋值给循环中的临时变量. 然后执行特定的操作, 循环会一直重复执行, 直到序列中的所有元素都被遍历完成. 对于序列中的每个元素, 都会执行一次循环体中的代码块.
for循环通常有一个循环变量, 一个序列,和一个代码块组成, 循环变量用于存储当前迭代的元素, 序列是要遍历的容器类型, 代码块则是在每个迭代步骤中要执行的操作, 在每个迭代步骤中, 循环变量都会被赋值为序列中的下一个元素, 然后执行代码块. 当序列中的所有元素都被遍历完成后, 循环结束.
for循环简单易懂, 代码结构清晰, 可读性强, 是一种高效的可靠的循环结构.
for循环和while循环两者能完成的功能差不多.
但是也是有区别的:
- for循环用于遍历序列(例如列表、元组、字符串等)或其他可迭代对象,并且在每次迭代中,都会将序列中的一个元素赋值给循环变量,直到序列中的所有元素都被遍历完毕,循环结束. while循环则用于在条件为真时执行一段代码块,直到条件为假为止.
- for循环不需要显式地计数器变量,也不需要显式地定义循环条件,因为循环变量会自动遍历整个序列.而while循环则需要显式地定义循环条件,并在代码块内控制循环计数器的更新.
总之,for循环适用于已知数量的序列或可迭代对象的遍历,而while循环适用于未知数量的循环执行,需要手动控制循环计数器和条件.
2.3 continue和break以及return
continue 语句用来告诉Python跳过当前循环的剩余语句,然后继续进行下一轮循环.
break用来跳出整个循环
很多初学者,经常会搞不清 break 和 return的区别
首先, return 只能用在函数里面, 表示 从函数中返回
代码主体部分是不能用return的
比如,下面的代码执行起来就会报错
while True:
command = input("请输入命令:")
if command == 'exit':
return
print(f'输入的命令是{command}')
print('程序结束')
提示:
SyntaxError: 'return' outside function
因为 return 是表示从函数中返回,它 是不能用在 函数外面的
函数中的循环体内的代码, 使用 return 和 break 都可以从循环中跳出
但是,break 只是 跳出循环, 如果循环后面还有代码, 会进行执行,如下
def inputCommand():
while True:
command = input("请输入命令:")
if command == 'exit':
break
print(f'输入的命令是{command}')
print('末尾语句')
inputCommand()
执行该函数,输入 exit 发现,还会打印出 末尾语句 这句话
return 则会从函数里面立即返回, 函数体内的后续任何代码都不执行了,我们把上面的代码中的break 换成return, 如下
def inputCommand():
while True:
command = input("请输入命令:")
if command == 'exit':
return
print(f'输入的命令是{command}')
print('末尾语句')
inputCommand()
执行该函数,输入 exit 发现,就不会打印出 末尾语句 这句话.
2.4 for循环的嵌套
语法:
for 临时变量1 in 序列1(可迭代对象):
# for循环体的代码块
# for循环体的代码块
# for循环体的代码块
for 临时变量2 in 序列2(可迭代对象):
# for循环体的代码块
# for循环体的代码块
# for循环体的代码块
for i in range(10):
print(f"外层循环i:{i}")
for j in range(10):
print(f"内层循环j:{j}")
注意点:
continue和break在嵌套循环中, 只对当前循环起作用.
for i in range(10):
print(f"外层循环i:{i}")
for j in range(10):
print(f"内层循环j:{j}")
break
print(f'哈哈哈哈{i}')
3. 补充学习
3.1 enumerate函数
有的时候, 在使用for循环从列表或者元组中遍历元素的时候, 除了要获取每个元素, 还需要得到每个元素在列表元组里面的索引.
enumerate() 执行之后每次迭代都会返回一个元组, 元组里面有两个元素, 依次是元素的索引和元素本身
比如, 找出下面列表中年龄大于17岁的学员, 打印出他们在列表中的索引:
studentAges = ['小王:17', '小赵:16', '小李:18', '小孙:16', '小徐:18']
这时候可以使用 enumerate 函数, 像下面这样:
studentAges = ['小王:17', '小赵:16', '小李:18', '小孙:16', '小徐:18']
# enumerate(studentAges) 执行之后每次迭代返回一个元组
# 元组里面有两个元素, 依次是元素的索引和元素本身
for idx, student in enumerate(studentAges):
if int(student.split(':')[-1]) > 17:
print(idx)
3.2 zip函数
Python中有个内置函数zip, 常用来依次组合多个列表或者元组, 将里面相同索引的数据放入一组, 方便循环使用
比如:
names = ['张三', '李四', '王五'] # 姓名
salaries = [18000, 11000, 15000] # 对应薪资
name_salary = zip(names, salaries)
for name, salary in name_salary:
print(name, salary)
运行结果是:
张三 18000
李四 11000
王五 15000
如果,两个列表里面元素个数不相等, zip以少的那个为准,比如:
names = ['张三', '李四', '王五'] # 姓名
salaries = [18000, 11000] # 对应薪资,少一个
name_salary = zip(names, salaries)
for name, salary in name_salary:
print(name, salary)
运行结果是:
张三 18000
李四 11000
3.3 不要在遍历列表的过程中删除元素
看下面这段代码,把列表中值为 4 的元素删除
list1 = [ 4, 4, 1, 2]
for idx, num in enumerate(list1):
if num == 4:
list1.pop(idx)
print(list1)
运行结果是:
[4, 1, 2]
因为遍历过程中删除一个元素,使得列表的长度发生了变化,后面的元素索引被提前了,就会跳过一个元素
所以遍历 列表(包括后面要学习的字典)时, 不要在过程中删除元素
可以新建一个列表,这样:
list1 = [ 4, 4, 1, 2]
list2 = []
for idx, num in enumerate(list1):
if num != 4:
list2.append(num)
print(list2)
|
|