在python中,if语句让你能够检查程序的当前状态,并据此采取相应的措施.

5.1 示例

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

cars=['audi','bmw','subaru','toyota']
for car  in cars:if car =='bwm':print(car.upper())else:print(car.title())
输出:
Audi
BMW
Subaru
Toyota

5.2 条件测试

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

5.2.1 检查是否相等

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

>>car= 'bmw'

>>car=='bmw'

True

我们首先使用一个等号将car的值设置为‘bmw’,接下来,使用2个等号==检查car的值是否为‘bmw’。这个相等运算符在它两边的值相等时返回True,否则返回False。

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

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

car=‘Audi’

car==‘audi’

False

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

car=‘Audi’

car.lower()== ‘audi’

True

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

网站采用类似方式让用户输入的数据符合特定的格式。例,网站可能使用类似的测试来确保用户名是独一无二,而并非只是与另一个用户名大小写不同。用户提交新的用户名时,将把它转换为小写,并与所有既有用户名的小写版本进行比较。执行这种检查时,如果已经有用户名‘john’(不管大小写如何),则用户提交用户名‘John’时将遭到拒绝。

5.2.3 检查是否不相等

要判断2个值是否不相等,可结合使用感叹号和等号(!=),其中感叹号表示不,在很多编程语言中都是如此

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

上述代码将requested_topping的值与‘anchovies’进行比较,如果他们的值不相等,python将返回True,进而执行紧跟在if语句后面的代码;如果这两个值相等,python将返回False,而不会执行If语句后面的代码。

由于requested_topping的值不是‘anchovies’,因此执行print语句。

5.2.4 比较数字

answer= 17
if answer !=42:print("Please try again!")

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

>>> age < 21
>>> age > 21
>>> age <= 21
>>> age >= 21
>>> age == 19
>>> age != 19

5..2.5 检查多个条件

1.使用and 检查多个条件

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

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

我们先首先定义了两个用于存储年龄的变量:age_0和age_1。下面我们检查这两变量是否都大于或者等于21;左边的测试通过,但是右边的测试没有通过,因此整个条件表达式的结果为False。继续修稿age_1为22,这样age_1的值大于21,因此两测试都通过了,导致整个条件表达式的结果为True。

为改善可读性,可将每个测试都分别放在一对括号内,但并非必须这样做。如果你使用括号,测试将类似于下面这样:

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

2.使用or检查多个条件

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

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

一些情况下,执行操作前必须检查列表是否包含特定值。例如,结束用户祖册过程前,可能需要检查他提供的用户名是否已包含在用户列表中。在地图程序中,可能需要检查用户提交的位置是否包含在已知位置列表中。

要判断特定的值是否已包含在列表中,可使用关键字in。 例如:

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

关键字in让python检查列表request_toppings是否包含‘mushrooms’和‘pepperoni’。这种技术很实用,他能让你在创建一个列表后,轻松的检查其中是否包含特定的值。

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

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

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

上述例子表示如果user的值未包含在列表banned_users中,python将返回True,进而执行缩进的代码行。

用户‘marie’未包含在列表banned_users中,因此她可以看到一条邀请她发表评论的消息。

5.2.8 布尔表达式

布尔表达式为条件测试的别名。与条件表达式一样,布尔表达式的结果要么为True,要么为False。

布尔值通常用于记录条件,如游戏是否在运行,或用户是否可以编辑网站的特定内容,在跟踪程序状态或程序中重要条件方面,布尔值提供一种高效方式。

game_active = True
can_edit = False

 5.3 If语句

if语句有很多种,选择使用哪种取决于要测试的条件数。

5.3.1 简单的语句

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

if conditional_test:
do something

在第一行中,可包含任何条件测试,而紧跟在测试后面的缩进代码中,可执行任何操作。如果条件测试的结果为True,python就会执行紧跟在if语句后面的代码;否则python将忽略这些代码。例:

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

age =19
if age>=18:print("ou are old enough to vote!")
输出:
ou are old enough to vote!

首先python价差变量age的值是否大于或等于18;如果大于18,python将执行下面的操作即缩进的print语句:

在if语句中,缩进的作用于for循环中相同。如果测试通过了,将执行if语句后面所有缩进的代码行,否者将忽略他们。

紧跟在if语句后面的代码块中,可根据需要包含任意数量代码进行。例:

