if 语句
课程笔记:
简单示例: 利用 if 语句判断车名是否为 ‘bmw’,如果是将其用全大写的方式打印出来,如不是则使用首字母大写的方式打印出来。
if 条件测试:
检测两个值是否不相等时,使用惊叹号和等号相结合(!=)
比较数字:
检查多个条件,使用 and 或者 or :
使用关键字 in ,检查是否包含在列表中:
使用关键字 not in ,检查是否不包含在列表中:
布尔表达式(Boolean expression): 条件测试的别名,其结果只能为 True 或者 False,布尔值通常用于记录条件:
在追踪程序状态或程序中重要的条件方面,布尔表达式提供了一种高效的方式。
课后小练习:
5-1 条件测试: 编写一系列条件测试程序;将每个测试以及你对其结果的预测和实际结果都打印出来。你编写的代码应该类似于下面这样:
car = 'subaru'
print("Is car == 'subaru' ? I predict True.")
print(car == 'subaru')
print("\nIs car == 'audi' ? I predict False.")
print(car == 'audi')
-
详细研究实际结果,直至你明白了它为何为 True 或 False。
-
创建更多的测试,且其中结果分别为 True 和 False 的测试都至少有5个。
5-2 更多的条件测试: 你并非只能创建10个测试。如果你想尝试做更多的比较,可以编写一个测试,并将它们加入 condition_test.py 中。对于下面列出的各种测试条件至少编写一个结果为 True 和 False 的测试。 -
检查两个字符串相等和不等。
-
使用函数 lower() 的测试。
-
检查两个数字相等、不等、大于、小于、大于等于和小于等于。
-
使用关键字 and 和 or 的测试。
-
测试指定值是否包含在列表中。
-
测试指定值是否不包含在列表中。
课程笔记:
最简单的 if 从句只有一个测试和一个操作:
if condition_test:
do something
第一行中可以包含任何条件测试,如果条件执行结果为 True,Python执行紧跟在 if 语句后面缩进的代码;如果执行条件结果为 False ,Python会忽略 if 后面缩进的代码。
假设有一个年龄变量,而你想知道这个人是否能够投票的年龄,可使用:
if 语句中,缩进的作用和 for 循环中相同,如果测试通过了,将执行 if 语句后面所有缩进的代码行,比如在上述代码中,再添加一行询问是否有登记:
测试条件通过了,并且两条 print 语句都有缩进,所以都执行:
if-else 语句: 通过时执行一个操作(if 后的语句),没有通过时执行另一个操作(else 后的语句)。
年龄为17岁,判断他是否能够投票,同时根据不同情况打印出另外一条消息:
if-elif-else 结构: 适用于超过两个判断条件的结构,它可以依次检查每个条件,直至遇到了通过了的条件测试,Python执行紧跟在其后的代码,并跳过后面的测试。
例如:
一个按年龄阶段收费的游乐场:
- 4岁以下免费
- 4~18岁收费5美元
- 18岁(含)以上收费10美元
为了使代码更加简洁,可以只在结构中设置门票价格,在最后添加一条 print 语句:
这样处理后,代码更加简洁,效率也更高,而且更容易修改,要调整输出信息的时候,只需要调整最后一条即可。
多个elif代码块 :根据实际所需来确定使用 elif 代码块的数量,例如,假设前面的游乐场会给老人打折,可以再添加一个测试条件,判断是否能够符合打折条件,下面假设对于65岁及以上的老人,可以半价:
省略 else 代码块: if 语句后面并不一定包含else语句。
Attention : else 是一条包罗万象的语句,只要不满足前面的条件就会执行 else 后面的语句,这很有可能引入无效甚至恶意的数据。所有有时候使用 elif 去代替 else 会比较清晰。
测试多个条件:
1.运行多个代码块的时候,采用多个 if 语句:
2.只想执行一个代码块的时候,采用 if-elif-else 结构
课后小练习:
5-3 外星人颜色#1: 假设在游戏中刚射杀了一个外星人,请创建一个名为 alien_color 的变量,并将其设置为 ‘green’、‘yellow’ 或 ‘red’。
- 编写一条 if 语句,检查外星人是否是绿色的;如果是,就打印一条消息,指出玩家获得5个点。
- 编写这个程序的两个版本,在一个版本中上述测试通过了,而在另一个版本中未通过(未通过是指测试时没有输出)。
5-4 外星人颜色#2: 像练习 5-3 一样设置外星人颜色,并编写一个 if-else 结构。
- 如果外星人是绿色,就打印一条消息,指出玩家因射杀该外星人获得了5个点。
- 如果外星人不是绿色,就打印一条消息,指出玩家获得10个点。
- 编写这个代码的两个版本,在一个版本中执行 if 代码块,另外一个版本中执行 else 代码块。
5-5 外星人颜色#3: 将练习 5-4 中的 if-else 结构改为 if-elif-else 结构。
-
如果外星人是绿色的,就打印一条消息,指出玩家获得了5个点。
-
如果外星人是黄色的,就打印一条消息,指出玩家获得了10个点。
-
如果外星人是红色的,就打印一条消息,指出玩家获得了15个点。
-
编写这个程序的三个版本,它们分别在外星人为绿色,黄色和红色是打印一条消息。
5-6 人生的不同阶段: 设置变量 age 的值,在编写一个 if-elif-else 结构的,根据 age 的值判断属于哪一个阶段。 -
如果一个人的年龄小于 2 岁,就打印一条消息,指出他是婴儿。
-
如果一个人的年龄为 2(含)~ 4 岁,就打印一条消息,指出他正蹒跚学步。
-
如果一个人的年龄为 4(含)~ 13 岁,就打印一条消息,指出他是儿童。
-
如果一个人的年龄为 13(含)~ 18 岁,就打印一条消息,指出他是青少年。
-
如果一个人的年龄为 18(含)~ 65岁,就打印一条消息,指出他是成年人。
-
如果一个人的年龄超过 65(含)岁,就打印一条消息,指出他是老人。
5-7 喜欢的水果: 创建一个列表,其中包含你喜欢的水果,在编写一系列独立的 if
语句检查列表中是否包含特定的水果。 -
将该列表命名为 favorite_fruits,并在其中包含三个水果。
-
编写5条 if 语句,每条都检查是否包含在列表中,如果包含在列表中,就打印一条消息说明,如:“You really like bananas!”
课程笔记:
检查列表中的特殊元素:
前一段代码是一个简单的 for 循环输出顾客在披萨中所点的配料,后一段代码加上了 if-else 结构是指出顾客所点的配料中暂时缺货的情况:
后一个代码,能够妥善的处理顾客点单:
判断列表不为空: 为了更好的运行代码,在运行 for 循环前判断列表是否为空很重要,可以使用 if 语句来做如下
使用多个列表:
顾客的要求总是五花八门的,使用列表和 if 语句来确定是否能满足顾客的要求,拒绝客户在披萨中添加奇怪的东西:
如果披萨店中提供的配料是不变的,也可以使用元组来存储它们。
课后小练习:
5-8 以特殊的方式跟管理员打招呼: 创建一个至少包含 5 个用户的列表,且其中一个用户名为 ‘admin’。想象你要编写的代码,在每位用户登录网站后都打印一条问候消息。遍历用户名列表,并向每位用户打印一条特殊的消息。
- 如果用户名为 ‘admin’,就打印一条特殊的问候消息,如“Hello admin, would you like to see a status report?”。
- 否则,打印一条普通的问候消息,如“Hello Erick, thank you for logging in again.”。
5-9 处理没有用户的情形: 在完成练习 5-8 的编写的程序中,添加一条语句,检查用户列表是否为空。 - 如果为空,就打印消息“We need to find some users!”。
- 删除列表中的所有用户,确保打印正确的消息。
!!5-10 检查用户名: 按以下面的说明编写一个程序,模拟网站确保每位用户的用户名都独一无二的方式。 - 创建一个至少包含 5 个用户名的列表,并将其命名为 current_users。
- 再创建一个至少包含 5 个用户的列表,并将其命名为 new_users,并确保其中有一两个用户名也包含在 current_users 列表中。
- 遍历列表 new_users,对于其中每个用户名,都检查它是否已经被使用。如果是这样,就打印一条消息,指出需要输入别的用户名;否则,就打印一条消息,指出这个用户名未被使用。
- 确保比较时不区分大小写;换句话说,如果用户名 ‘John’已被使用,应拒绝用户名’JOHN’。
5-11 序数: 序数表示位置,如 1st 和 2nd。大多数序数都以 th 结尾,只有1、2 和 3 例外。 - 在一个列表中存储数字 1~9.
- 遍历这个列表。
- 在循环中使用一个 if-elif-else 结构,以打印每个数字所对应的的序数。输出内容应为 1st、2nd、3rd、4th、5th、6th、7th、8th 和 9th,但每个序数都独占一行。
设置 if 语句的格式: 养成一个良好的设置习惯,在比较运算符两边各添加一个空格,例如:if age < 4 :
就比if age<4:
要好,这样的空格不会影响Python对代码的解读,而是让代码阅读起来更容易。