一、while循环
之前已经简单介绍过while循环了,这里是介绍一下while循环的一些其他用法和功能。
1.while循环最简单的用法:拿来数数,比如从零数到五:
>>> number=0
>>> while number<=5:
print(number)
number+=1
0
1
2
3
4
5
2.while循环可以让用户选择何时退出:我们在其中定义了一个退出值,只要用户输入的是这个值,程序就会退出:
>>> message=""
>>> while message!='quit':
message=input()
print(message)
star
star
quit
quit
>>>
这里我们将变量message 的初始值设置为空字符串"" ,让Python首次执行while 代码行时有可供检查的东西。Python首次执行while 语句时,需要 将message 的值与'quit' 进行比较,但此时用户还没有输入。如果没有可供比较的东西,Python将无法继续运行程序。为解决这个问题,我们必须给变量message 指定一个 初始值。虽然这个初始值只是一个空字符串,但符合要求,让Python能够执行while 循环所需的比较。
但是这个程序有个小问题,就是最后输入的'quit'也被打印出来了,解决很简单,用一个if测试就行了:
>>> message=""
>>> while message!='quit':
message=input()
if message!='quit':
print(message)
star
star
quit
>>>
3.使用标志:在前一个示例中,我们让程序在满足指定条件时就执行特定的任务。但在更复杂的程序中,很多不同的事件都会导致程序停止运行;在这种情况下,该怎么办呢?在要求很多条件都满足才继续运行的程序中,可定义一个变量,用于判断整个程序是否处于活动状态。这个变量被称为标志。你可让程序在标志 为True 时继续运行,并在任何事件导致标志的值为False 时让程序停止运行。这样,在while 语句中就只需检查一个条件——标志的当前值是否为True ,并将所有测试(是 否发生了应将标志设置为False 的事件)都放在其他地方,从而让程序变得更为整洁。就比如这样:
>>> active=True
>>> while active:
message=input()
if message=='quit':
active=False
else:
print(message)
star
star
shy
shy
quit
>>>
4.使用break退出循环:要立即退出while 循环,不再运行循环中余下的代码,也不管条件测试的结果如何,可使用break 语句。break 语句用于控制程序流程,可使用它来控制哪些代码行将执行, 哪些代码行不执行,从而让程序按你的要求执行你要执行的代码。如:
>>> while True:
message=input()
if message=='quit':
break
else:
print(message)
star
star
shy
shy
quit
>>>
5.在循环中使用continue:要返回到循环开头,并根据条件测试结果决定是否继续执行循环,可使用continue 语句,它不像break 语句那样不再执行余下的代码并退出整个循环。例如,来看一个从1数 到10,但只打印其中奇数的循环:
>>> number=0
>>> while number<10:
number+=1
if number%2==0:
continue
print(number)
1
3
5
7
9
>>>
对这个程序大家肯定会有更好的方法,这里我只是为了向大家展示continue的用法,大家不要介意。
二、使用while循环来处理列表和字典
1.在列表中移动元素:假设有一个列表,其中包含新注册但还未验证的网站用户;验证这些用户后,如何将他们移到另一个已验证用户列表中呢?一种办法是使用一个while 循环,在验证用户的同时 将其从未验证用户列表中提取出来,再将其加入到另一个已验证用户列表中。方法如下:
# 首先,创建一个待验证用户列表
>>>unconfirmed_users = ['alice', 'brian', 'candace']
# 创建一个用于存储已验证用户的空列表
>>> confirmed_users = []
# 验证每个用户,直到没有未验证用户为止
# 将每个经过验证的列表都移到已验证用户列表中
>>> while unconfirmed_users:
current_user = unconfirmed_users.pop()
print("Verifying user: " + current_user.title())
confirmed_users.append(current_user)
# 显示所有已验证的用户
print("\nThe following users have been confirmed:")
for confirmed_user in confirmed_users:
print(confirmed_user.title())
Verifying user: Candace
Verifying user: Brian
Verifying user: Alice
The following users have been confirmed:
Candace
Brian
Alice
2.删除包含特定值的所有列表函数:我们可以使用函数remove() 来删除列表中的特定值,这之所以可行,是因为要删除的值在列表中只出现了一次。如果要删除列表中所有包含特定值的元素,该怎么办 呢?要删除所有这些元素,可不断运行一个while 循环,直到列表中不再包含特定值。如下:
>>> s=[1,2,3,4,1,2,1]
>>> print(s)
[1, 2, 3, 4, 1, 2, 1]
>>> while 1 in s:
s.remove(1)
>>> print(s)
[2, 3, 4, 2]
>>>
注意:在使用while循环是要避免无限循环,每个while 循环都必须有停止运行的途径,我们可以设定特定的程序让while后面的条件不成立或者使用break退出循环。