31天Python入门——第5天:循环那些事儿

发布于:2025-03-20 ⋅ 阅读:(12) ⋅ 点赞:(0)

在这里插入图片描述

你好,我是安然无虞。


在这里插入图片描述

循环 是编程语言常见的一种流程控制

所谓循环 就是反复的执行一段代码

我们人类语言要让别人反复的做一些事,可以这样说: 请你一直怎样怎样,或者请你反复怎样怎样

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循环两者能完成的功能差不多.

但是也是有区别的:

  1. for循环用于遍历序列(例如列表、元组、字符串等)或其他可迭代对象,并且在每次迭代中,都会将序列中的一个元素赋值给循环变量,直到序列中的所有元素都被遍历完毕,循环结束. while循环则用于在条件为真时执行一段代码块,直到条件为假为止.
  2. 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)
遇见安然遇见你,不负代码不负卿。
谢谢老铁的时间,咱们下篇再见~