2.控制语句
2.1if 语句
if 语句的核心值为True 或False 的布尔表达式,这种表达式被称为条件测试 。如果条件测试的值为True ,就执行紧跟在if 语句后面的代码;如果为False ,Python就忽略这些代码。
添加测试种类包括
检查两个字符串相等和不等。
检查两个数字相等、不等、大于、小于、大于等于和小于等于。
使用关键字and 和or 的测试。
测试特定的值是否包含在列表中。
测试特定的值是否未包含在列表中。
if语句三种形式
if结构
if else结构
if-elif-else 结构
示例:
values = 'Python'
if len(values) =='6':
print('Right') #需要缩进
elif values == 'python' or values in ('PYTHON','Python'):
print("Error") #需要缩进
else:
print("unknown")
if语句判断列表是否为空,格式:if 列表名,示例
requested_toppings = []
if requested_toppings: #列表为空,所以布尔值为False,执行后面的else语句
for requested_topping in requested_toppings:
print("Adding " + requested_topping + ".")
print("\nFinished making your pizza!")
else:
print("Are you sure you want a plain pizza?")
2.2while 循环
2.2.1while 循环简介
while循环不断地运行,直到指定的条件不满足为止,即布尔值为False。for循环用于针对集合中的每个元素循环运行。while循环示例:
current_number = 1
while current_number <= 5: #小于等于5时为True,否则为False不满足循环条件,退出循环
print(current_number)
current_number += 1 #代码current_number = current_number + 1的简写
2.2.2让用户选择何时退出
实例:定义了一个退出值,只要用户输入的不是这个值,程序就接着运行并打印用户输入的内容。
prompt = "\nTell me something, and I will repeat it back to you:"
prompt += "\nEnter 'quit' to end the program. "
message = ""
while message != 'quit':
message = input(prompt)
print(message)
实例详解:
定义了一条提示消息,告诉用户有两个选择:要么输入一条消息,要么输入退出值(这里为'quit' );
接下来创建了一个变量message,用于存储用户输入的值。我们将变量message 的初始值设置为空字符串"" ,让首次执行while 代码行时有可供检查的东西。首次执行while 语句时,需要将message 的值与'quit' 进行比较,但此时用户还没有输入。如果没有可供比较的东西,Python将无法继续运行程序。为解决这个问题,我们必须给变量message 指定一个初始值,虽然这个初始值只是一个空字符串,但符合要求,能够执行while 循环所需的比较。只要message 的值不是'quit' ,这个循环就会不断运行;
首次遇到这个循环时,message 是一个空字符串,因此Python进入这个循环;
执行到代码行message = input(prompt) 时,Python显示提示消息,并等待用户输入。不管用户输入是什么,都将存储到变量message 中并打印出来;
接下来,Python重新检查while 语句中的条件。只要用户输入的不是单词'quit' ,Python就会再次显示提示消息并等待用户输入。等到用户终于输入'quit' 后,Python停止执行while 循环,而整个程序也到此结束。
2.2.3使用标志
程序在满足指定条件时就执行特定的任务,直到某个事件导致指定条件不满足。但在复杂的程序中,很多不同的事件都会导致程序停止运行,可定义一个变量,用于判断整个程序是否处于活动状态。这个变量被称为标志,充当了程序的交通信号灯。标志为True 时继续运行,并在任何事件导致标志的值为False 时让程序停止运行。这样,在while 语句中就只需检查一个条件——标志的当前值是否为True ,并将所有测试(是
否发生了应将标志设置为False 的事件)都放在其他地方,从而让程序变得更为整洁。
示例:
prompt = "\nTell me something, and I will repeat it back to you:"
prompt += "\nEnter 'quit' or 'exit' to end the program. "
active = True
while active:
message = input(prompt)
if message in ('quit','exit') :
active = False
else:
print(message)
2.2.4使用break 退出循环
要立即退出while 循环,也包括for循环,不再运行循环中余下的代码,也不管条件测试的结果如何,可使用break 语句。示例:
prompt = "\nPlease enter the name of a city you have visited:"
prompt += "\n(Enter 'quit' when you are finished.) "
while True:
city = input(prompt)
if city == 'quit':
break
else:
print("I'd love to go to " + city.title() + "!")
2.2.5在循环中使用continue
continue 语句不再执行循环中后面的代码,返回到循环开头继续循环。break 语句不再执行余下的代码并退出整个循环,即不再执行循环。示例:来看一个从1数到10,但只打印其中奇数。
2.2.6避免无限循环
每个while 循环都必须有停止运行的途径,这样才不会没完没了地执行下去。(特殊应用中需要无限循环)。
x = 1
while x <= 5:
print(x)
x += 1 #注意:遗漏该代码则会变为无限循环
2.2.7使用while 循环来处理列表和字典
for循环是一种遍历列表的有效方式,但在for 循环中修改列表,将会导致Python难以跟踪其中的元素。要在遍历列表的同时对其进行修改,可使用while 循环。通过while 循环同列表和字典结合起来使用,可收集、存储并组织大量输入,供以后查看和显示。
2.2.7.1在列表之间移动元素
实例:设定一个列表包含新注册但还未验证的网站用户;验证户后将他们移到另一个已验证用户列表中。
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())
示例详细说明:
首先创建了一个未验证用户列表,其中包含用户Alice、Brian和Candace
创建一个空列表,将来用于存储已验证的用户。
while 循环将不断地运行(用while unconfirmed_users判断),直到列表unconfirmed_users 变成空的;
循环中函数pop() 以每次一个的方式从列表unconfirmed_users 末尾删除未验证的用户。由于Candace位于列表unconfirmed_users 末尾,因此其名字将首先被删除并存储到变量current_user 中并加入到列表confirmed_users 中。接下来是Brian,然后是Alice。
为模拟用户验证过程,我们打印一条验证消息并将用户加入到已验证用户列表中。未验证用户列表越来越短,而已验证用户列表越来越长。未验证用户列表为空后结束循环,再打印已验证用户列表。
2.2.7.2删除包含特定值的所有列表元素
使用函数remove() 来删除列表中的特定值,当特定值重复出现时,则只会删除第一次出现的值,可使用循环删除全部特定值。实例:假设你有一个宠物列表,删除多个值为'cat' 的元素。
pets = ['dog', 'cat', 'dog', 'goldfish', 'cat', 'rabbit', 'cat']
print(pets)
while 'cat' in pets:
pets.remove('cat')
print(pets)
2.2.7.3使用用户输入来填充字典
实例:创建一个调查程序,其中的循环每次执行时都提示输入被调查者的名字和回答。我们将收集的数据存储在一个字典中,以便将回答同被调查者关联起来。
responses = {}
# 设置一个标志,指出调查是否继续
polling_active = True
while polling_active:
# 提示输入被调查者的名字和回答
name = input("\nWhat is your name? ")
response = input("Which mountain would you like to climb someday? ")
# 将答卷存储在字典中
responses[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 " + response + ".")