age = 19
if age >= 18:
print("You are old enough to vote!")
print("Have you registered to vote yet?")
输出:
You are old enough yo vote!
Have you registered vote yet?

条件测试通过了,而2调print语句都缩进,因此都将被执行。如果age的值小于18,这个程序将不会有任何输出。

5.3.2 if-else语句

经常需要在条件测试通过时执行一个操作,并在没通过时执行另一个操作;此情况下,可使用python提供的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!")
输出:
Sorry, you are too young to vote!
Please register to vote as soon as you turn 18!

此例中,如果if条件测试通过,将执行第一个缩进print语句块;如果测试结果为False,将执行else的代码块。if-else结构适用于要让python执行两种操作之一的情形。在简单的if-else结构中,总会执行两个操作的一个。

5.3.3 if-elif-else结构

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

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.

在if测试检查一个人是否不满4岁,如果是,python将输出一条合适的消息,并跳过余下的测试。在elif代码行其实是另一个if测试,他仅在前面的测试未通过时才运行,所以并不需要and age>=4。在这里,条件是年纪12岁,因为第一个测试,没有通过。如果这个人未满18岁,python将输出相应的消息,并跳过else代码块。

在这个例子中,第一次if的测试结果为False,因不执行器代码块。然而,第二个elif的测试结果为True,因此将执行器代码块。故输出门票5元价格。

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

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

上述的前面代码与前面一样,根据人的年龄设置变量price的值。在if-elif-else结构中设置price的值后,一条未缩进的print语句会根据这个变量的值输出一条消息,确定门票的价格。

这些代码的输出与前面相同,但if-elif-else结构的作用更小,它只确定门票的价格,而不是在确定门票价格的同时输出一条消息。除了效率更高外,这些代码还跟容易修改:要调整输出消息的内容,只需修改一条而不是三条print语句。

5.3.4 使用多个elif代码块

可根据需要使用任意数量的elif代码块。例:

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) + ".")

这些代码基本都未变,第二个elif代码块通过检查确定年龄不到65岁后,才将门票价格设置为全票价格:10美元。注意:在else代码块中,必须将所赋的值改为5,因为仅当年龄超过65时,才会执行这个代码块。

5.3.5 省略else代码块

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

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

最后的elif代码块在顾客年龄超过65 时,将价格设定为5美元,这比使用else代码块更清晰。修改后,每个代码块都仅在通过相应测试时才会执行。

else是一条包罗万象语句,只要不满足任何if或elif中的条件测试,其中的代码就会执行,这可能会引入无效甚至恶意数据。如果知道最终测试条件,应考虑一个elif代码块来替代else代码块。

5.3.6 测试多个条件

if-elif-else结构功能强大,但仅仅适用于只有一个条件满足的情况:遇到通过的测试后,python就会跳过余下的测试。而有时候必须检查你关心的所有条件。这种情况下,应使用一系列不包含elif和else代码块的简单if语句。在可能有多个条件为True,且你需要在每个条件为True时都采取相应措施。例:

request_toppings=['mushrooms','extra cheese']
if 'mushrooms' in request_toppings:print("Adding mushrooms")
if 'pepperoni' in request_toppings:print("Adding pepperoni")
if 'extra cheese' in request_toppings:print("Adding etra cheese")
print('\nFinished making your pizza!')
输出:
Adding mushrooms
Adding etra cheeseFinished making your pizza!

我们首先创建一个列表,其中包含客户点的配料处if语句检查客户是否点了‘mushrooms’,如果点了就输出一条确认消息。后面检查是否否点了‘pepperoni’的代码也是一个简单的if语句,而不是elif或者else语句;因此不管前一个测试是否听过,都将进行这个测试。后面的代码检查客户是否要求多加‘extra cheese’;不管前两个测试结果如何,都会执行这些代码。每当程式运行时,都会进行这3个独立测试。

如果使用if-elif-else结构,代码将不能正确的运行,因为有一个测试通过后,就会跳过下面的测试;

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

 5.4 使用if语句处理列表

结合使用if语句和列表,可完成一些特定的任务:对列表中特定的值做特殊处理;高效的管理不断变化的情形,如餐馆是否特定的食材;证明代码在各种情况下都将按预期那样运行。

5.4.1 检查特殊元素

