在Python中的列表(2)——列表操作以及前面的内容中,其实已经使用了for循环,如使用for循环遍历整个列表或字典。
1、循环的概念
循环结构是编程中一种非常重要的结构,循环可以让程序自动完成重复的工作,从而极大地节省时间开销和提高编程效率。
2、for循环
names = ['Peter','Mike','Rose','Jack']
for each in names:
print(each)
#结果:
Peter
Mike
Rose
Jack
在for循环中,对于用于存储每轮循环的值的变量可以自定义任何名称(如上述代码中的each),然而,建议使用能描述元素意义的名称,这种命名有助于自己回顾代码含义以及方便他人阅读你写的代码。
names = ['Peter','Mike','Rose','Jack']
for each in names:
print(each)
print('\nHello World.')
#结果:
Peter
Mike
Rose
Jack
Hello World.
在for循环中,要格外注意冒号和缩进,每次循环中都执行一遍缩进后的代码段,更确切地说是for循环结构体中的代码。在所有循环都结束之后,才会继续往下执行for循环之后的代码(即上述代码中没有缩进的print('\nHello World.'))。
因此,是否缩进以及缩进主要是根据该语句是否需要放在for循环结构体中以及是需要重复执行的还是只执行一次的。编写for循环结构时,必须先梳理清楚程序的逻辑关系,这不仅适用于Python中的编程,也适用于所有编程。
3、while循环
只要while后面的条件测试为True,则while循环不断的运行,直到指定的条件不满足为止。
3.1 while循环的使用
num = 0
while num < 5:
print(num)
num = num + 1
#结果:
0
1
2
3
4
while可以与input()函数结合使用,当用户输入为某一特定值时才停止循环,否则一直循环下去:
cmd = ''
while cmd != 'No':
cmd = input('Please entry your cmd: ')
print(cmd)
#结果:
Please entry your cmd: Yes
Yes
Please entry your cmd: mj
mj
Please entry your cmd: No
No
代码中,cmd首先初始化,然后执行循环,只要用户不输入‘No’,就一直循环。
3.2 break退出循环
如果要退出while循环,不在运行循环中剩余的代码,可以使用break语句。
while True:
cmd = input('Please entry your cmd: ')
if cmd == 'No':
break
else:
print(cmd)
#结果:
Please entry your cmd: Yes
Yes
Please entry your cmd: my
my
Please entry your cmd: 2
2
Please entry your cmd: No
一旦break语句执行,就不再执行break语句后面的(循环结构体内的)代码,也不再测试while后面的条件了。在python中,任何循环都可以使用break语句,例如,可以使用break语句结束遍历列表或字典的for循环:
nums = [2,5,4,1,9,8]
for num in nums:
if num == 4:
break
else:
print(num)
#结果:
2
5
3.3 循环中的continue
若要返回循环的开头,继续根据条件测试决定是否继续执行循环,可以使用continue语句,它不像break一样直接退出整个循环,只是在这一轮循环内,跳过continue后面的语句。
while True:
cmd = input('Please entry your cmd: ')
if cmd == 'No':
continue
else:
print(cmd)
#结果:
Please entry your cmd: yes
yes
Please entry your cmd: mo
mo
Please entry your cmd: No
Please entry your cmd: yy
yy
3.4 避免死循环
如果while后面的测试条件一直为True,循环就无法结束,最终成为死循环。
a = 0
while a >= 0:
print(a)
a = a + 1
如果程序陷入了死循环,要想结束程序运行,可以按“Ctrl+C”,也可以直接关闭程序。
3.5 使用while循环处理列表和字典
for循环可以遍历列表,但不建议在for循环中修改列表,否则导致难以跟踪其元素的变化。如果需要在遍历列表的同时对其修改,可以使用while循环。
3.5.1 元素在不同列表之间移动
oldlist = [1,5,3,4,9,5,7]
newlist = []
while oldlist:
temp = oldlist.pop()
print(temp)
newlist.append(temp)
print(newlist)
#结果:
7
5
9
4
3
5
1
[7, 5, 9, 4, 3, 5, 1]
3.5.2 删除列表中的所有特定值
同一个值在列表中可能出现多次,如果要删除列表中的所有该值,可以使用while循环来完成:
oldlist = [1,5,3,4,9,5,3,4,3,7]
print(oldlist)
while 3 in oldlist:
oldlist.remove(3)
print(oldlist)
#结果:
[1, 5, 3, 4, 9, 5, 3, 4, 3, 7]
[1, 5, 4, 9, 5, 4, 7]
上述代码删除列表中的多个3。
3.5.3 使用while循环为字典添加元素
grade_record = {}
#初始化状态标志
flag = True
while flag:
#让用户输入名字和成绩信息
name = input('\nPlease input your name: ')
grade = input('Please sign in your grade: ')
#将元素添加到字典中
grade_record[name] = grade
#询问是否继续输入
cmd = input('Is there anyone else?(yes/no)')
if cmd == 'no':
flag = False
#登记完成,打印结果
print('\n---Grades:---')
for name, grade in grade_record.items():
print(name + ':' + grade)
#结果:
Please input your name: Tom
Please sign in your grade: 95
Is there anyone else?(yes/no)yes
Please input your name: Lucy
Please sign in your grade: 90
Is there anyone else?(yes/no)no
---Grades:---
Tom:95
Lucy:90
上述代码是一个简单的成绩录入程序,使用while循环不断录入学生的姓名和成绩,并将其作为键值对放入字典中,知道用户录入完成。