Python编程入门-if 语句

if 语句

1 一个简单示例

假设你有一个汽车列表,并想将其中每辆汽车的名称打印出来。对于大多数汽车,都应以首字母大写的方式打印其名称。

这个示例中的循环首先检查当前的汽车名是否是’bmw’ 。如果是,就以全大写的方式打印它;否则就以首字母大写的方式打印。

2 条件测试

每条if 语句的核心都是一个值为True 或False 的表达式,这种表达式被称为条件测试 。根据条件测试的值为True 还是False 来决定是否执行if 语句中的代码。如果条件测试的值为True ,就执行紧跟在if 语句后面的代码;如果为False ,就忽略这些代码。

2.1 检查是否相等

大多数条件测试都将一个变量的当前值同特定值进行比较。最简单的条件测试检查变量的值是否与特定值相等:

car = 'bmw'   #将car 的值设置为'bmw' 
car == 'bmw'  #用两个等号(== )检查car 的值是否为'bmw' 
True

这个相等运算符 在它两边的值相等时返回True ,否则返回False

car = 'audi'  #将变量car 的值设置为'audi' 
car == 'bmw'  #变量car的值是'bmw'吗?
False

如果变量car 的值不是’bmw’ ,上述测试将返回False 。

2.2 检查是否相等时不考虑大小写

在Python中检查是否相等时区分大小写,例如,两个大小写不同的值会
被视为不相等:

car = 'Audi'
car == 'audi'
False

如果大小写很重要,这种行为有其优点。但如果大小写无关紧要,而只
想检查变量的值,可将变量的值转换为小写,再进行比较:

 car = 'Audi'
 car.lower() == 'audi'
True

无论值’Audi’ 的大小写如何,上述测试都将返回True ,因为该测试不
区分大小写。函数lower() 不会修改存储在变量car 中的值,因此进行
这样的比较时不会影响原来的变量:

 car = 'Audi'	        #首字母大写的字符串'Audi' 存储在变量car 中
 car.lower() == 'audi'  #变量car 的值并将其转换为小写,再将结果与字符串'audi' 进行比较
True                    #两个字符串相同,返回True


'Audi'

从输出可知,这个条件测试并没有影响存储在变量car 中的值。

2.3 检查是否不相等

要判断两个值是否不等,可结合使用惊叹号和等号(!= ),其中的惊叹号表示不 ,在很多编程语言中都如此。
下面再使用一条if 语句来演示如何使用不等运算符。我们将把要求的
比萨配料存储在一个变量中,再打印一条消息,指出顾客要求的配料是否是意式小银鱼(anchovies):

requested_topping = 'mushrooms' 
if requested_topping != 'anchovies':
    print("Hold the anchovies!")

if requested_topping != ‘anchovies’:将requested_topping 的值’anchovies’ 进行比较,如果它们不相等,Python将返回True ,进而执行紧跟在if 语句后面的代码;如果这两个值相等,Python将返回False ,因此不执行紧跟在if语句后面的代码。

2.4 比较数字

检查数值非常简单,例如,下面的代码检查一个人是否是18岁:

age = 18
age == 18
True

你还可以检查两个数字是否不等,例如,下面的代码在提供的答案不正确时打印一条消息:

answer = 17
if answer != 42:
print("That is not the correct answer. Please try again!")

条件语句中可包含各种数学比较,如小于、小于等于、大于、大于等于:

age = 19
age < 21
True
 age <= 21
True
 age > 21
False
 age >= 21
False

在if 语句中可使用各种数学比较,这让你能够直接检查关心的条件。

2.5 检查多个条件

1. 使用and 检查多个条件
要检查是否两个条件都为True ,可使用关键字and 将两个条件测试合而为一;如果每个测试都通过了,整个表达式就为True ;如果至少有一个测试没有通过,整个表达式就为False 。
例如,要检查是否两个人都不小于21岁,可使用下面的测试:

 age_0 = 22
 age_1 = 18
 age_0 >= 21 and age_1 >= 21
False
 age_1 = 22
 age_0 >= 21 and age_1 >= 21
True

定义了两个用于存储年龄的变量:age_0 和age_1 。检查这两个变量是否都大于或等于21;age_0的测试通过了,但age_1的测试没有通过,因此个条件表达式的结果为False 。将age_1 改为22,这样age_1 的值大于21 ,因此两个测试都通过了,导致整个条件表达式的结果为True 。
为改善可读性,可将每个测试都分别放在一对括号内,但并非必须这样做。如果你使用括号,测试将类似于下面这样:
(age_0 >= 21) and (age_1 >= 21)
2. 使用or 检查多个条件
关键字or 也能够让你检查多个条件,但只要至少有一个条件满足,就能通过整个测试。仅当两个测试都没有通过时,使用or 的表达式才为False 。
下面再次检查两个人的年龄,但检查的条件是至少有一个人的年龄不小
于21岁:

age_0 = 22
age_1 = 18
age_0 >= 21 or age_1 >= 21
True
 age_0 = 18
 age_0 >= 21 or age_1 >= 21
False

2.6 检查特定值是否包含在列表中

有时候,执行操作前必须检查列表是否包含特定的值。要判断特定的值是否已包含在列表中,可使用关键字in 。

 requested_toppings = ['mushrooms', 'onions', 'pineapple']
 'mushrooms' in requested_toppings
True
 'pepperoni' in requested_toppings
False

关键字in 让Python检查列表requested_toppings 是否包含’mushrooms’ 和’pepperoni’ 。

