Python3完全新手小白的学习手册 5 if语句

部署运行你感兴趣的模型镜像

一个简单的示例

有一个汽车列表,想将其中每辆汽车的名称打印出来。对于大多数汽车,应以首字母大写的方式打印其名称,但是汽车名 ‘bmw’ 应以全大写的方式打印。

cars = ['audi', 'bmw', 'subaru', 'toyota']

for car in cars:
    if car == 'bmw':
        print(car.upper())
    else:
        print(car.title())

输出:

  Audi
  BMW
  Subaru
  Toyota

条件测试

每条 if 语句的核心都是一个值为 True 或 False 的表达式,这种表达式称为条件测试。

这个叫法很重要,因为你经常要检查条件测试是否为 True,这将决定是否执行 if 语句中的代码。

检查是否相等

最简单的条件测试检查变量的值是否与特定值相等。

使用两个等号(==)检查是否相等。
这个相等运算符在它两边的值相等时返回 True,否则返回 False。

>>> car = 'bmw'
>>> car == 'bmw'
True

我们来看一下上面的代码。首先,我们将变量 car 的值设置为 ‘bmw’。然后,我们检查变量 car 的值是否为 ‘bmw’。如果是,Python 返回 True;如果不是,Python 返回 False。

>>> car = 'audi'
>>> car == 'bmw'
False

上面的代码,变量 car 的值为 ‘audi’,因此条件测试的值为 False。

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

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

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

在这个示例中,变量 car 的值为 ‘Audi’,因此条件测试的值为 False。

可先将变量的值转换为全小写的,再进行比较。

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

检查是否不相等

要判断两个值是否不相等,可结合使用惊叹号和等号(!=),其中的惊叹号表示不。

下面使用一条 if 语句来演示如何使用不等运算符。

#我们将把顾客点的比萨配料(topping)存储在一个变量中,再打印一条消息,指出这名顾客点的配料是否是意式小银鱼(anchovies)
requested_topping = 'mushrooms'

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

输出:

Hold the anchovies!

如果这两个值不等,Python 将返回 True,进而执行紧跟在 if 语句后面的代码;如果相等,Python 将返回 False,不执行紧跟在 if 语句后面的代码。

比较数字

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

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

你可以将数字与数字比较,如下所示:

>>> age = 18
>>> age == 18
True

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

# answer 的值(17)不是神秘数42,条件得到满足,因此缩进的代码行得以执行

检查多个条件

1.使用 and 检查多个条件

要检查是否两个条件都为 True,可使用关键字 and 将两个条件测试合而为一;如果每个测试都通过了,整个表达式就为 True;如果至少有一个测试没有通过,整个表达式就为 False。
下面使用 and 来检查两个条件。

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

输出:

False

为了改善可读性,可将每个条件测试都分别放在一对括号内。

(age_0 >= 21) and (age_1 >= 21)

2.使用 or 检查多个条件

关键字 or 也能够让你检查多个条件,但只要满足其中一个条件,就能通过整个条件测试。仅当两个测试都没有通过时,使用 or 的表达式才为 False。

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

输出:

True

检查特定的值是否在列表中

这个内容在实际的项目开发中会经常用到。
要判断特定的值是否已包含在列表中,可使用关键字 in。

requested_toppings = ['mushrooms', 'onions', 'pineapple']
'mushrooms' in requested_toppings

输出:

True

关键字 in 让 Python 检查列表中是否包含特定的值。如果特定的值位于列表中,Python 返回 True;如果不在,Python 返回 False。

检查特定的值是否不在列表中

有时候,你需要检查特定的值是否不包含在列表中。在这种情况下,可使用关键字 not in。

# banned_users.py
banned_users = ['andrew', 'carolina', 'david']
user = 'marie'

if user not in banned_users:
    print(f"{user.title()}, you can post a response if you wish.")

输出:

Marie, you can post a response if you wish.

在这个示例中,我们将 banned_users 列表中的名字都存储到变量 user 中。如果 user 不在列表 banned_users 中,Python 返回 True,进而执行 if 语句后面的代码。

布尔表达式

条件测试的别名是布尔表达式,它是一个值为 True 或 False 的表达式,这种表达式在条件测试中经常使用。
布尔值通常用于记录条件,例如游戏是否正在运行,或用户是否可以编辑网站的特定内容。

game_active = True
can_edit = False