request_toppings =['mushroom','green peppers','extra cheese']for request_topping in request_toppings:if request_topping== 'green peppers':print("Sorry, we are out of green peppers right now.")else:print("Adding "+request_topping+".")
print("\nFinish making your pizza!")
输出:
Adding mushroom.
Sorry, we are out of green peppers right now.
Adding extra cheese.Finish making your pizza!

在for循环中添加if语句指出特殊情况,以上程序在pizza中添加每种配料前都进行检查。在if代码块检查客户点的是否为青椒,如果是,则显示一条消息,说明不能点青椒的 原因。后面else代码块确保其他配料都将添加到pizza中。

5.4.2 确定列表不是空的

到目前为止,对于处理每个列表都做了一个简单的假设,即假设他们都包含了至少一个元素。下面要让用户来提供存储信息,因此不能再假设循环运行列表不是空的。鉴于此,在运行for循环前确定列表是否为空很重要。

下面在制作pizza钱检查顾客点的配料列表是否为空。如果列表为空格的,就向顾客确认他是否要点普通pizza;如果列表不是为空,就像前面的示例制作pizza:

request_toppings =[]
if request_toppings:for request_topping in request_toppings:print("Adding "+request_topping+".")print("\nFinish making your pizza!")
else:print("Are you sure you want a plain pizza?")

在这里,我们首先创建一个空列表,其中不包含任何配料。在if语句做简单检查,而不是直接执行for循环。在if语句中将列表名用在条件表达式中时,python将在列表至少包含一个元素时返回True,并在列表为空时候返回False。如果request_toppings不为空,就运行与钱=前一个示例相同的for循环;否则就输出一条消息,询问顾客是否确定需要点不加任何配料的普通pizza。

5.4.3 使用多个列表

如果要求在pizza中添加炸薯条——>可使用列表和if语句来确定是否能满足客户要求。

available_topping=['mushroom','olives','green peppers','pepperoni','pineapple','extra cheese']
request_toppings =['mushroom','french fries','extra cheese']for request_topping in request_toppings:if request_topping in available_topping:print("Adding "+request_topping+".")else:print("sorry, we don't have "+ request_topping+".")print("\nFinish making your pizza!")
输出:
Adding mushroom.
sorry, we don't have french fries.
Adding extra cheese.Finish making your pizza!

我们首先定义一个列表,其中包含pizza店供应的配料,注意:如果pizza店供应的配料是固定的,也可以使用一个元组来存储。后再定义一个列表,其中包含客户点的配料,注意有一个不同寻常配料‘french fries’。用for循环遍历顾点的配料列表。在这个循环中,对于顾客点的每种配料,我们检查它是否包含在供应的配料中,用if语句判定;如果答案是肯定的,将加入到pizza中,否则将运行else代码块,输出一条消息。

练习:处理没有用户的情形:本题首先判断用户列表是否是空,如果是空,执行什么操作,如果不是空,则执行另外的操作:

customers=[]
if customers:for customer in customer:print("Hello admmin,would you like tso see a status report?")else:print("Hello,eric, thank you for logging in again.")
else:print("We need to find some users")

序数表示位置,如 1st 和 2nd 。大多数序数都以 th 结尾,只有 1 、 2 和 3 例外。

ordinal_numbers=range(1,10)
for ordinal_number in ordinal_numbers:if ordinal_number==1:  #如果使用if ordinal_number==‘1’,则变为字符print(str(ordinal_number)+"st")elif ordinal_number==2:print(str(ordinal_number)+"nd")else:print(str(ordinal_number)+'th')

5.5 设置if 语句的格式

在条件测试的格式设置方面,在诸如==、>=和<=等比较运算符两边各添加一个空格,例如if age < 4:要比 if age<4:好

这样的空格不会影响python对代码的解读,而只是让代码阅读更容易。

转载于:https://www.cnblogs.com/Mack-Yang/p/9313185.html