2.7 检查特定值是否不包含在列表中

还有些时候,确定特定的值未包含在列表中很重要;在这种情况下,可
使用关键字not in 。例如,如果有一个列表,其中包含被禁止在论坛
上发表评论的用户,就可在允许用户提交评论前检查他是否被禁言:

banned_users = ['andrew', 'carolina', 'david']
user = 'marie'
 if user not in banned_users:
    print(user.title() + ", you can post a response if you wish.")

如果user 的值未包含在列表banned_users中,Python将返回True ,进而执行缩进的代码行。用户’marie’ 未包含在列表banned_users 中,因此她将看到一条邀请她发表评论的消息:
Marie, you can post a response if you wish.

3 if 语句

3.1 简单的if 语句

最简单的if 语句只有一个测试和一个操作:

if conditional_test: #可包含任何条件测试
do something #可执行任何操作

如果条件测试的结果为True ,执行紧跟在if 语句后面的代码;否则将忽略这些代码。

假设有一个表示某人年龄的变量,而你想知道这个人是否够投票的年
龄,可使用如下代码:

age = 19
 if age >= 18: #检查变量age 的值是否大于或等于18
 print("You are old enough to vote!")

3.2 if-else 语句

在条件测试通过了时执行一个操作,并在没有通过时执行另一个操作。if-else语句块类似于简单的if 语句,但其中的else 语句让你能够指定条件测
试未通过时要执行的操作。
例子:根据投票年龄限制,给出不同的信息

age = 17
 if age >= 18:
print("You are old enough to vote!")
print("Have you registered to vote yet?")
 else:
print("Sorry, you are too young to vote.")
print("Please register to vote as soon as you turn 18!")

存在两种情形:要么够投票的年龄,要么不够。if-else 结构非常适合用于要让Python执行两种操作之一的情形。在这种简单的if-else 结构中,总是会执行两个操作中的一个。

3.3 if-elif-else 结构

经常需要检查超过两个的情形,为此可使用Python提供的if-elif-else
结构。Python只执行if-elif-else 结构中的一个代码块,它依次检查每个条件测试,直到遇到通过了的条件测试。测试通过后,Python将执行紧跟在它后面的代码,并跳过余下的测试。

在现实世界中,很多情况下需要考虑的情形都超过两个。例如,来看一个根据年龄段收费的游乐场:
4岁以下免费;
4~18岁收费5美元;
18岁(含)以上收费10美元。

age = 12
 if age < 4:
print("Your admission cost is $0.")
 elif age < 18:
print("Your admission cost is $5.")
 else:
print("Your admission cost is $10.")

为让代码更简洁,可不在if-elif-else 代码块中打印门票价格,而只
在其中设置门票价格,并在它后面添加一条简单的print 语句:

age = 12
if age < 4:
 price = 0
elif age < 18:
 price = 5
else:
 price = 10
 print("Your admission cost is $" + str(price) + ".")

3.4 使用多个elif 代码块

可根据需要使用任意数量的elif 代码块。
例如,假设前述游乐场要给老年人打折,可再添加一个条件测试,判断顾客是否符合打折条件。下面假设对于65岁(含)以上的老人,可以半价(即5美元)购买门票:

age = 12
if age < 4:
price = 0
elif age < 18:
price = 5
 elif age < 65:
price = 10
 else:
price = 5
print("Your admission cost is $" + str(price) + ".")

3.5 省略else 代码块

Python并不要求if-elif 结构后面必须有else 代码块。在有些情况下,else 代码块很有用。
else 是一条包罗万象的语句,只要不满足任何if 或elif 中的条件测试,其中的代码就会执行,这可能会引入无效甚至恶意的数据。如果知道最终要测试的条件,应考虑使用一个elif 代码块来代替else 代码块。这样仅当满足相应的条件时,代码才会执行。

3.6 测试多个条件

if-elif-else 结构功能强大,但仅适合用于只有一个条件满足的情况:遇到通过了的测试后,Python就跳过余下的测试。这种行为很好,效率很高,让你能够测试一个特定的条件。
然而,有时候必须检查你关心的所有条件。在这种情况下,应使用一系列不包含elif 和else 代码块的简单if 语句。在可能有多个条件为True ,且你需要在每个条件为True 时都采取相应措施时,适合使用这种方法。
如果你只想执行一个代码块,就使用if-elif-else 结构;如果要运行多个代码块,就使用一系列独立的if 语句。

4 使用if 语句处理列表

4.1 检查特殊元素

如果比萨店的青椒用完了,该如何处理呢?为妥善地处理这种情
况,可在for 循环中包含一条if 语句:

requested_toppings = ['mushrooms', 'green peppers', 'extra cheese']
for requested_topping in requested_toppings:
 if requested_topping == 'green peppers':
print("Sorry, we are out of green peppers right now.")
 else:
print("Adding " + requested_topping + ".")
print("\nFinished making your pizza!")

这里在比萨中添加每种配料前都进行检查。if处的代码检查顾客点的是否是青椒,如果是,就显示一条消息,指出不能点青椒的原因。else 代码块确保其他配料都将添加到比萨中。
输出表明,妥善地处理了顾客点的每种配料:
Adding mushrooms.
Sorry, we are out of green peppers right now.
Adding extra cheese.
Finished making your pizza!

4.2 确定列表不是空的

到目前为止,对于处理的每个列表都做了一个简单的假设,即假设它们都至少包含一个元素。在运行for循环前确定列表是否为空很重要。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值