if 语句

简单的 if 语句

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

if conditional_test:
    do something

第一行可包含任意条件测试,而在紧跟在测试后面的缩进代码块中,可执行任意操作。

# 假设有一个表示某个人年龄的变量,而你想知道这个人是否到了投票的年龄
age = 19
if age >= 18:
    print("You are old enough to vote!")
    print("Have you registered to vote yet?")

输出:

You are old enough to vote!
Have you registered to vote yet?

条件测试通过了,而且两个函数调用 print() 语句都缩进了

if-else 语句

经常需要在条件测试通过了时执行一个操作,并在没有通过时执行另一个操作;在这种情况下,可使用 Python 提供的 if-else 语句。if-else 语句块类似于简单的 if 语句,但其中的 else 语句让你能够指定条件测试未通过时要执行的操作。

if conditional_test:
    do something
else:
    do something else

在 if-else 语句中,条件测试的结果为 True 时将执行 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!")

输出:

Sorry, you are too young to vote.
Please register to vote as soon as you turn 18!

if-elif-else 语句

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

if conditional_test:
    do something
elif conditional_test:
    do something else
else:
    do something else

下面来看一个示例,其中包含多个 elif 代码块。

# amusement_park.py
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.")

输出:

Your admission cost is $5.

在这个示例中,Python 只执行一个代码块,它依次检查每个条件测试,直到遇到通过了的条件测试。在这个示例中,Python 只执行一个代码块,即 elif 代码块,其中的条件测试为 True。Python 执行完相应的代码后,跳过余下的测试。

为了让代码更简洁,可不在 if-elif-else 代码块中打印门票价格,而是只在其中设置门票价格,并在它后面添加一个函数调用 print():

# amusement_park.py
age = 12
if age < 4:
    price = 0
elif age < 18:
    price = 5
else:
    price = 10
print(f"Your admission cost is ${price}.")

输出:

Your admission cost is $5.

使用多个 elif 代码块

可根据需要使用任意数量的 elif 代码块。例如,下面的代码还检查了顾客的年龄,但根据年龄段收费:

# amusement_park.py
age = 12
if age < 4:
    price = 0
elif age < 18:
    price = 5
elif age < 65:  # 注意,这里是 elif 而不是 if
    price = 10
else:
    price = 5
print(f"Your admission cost is ${price}.")  

输出:

Your admission cost is $5.

省略 else 代码块

Python 并不要求 if-elif 结构后面必须有 else 代码块。在有些情况下,else 代码块很有用;而在其他一些情况下,使用一条 elif 语句来处理特定的情形更清晰。

age = 12

if age < 4:
    price = 0
elif age < 18:
    price = 25
elif age < 65:
    price = 40
elif age >= 65:
    price = 20

print(f"Your admission cost is ${price}.")

测试多个条件

# toppings.py
# 首先创建一个列表,其中包含顾客点的配料
requested_toppings = ['mushrooms', 'extra cheese']

# 第一条 if 语句检查顾客是否点了配料蘑菇(mushrooms)
if 'mushrooms' in requested_toppings:
    # 如果点了,就打印一条确认消息。
    print("Adding mushrooms.")
# 检查配料辣香肠(pepperoni)的代码也是一条简单的 if 语句。
# 因此不管前一个条件测试是否通过,都将执行这个测试。
if 'pepperoni' in requested_toppings:
    print("Adding pepperoni.")
# 最后一条 if 语句检查顾客是否要求多加芝士(extra cheese)
# 不管前两个条件测试的结果如何,都会执行这些代码。
if 'extra cheese' in requested_toppings:
    print("Adding extra cheese.")
# 每当这个程序运行时,都会执行这三个独立的条件测试。


print("\nFinished making your pizza!")

输出:

Adding mushrooms.
Adding extra cheese.
Finished making your pizza!

将上文的代码改成if-elif-else 语句,代码将不能正确运行。

requested_toppings = ['mushrooms', 'extra cheese']

# 第一个条件测试检查列表中是否包含 'mushrooms'。
if 'mushrooms' in requested_toppings:
    # 它通过了,因此将在比萨中添加蘑菇。
    print("Adding mushrooms.")

elif 'pepperoni' in requested_toppings:
    print("Adding pepperoni.")
elif 'extra cheese' in requested_toppings:
    print("Adding extra cheese.")
