循环是编程语言常见的流程控制。
Python语句要让计算机反复地做一些事情,就要用到循环语句。
有While和for循环。
while循环:
- command = input("请输入命令:")
- while command != 'exit':
- print(f'输入的命令是{command}')
- command = input("请输入命令")
while循环是:检查一个条件表达式,只要条件表达式计算结果为True,就会执行下面缩进的代码。
如此反复执行,如果条件表达式为False,就结束循环。
command != 'exit' 这是一个条件表达式,判断输入的command这个变量值是否等于exit。
如果不等于,就开始执行下面缩进的代码,就是循环体中的代码,这个代码中还会让用户再次输入值到command。
如果用户输入的command,一直都不是exit,就会一直执行循环。
如果输入的comand等于exit,就结束循环。
这段代码写的还是比较麻烦。这样写有点啰嗦。
如果这个表达式永远为True,那么这个循环就永远不退出循环,一直处于运行状态。就变成死循环。也就是循环条件都是成立的。
死循环不一定代表这个程序是有问题的。看你程序的意图和目的来定的。
从1打印到100的代码:
- i = 1
- while i <= 100:
- print(i, end=" ")
- i += 1
for循环:
for循环的用法:
for循环,通常是从一个sequence类型,比如字符串、列表或者元组中依次取出每个元素进行操作。
- studentAges = ['小王:17', '小赵:16', '小李:17', '小孙:16', '小徐:18']
-
- for student in studentAges:
- print(student)
for student in studentAgs: 这个student变量依次代表了studentAges里面的每个元素,执行下面的缩进的代码print(student)。
依次的意思:
第一次循环是取出第一个元素。
然后第二次循环是取出第二个元素。
……
如果操作一个空列表:
- for i in []:
- print(i)
循环n次:
开发程序的时候,我们经常需要循环执行某段代码n次。
- for n in range(10):
- print(n)
打印出来是从0到9。从0到range里面参数值-1的这个范围。
这段代码使用的是for语句和一个内置类型range。
python3中,range不是一个函数,不会返回一个数字列表,python3中range是一个类。
不想从0开始打印,而是从某个值开始,如果打印从50到60的数字。
可以使用range(50, 61) 也是那个概念:顾头不顾尾。
- for n in range(50, 61):
- print(n, end=" ")
enumerate函数:
有的时候,在使用for循环从列表或者元组中遍历元素的时候,除了要取得每个元素,还需要得到每个元素在列表或元组里面的索引。
比如要从下面列表中找出年龄大于17的学员,并打印他们在列表中的索引。
studentAges = ['小王:17', '小赵:16', '小李:18', '小孙:16', '小徐:18']
这个时候就可以使用enumerate函数。
- studentAges = ['小王:17', '小赵:16', '小李:17', '小孙:16', '小徐:18']
-
- for idx, student in enumerate(studentAges):
- if int(student.split(':')[1]) > 17:
- print(idx)
- print(student.split(":")[0])
- print(student.split(":")[1])
break终止循环:
有的时候,我们循环体中的代码发现满足某个条件,就需要终止循环。
我们使用关键字break:
- while True:
- command = input("请输入命令:")
- if command == 'exit':
- break
- print(f'输入的命令是{command}')
输入exit就直接退出循环。
这段代码的终止条件不是通过while循环的条件判断语句来进行判断的。而是通过if语句,其中有break语句。
解释器执行到循环语句中的break语句,就会从循环while退出。
break是非常常用的。
函数中的break和return:
return只能用在函数里面,表示从函数中返回。
return语句表示从函数中返回,它是不能用在函数外边的。
但是在函数中的循环体内的代码,使用return和break都可以从循环体中跳出。但是break只是跳出循环,如果循环后面有代码,还是会执行的。
return表示会从函数里面立即返回,函数体里的任何代码都不执行了。
continue语句:
break是立即跳出循环。以后的循环就不执行了。
有的时候,我们循环体内的代码在发现某个条件满足的时候,不是要终止整个循环,而是只结束当前这一轮循环,后面还要继续循环的执行。
- while True:
- command = input("请输入命令:")
- if command == 'exit':
- break
- if command == 'cont':
- continue
- print(f'输入的命令是{command}')
-
- print('程序结束')
当输入cont的时候,就执行continue语句,是结束本次循环。不打印这个命令的那条语句,但还是让用户继续输入下一个命令。
列表推导式:
我们经常需要这样处理一个列表,把列表里的每个元素,经过相同的处理,生成另一个列表。
- list1 = [1,2,3,4,5,6]
- list2 = [num**2 for num in list1]
-
- print(list2)
那这种写法,通常叫做列表推导式。
这个是经常使用到的列表推导式。这样写就比较省事。
循环嵌套:
这是典型的 2个列表元素两两组合的问题:
- list1 = ['关羽','张飞','赵云','马超','黄忠']
- list2 = ['典韦','许褚','张辽','夏侯惇','夏侯渊']
-
- for member1 in list1:
- for member2 in list2:
- print(f'{member1} 大战 {member2}')
需要使用到循环的嵌套。
所谓的循环的嵌套,就是循环中还有循环。
内部的代码都要执行完,才能执行外部的循环代码。