while循环处理列表和字典
for循环是一种遍历列表的有效方式,但在for循环中不应修改列表,否则将导致Python难以跟踪其中的元素。要在遍历列表的同时对其进行修改,可使用while循环。
通过将while循环同列表和字典结合起来使用,可收集、存储并组织大量输出,供以后查看和显示。
在列表之间移动元素
#首先,创建一个待验证用户列表
#和一个用于存储已验证用户的空列表
unconfirmed_users =['alice','brian','candace']
confirmed_users = []
#验证每个用户,直到没有未验证用户为止
#将每个经过验证的列表都移到已验证的用户列表中
while unconfirmed_users:
current_user = unconfirmed_users.pop()
print("Verifying user: " + current_user.title())
#显示所有已验证的用户
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
删除包含特定值的所有列表元素
使用函数remove()来删除列表中的特定值,因为函数remove()删除特定值。如果列表包含了多个相同条件的特定值,可以使用while循环进行逐一删除。
pets = ['dog','cat','dog','goldfish','cat','rabbit','cat']
print(pets)
while 'cat' in pets:
pets.remove('cat')
print(pets)
打印结果
['dog','cat','dog','goldfish','cat','rabbit','cat']
['dog','dog','goldfish','rabbit']
使用用户输入来填充字典
更多时候,字典中存储的信息都是记录用户输入的信息。将收集的数据存储在一个字典中,以便将回答和被调查者关联起来:
responses = {}
#设置一个标签,指出调查是否继续
polling_active = True
while polling_active:
#提示输入被调查者的名字和回答
name = input("\nWhat is your name? ")
response = input("Which mountain would you like to climb someday? ")
#将答案存储在字典中
response[name] = response
#看看是否还有人要参与调查
repeat = input("Would you like to let another person respond? (Yes / No) ")
if repeat == 'no':
polling_active = False
#调查结果,显示结果
print("\n--- Poll Results ---")
for name,response in responses.items():
print(name + " would like to climb " + respose + ".")
打印输出结果
what is your name? Eric
Which mountain you like to climb someday? Denali
Would you like to let another person respond? (Yes / No) yes
What is your name? Lynn
Which mountain would you like to climb someday? Devil's Thumb
Would you like to let another person respond? (Yes / No) no
--- Poll Resultes ---
Lynn would like to climb Devil's Thumb.
Eric would like to climb Denali.