第5章 if 语句
5.1 一个简单的示例
- 使用前面的解析列表构建一个0-9的数值列表。
- 判断0是否在列表中,如果在输出 0在列表A中
A = [i for i in range(0,10)] if 0 in A: print('0在列表A中')
结果为:
0在列表A中
5.2 条件测试
- 每条if语句的 核心 都是一个值为 True 或 False 的表达式,这种表达式被称为条件测试。
- 如果条件表达式输出的结果为True则执行if语句中的代码块,如果输出的结果为False则忽略if语句中的代码块。
5.2.1 检查是否相等
- 使用两个等号 == 来检查是否相等,== 称为相等运算符。
- 一个 = 是陈述,A = ‘b’ ;两个等号 == 是发问,两边是否相等?
- 构建一个变量A = 6,然后检查一个6和一个3,输出结果。
A = 6 if A == 6 : print('变量A表示数值6') if A == 3 : print('变量A表示数值3')
输出结果为:
变量A表示数值6
- 在上述代码中,因为第一个条件测试结果为True执行代码块输出 变量A表示数值6;第二个条件测试返回结果为False,则忽略代码块。
5.2.2 检查是否相等时不考虑大小写
- python中检查是否相等时是 区分大小写的。
- 我们创建两个字符串 一个为 rao 一个为首字母大写 Rao,使用条件测试检查是否相等。
Name = 'rao' Name1 = 'Rao' if Name == Name1: print('不用区分大小写') else : print('需要区分大小写')
输出结果为:
需要区分大小写
- 可以看到上述代码中,if语句条件测试返回False 所以不执行,而执行了相等意外的 else 下面代码块。
5.2.3 检查是否不相等
- 检查是否不相等时,需要使用惊叹号加等号的 不相等运算符 !=,其中惊叹号表示不。
- 我们先存一个变量 Pay_style = '微信支付',然后设置if语句为如果不等于 ‘支付宝支付’,那么输出请收回支付宝二维码
Pay_style = '微信支付' if Pay_style != '支付宝支付': print('请收回支付宝二维码')
输出结果为:
请收回支付宝二维码
- 在上述代码中,第一步我们构建了一个 变量 内容为 微信支付 的字符串
- if语句价差是否不相等 使用 != 变量不等于 支付宝支付 返回结果为True 执行if 包含语句块
- 结果为 输出 请收回支付宝二维码
5.2.4 比较数字
-
数字比较符 == 等于 != 不等于 >大于 <小于 >= 大于等于 <= 小于等于
5.2.5 检查多个条件
-
使用and和or帮助检查多个条件的返回结果是否合意(符合程序员需求)
1. 使用and检查多个条件
-
使用 and 连接条件时 需要 and 两边的条件都为True,则整个条件语句返回True。
-
使用 and 两边任意一个不满足条件 则返回False
-
我们设置两个数值 5 11 我们使用 and 连接条件 测试
Num1 = 5 Num2 = 11 if Num1 == 5 and Num2 == 11: print('符合条件') if Num1 == 5 and Num2 == 10: print('符合条件')
输出结果:
符合条件
- 我们可以看到结果只输出了一个 符合条件,那么肯定是其中有一个条件测试返回的是False
- 第一个if语句 判断Num1 等于 5 并且 Num2 等于 11,两边条件都为True,则整个条件测试返回True,执行if下代码块。
- 第二个if语句 两个条件中 Num2 等于 10 明显错误,在使用 and 时有任意一个不满足条件 则返回False 忽略第二个if下的代码块
5.2.6 检查特定值是否包含在列表中
- 语法 if i in seq : 关键字为in
- 文章开头的第一个代码使用了关键字 in 检查了0是否在列表中
A = [i for i in range(0,10)] if 0 in A: print('0在列表A中')
5.2.7 检查特定值是否不包含在列表中
- 语法 if i not in seq :关键字 not in
- 我们修改下上述代码 将0替换为10 将 in 改为 not in
- 当测试条件为真的时候 让程序输出 10不在列表A中
A = [i for i in range(0,10)] if 10 not in A: print('10不在列表A中')
输出结果为:
10不在列表A中
- 因为条件 10 not in A 这个条件返回的是True ,执行了if语句下的语句块 输出了 10不在列表A中 的结果。
5.2.8 布尔表达式
- 布尔表达式是条件测试的别名,返回结果要么为 True 要么为 False
if True: print('布尔表达式结果为True时') if False: print('布尔表达式为False时,不会执行这行代码')
输出结果为:
布尔表达式结果为True时
练习:
#检查是否相等的测试代码 Name = 'david beckham' Name1 = 'David Beckham' if Name == Name1: print('两个名称相等') if Name != Name1: print('两个名称不相等') if Name == Name1.lower(): print('将字符串Name1全部转换为小写,两个字符串构成相等')
输出结果为:
两个名称不相等
将字符串Name1全部转换为小写,两个字符串构成相等
1 #比较数字 2 x = 10 3 y = 3 4 z = 7 5 #条件 y > z 为 False 整个条件返回 False,将被忽略 6 if x > y and y > z : 7 print('x大于y 并且 y大于z') 8 #两个条件都为 True,整个条件返回 True,执行print代码块 9 if x > y and z > y : 10 print('x大于y 并且 z大于y') 11 #将第六行代码中的 and 改为 or x > y 返回 True 有一个条件满足 True,整个条件返回 True 12 if x > y or y > z : 13 print('x大于y 或者 y大于z') 14 #将两个条件为 false 使用 or 连接 ,整个条件返回 False if语句块将不被执行 15 if x < y or y > z : 16 print('这行代码两边条件为False,将被忽略')
输出结果为:
x大于y 并且 z大于y
x大于y 或者 y大于z
5.3 if语句
5.3.1 简单的if语句
1 age = 19 2 if age >=18 : 3 print('你已经成年,可以去网吧上网了!')
输出结果:
你已经成年,可以去网吧上网了!
- 第1行 将数值19 存储在变量 age 中
- 第2行 进行条件测试,变量是否大于等于18,条件满足返回True。执行if后面缩进的代码块。
- 第3行 输出 你已经成年,可以去网吧上网了!
5.3.2 if - else语句
- 需要在条件满足时执行一个条件满足时执行一个操作,不满足时执行另一个操作。
1 age = 17 2 if age >= 18 : 3 print('你已经年满18,可以上网吧!') 4 else: 5 print('未满18,网吧禁止入内!')
未满18,网吧禁止入内!
- 第1行 将数值 17 存贮为变量 age
- 第2行 if 语句进行条件测试 17 不满足 大于等于 18
- 第3行 因为第二行条件测试返回结果为 False 所以不执行
- 第4行 不满足条件的执行else操作
- 第5行 执行else下的操作 输出 未满18,网吧禁止入内!
5.3.3 if - elif - else结构
-
用于检查超过两个条件,python只执行结构中的一个代码。
- 它依次检查每个条件测试,直到遇到通过了的条件测试。
- 测试通过后,python将执行紧跟在他后面的代码,并跳过余下测试。
1 ''' 2 1.4岁以下免费入内 3 2.4-18岁收费20 4 3.18岁以上收费40 5 ''' 6 age = 12 7 if age < 4 : 8 print('免费入内') 9 elif age <= 18 : 10 print('收费20') 11 else: 12 print('收费40')
输出结果:
收费20
- 第6行 将数值 12 存储为变量 age
- 第7行 进行第一个条件测试 测试 age 是否小于 4,通过则执行输出 免费入内
- 第8行 这行被忽略因此我们知道age肯定大于或者等于 4
- 第9行 因为第一个条件测试没有通过,程序跳到第9行 测试条件是否满足小于等于18
- 第10行 满足条件执行操作 输出 收费20
- 第11行 因为已经有通过条件,跳过了余下测试。
5.3.4 使用多个elif代码块
- 进行多个条件测试
1 age = 70 2 if age < 4 : 3 print('免费入内') 4 elif age <= 18 : 5 print('收费20') 6 elif age < 65: 7 print('收费40') 8 else: 9 print('老人免费')
输出结果:
老人免费
- 第1行 将数值70存储到变量age中
- 第2行 判断条件 age 是否小于 4 测试不通过 进入下一个条件测试
- 第4行 判断条件 age 是否小于等于18 测试不通过 进入下一个条件测试
- 第6行 判断条件 age 是否小于 65 测试不通过 进行到else
- 第9行 因为前面 if 和 elif 中的条件测试都未通过 则执行 输出 老人免费
5.3.5 省略 else 代码块
- else 是一条包罗万象的语句,一切不满足if elif的条件测试 都会由else来执行
- 但是同时我们要意识到 elif 条件更清晰 使用else也会引来 无效数据或者恶意数据
- python 中并不要求if 后面必须要有else语句
5.3.6 测试多个条件
- 使用 if elif 条件语句仅适合于满足一个条件的测试中。
- 当你需要满足多个条件时,应该使用一系列不包含elif 和else代码块的简单if语句
1 A = [3,6,9] 2 if 3 in A : 3 print('3在列表A中') 4 elif 6 in A : 5 print('6在列表A中') 6 elif 9 in A : 7 print('9在列表A中')
输出结果为:
3在列表A中
- 第1行 创建一个数值列表A 包含3,6,9
- 第2行 条件测试 3是否在列表A中
- 第3行 判断通过输出 3在列表A中同时跳过余下测试
- 所以尽管 第4 和 第6行的判断结果为True也不会输出任何结果
- 我们修改下 将elif改为if
A = [3,6,9] if 3 in A : print('3在列表A中') if 6 in A : print('6在列表A中') if 9 in A : print('9在列表A中')
输出结果为:
3在列表A中
6在列表A中
9在列表A中
- 总之如果你想执行一个代码块,就使用 if elif else 结构,如果你要运行多个代码块,就使用一系列独立的if语句。
5.4 使用if语句处理表格
5.4.1 检查特殊元素
1 Name_list =['admin','rao','zhang','li','yu'] 2 for Name in Name_list: 3 if Name == 'admin': 4 print('hello '+Name.title()+',would you like to play fifa20?') 5 else: 6 print('hello '+Name.title()+',nice to meet you!')
输出结果为:
hello Admin,would you like to play fifa20?
hello Rao,nice to meet you!
hello Zhang,nice to meet you!
hello Li,nice to meet you!
hello Yu,nice to meet you!
- 第1行 创建一个列表 五个用户名。
- 第2行 用for循环遍历列表
- 第3行 判断遍历得来变量存储的值是否为 admin
- 第4行 当上面判断为True时 输出 hello Admin,would you like to play fifa20?
- 第5行 当第一个条件不通过时,执行else代码下操作
- 这个时候有好学的朋友就会问,上面说if elif下只能满足一个条件,各位for循环遍历的时候每次只传入一个值,循环着的传。
5.4.2 确定列表不是空的
- 使用if 判断列表是否为空列表 当列表为空列表式 判断结果将为False 当列表包含至少一个元素时,返回True
1 Name_list =[] 2 if Name_list: 3 for Name in Name_list: 4 print('我们的用户是:'+Name) 5 else: 6 print('我们需要一些用户!')
输出结果为:
我们需要一些用户!
- 第1步 创建一个空列表Name_list
- 第2行 判断条件 因为Name_list 是空列表,所以返回结果为False,紧跟if语句的操作将被忽略
- 第5行 因为if下的语句没有通过条件测试 将执行else语句下的代码
- 第6行 输出 我们需要一些用户!
5.4.3 使用多个列表
1 Name_list =['admin','rao','zhang','li','yu'] 2 Users_Name = ['rao','zhang','li','hu'] 3 for user in Users_Name: 4 if user in Name_list: 5 print('对不起,名称:'+user+' 已经被使用,请重新输入!') 6 else : 7 print('该名称:'+user+' 还未注册,快点注册吧!')
输出结果为:
对不起,名称:rao 已经被使用,请重新输入!
对不起,名称:zhang 已经被使用,请重新输入!
对不起,名称:li 已经被使用,请重新输入!
该名称:hu 还未注册,快点注册吧!
- 书中有一个练习题的要求是如果Rao在Namelist中 那么 user 中 rao也不允许注册,就是说两个列表字符串全部转换为小写字母字符串。
- 我们可以使用列表解析方法将两个列表转换为小写比较。
1 Name_list =[Name.lower() for Name in ['admin','Rao','zhang','li','yu']] 2 Users_Name = [user.lower() for user in['rao','Zhang','Li','hu']] 3 for user in Users_Name: 4 if user in Name_list: 5 print('你要注册的用户名称:'+user+' 已经被注册了!') 6 else : 7 print('恭喜你,用户名 '+user+' 还未被注册')
输出结果为:
你要注册的用户名称:rao 已经被注册了!
你要注册的用户名称:zhang 已经被注册了!
你要注册的用户名称:li 已经被注册了!
恭喜你,用户名 hu 还未被注册
5.5 设置if语句格式
- 妥善的使用空格 使代码看起来更加清晰易读美观,特别是在使用运算符 和 比较符的时候