# 然而,Python 将跳过 if-elif-else 语句中余下的条件测试,不再检查列表中是否包含 'extra cheese' 和 'pepperoni'。结果就是,只会添加顾客点的第一种配料,不会添加其他配料

print("\nFinished making your pizza!")

输出:

Adding mushrooms.
Finished making your pizza!

如果只想运行一个代码块,就使用 if-elif-else 语句;如果要运行多个代码块,就使用一系列独立的 if 语句。

使用 if 语句处理列表

检查特殊元素

在 for 循环中,可对每个元素执行任何操作。但是,在 for 循环中,可对特殊元素执行特定的操作。

沿用上一节的代码

这家比萨店在制作比萨时,每添加一种配料都打印一条消息。要以极高的效率编写这样的代码,可以创建一个包含顾客所点配料的列表,并使用一个循环来指出添加到比萨中的配料

# 创建一个包含顾客所点配料的列表
requested_toppings = ['mushrooms', 'green peppers', 'extra cheese']

# 使用一个循环来指出添加到比萨中的配料
for requested_topping in requested_toppings:
    print(f"Adding {requested_topping}.")

print("\nFinished making your pizza!")

输出:

Adding mushrooms.
Adding green peppers.
Adding extra cheese.
Finished making your pizza!

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

requested_toppings = ['mushrooms', 'green peppers', 'extra cheese']

for requested_topping in requested_toppings:
    # 这里在为比萨添加每种配料前都进行检查。
    # if 语句检查顾客点的是否是青椒。
    if requested_topping == 'green peppers':
        # 如果是,就显示一条消息,指出不能点青椒的原因。
        print("Sorry, we are out of green peppers right now.")
    else:
        # else 代码块确保其他配料都将被添加到比萨中。
        print(f"Adding {requested_topping}.")

print("\nFinished making your pizza!")

输出:

Adding mushrooms.
Sorry, we are out of green peppers right now.
Adding extra cheese.
Finished making your pizza!

确认列表非空

在运行 for 循环前确定列表非空很重要。

下面在制作比萨前检查顾客点的配料列表是否为空。如果列表为空,就向顾客确认是否要点原味比萨(plain pizza);如果列表非空,就像前面的示例那样制作比萨。

在 if 语句中将列表名用作条件表达式时,Python 将在列表至少包含一个元素时返回 True,在列表为空时返回 False

# 首先创建一个空列表,其中不包含任何配料。
requested_toppings = []
# 然后进行简单的检查,而不是直接执行 for 循环。
if requested_toppings:
    # 如果 requested_toppings 非空,就运行与前一个示例相同的 for 循环
    for requested_topping in requested_toppings:
        print(f"Adding {requested_topping}.")
    print("\nFinished making your pizza!")
else:
    # 否则打印一条消息,询问顾客是否确实要点不加任何配料的原味比萨。
    print("Are you sure you want a plain pizza?")

输出:

Are you sure you want a plain pizza?

对于数值 0、空值 None、单引号空字符串 ‘’、双引号空字符串 “”、空列表 []、空元组 ()、空字典 {},Python 都会返回 False。

使用多个列表

顾客的要求五花八门,在比萨配料方面尤其如此。如果顾客要在比萨中添加炸薯条(French fries),该怎么办呢?可以使用列表和 if 语句来确定能否满足顾客的要求。

# 第一个包含比萨店供应的配料
# 如果比萨店供应的配料是固定的,也可以使用一个元组来存储它们
available_toppings = ['mushrooms', 'olives', 'green peppers',
                      'pepperoni', 'pineapple', 'extra cheese']

# 第二个则包含顾客点的配料
requested_toppings = ['mushrooms', 'french fries', 'extra cheese']

# 这次对于 requested_toppings 中的每个元素,都先检查它是否是比萨店供应的配料,再决定是否在比萨中添加它
for requested_topping in requested_toppings:
    if requested_topping in available_toppings:
        print(f"Adding {requested_topping}.")
    else:
        print(f"Sorry, we don't have {requested_topping}.")

print("\nFinished making your pizza!")

设置 if 语句的格式

在诸如 ==、>= 和 <= 等比较运算符两边各添加一个空格。

age = 19
if age < 4:
    price = 0
elif age < 18:
    price = 5
elif age < 65:
    price = 10
elif age >= 65:
    price = 5

往期内容


代码仓库

代码仓库

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qyydeep

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值