class-5 If语句相关推荐

  1. Python 上下文管理器和 with 语句

    1. 上下文管理器概念 什么是 Python 的上下文管理器(Context Managers)呢? ​ 含有 __enter__ 和 __exit__ 方法的对象就是.上下文管理器存在的目的是管理 ...

  2. Go 学习笔记(62)— Go 中 switch 语句中的 switch 表达式和 case 表达式之间的关系

    switch 语句对 switch 表达式的结果类型,以及各个 case 表达式中子表达式的结果类型都是有要求的. 毕竟,在 Go 语言中,只有类型相同的值之间才有可能被允许进行判等操作. 1. sw ...

  3. Linux shell 学习笔记(9)— 循环语句(for、while)以及更改字段分隔符

    1. for 语句 bash shell 中 for 命令的基本格式如以下,$var 变量包含着这次迭代对应的当前列表项中的值. for var in list docommands done 也可以 ...

  4. Linux shell 学习笔记(8)— 使用结构化命令(if-then 语句、数值比较、字符串比较、文件比较、case 语句)

    1. 使用 if-then 语句 最基本的结构化命令就是if-then语句.if-then语句有如下格式. if command then ​ commands fi 或者 if command; t ...

  5. Python学习--not语句

    布尔型True和False,not True为False,not False为True,以下是几个常用的not的用法: (1) not与逻辑判断句if连用,代表not后面的表达式为False的时候,执 ...

  6. 合肥工业大学—SQL Server数据库实验八:使用聚集函数的SELECT语句

    在数据库EDUC中用SQL语句实现如下查询: 1) 查询学生的总人数 -- 查询学生的总人数 select count(*) from student select count(1) from stu ...

  7. 合肥工业大学—SQL Server数据库实验三:SQL语句创建和删除基本表

    SQL语句创建和删除基本表 1. 编写6个基本表 2. 修改基本表结构,完整性约束条件 3. 用Drop table 语句删除基本表 1. 编写6个基本表 设有简单教学管理的6个关系模式如下: 系(系 ...

  8. Python:模拟登录、点击和执行 JavaScript 语句案例

    案例一:网站模拟登录 # douban.pyfrom selenium import webdriver from selenium.webdriver.common.keys import Keys ...

  9. 怎么查找执行比较慢的sql语句

    一.MySQL数据库有几个配置选项可以帮助我们及时捕获低效SQL语句 1,slow_query_log 这个参数设置为ON,可以捕获执行时间超过一定数值的SQL语句. 2,long_query_tim ...

  10. C++ break语句,continue语句,goto语句

    break 语句的作用: 跳出当前循环,中断当前循环 #include <iostream> using namespace std; int main() {for (int i = 0 ...

最新文章

  1. 爬虫之使用verify参数忽略CA证书
  2. pandas使用dropna函数删除dataframe中列非缺失值的个数小于某一阈值的数据列
  3. java构造方法可以重载吗_Java基础教程之构造器与方法重载
  4. Centos下重要日志文件及查看方式
  5. python网络爬虫基础知识_Python网络爬虫基础知识
  6. 中报表导出带表头_来看看Java是 如何优雅的导出 Excel的
  7. Https的握手协议
  8. Ж孤云Ж真的很适合我
  9. Swap Letters CodeForces - 1215C(贪心)
  10. Codeforces Round #727 (Div. 2) E. Game with Cards dp + 思维
  11. python selenium 用法 和 Chrome headless
  12. MINA核心结构和处理消息的逻辑流程
  13. hive udaf_谈笑间学会大数据初识Hive
  14. 【Deep Learning 五】课程二(mproving Deep Neural Networks),第一周(Setting up your Machine Learning Applicat)答案
  15. SCI科技论文写作、投稿与发表(一)
  16. 数据库基础知识和SQL语言
  17. 关闭TOMCAT日志的三个方法
  18. 【测试】史上最详细的测试用例设计方法讲解
  19. SageMath矩阵操作及解线性方程组
  20. java 稀疏贝叶斯算法_稀疏贝叶斯学习(SparseBayesianLearning).PDF

热门文章

  1. python画树叶-如何理解python一行代码实现一个爱心字符画?
  2. python爬虫教程入门-Python爬虫系列 - 入门教学
  3. python有趣代码-Python有哪些有趣的代码呢,这些代码让
  4. 用python绘制柱状图标题-使用Python绘制柱形竞赛图
  5. python实现简单的api接口-python中接口的实现实例
  6. python编程有用吗-分享8点超级有用的Python编程建议
  7. python入门到实践-一本书搞定Python入门到实践
  8. 用python画猫咪怎么画-Python海龟画图工具绘制叮当猫程序
  9. python怎么样才算入门编程-新手如何入门Python编程
  10. python专科就业难吗-python好就业吗