• Python学习基础笔记六十五——布尔值


    布尔对象:

    Python中有一种对象类型称之为布尔对象(英文叫bool)。

    布尔对象只有两种取值,True和False。对应的是真和假,或者说是和否。True对应的是,False对应的是否。

    我觉得这句话是一个关键:

    这个布尔对象正好对应着我们现实世界的某些条件是不是成立。例如今天是星期天吗?

    我们判断是真还是假。

    再举一个例子,我们shell脚本中也有判断语句。-e filename,判断文件是否存在。-f 判断文件是否存在等等。都是返回布尔值。

    布尔表达式:

    1. >>> 1 == 1
    2. True

    使用 == 来连接两个比较对象。

    1. >>> 1 == '1'
    2. False

    我们也可以连写:

    1. num = 3
    2. print(2 < num <= 5)

    条件组合:

    有的时候,布尔表达式还会组合起来成为一个更大的表达式。

    布尔表达式有三种组合关系。

    逻辑且:and

    1. True and True # 结果为 True
    2. True and False # 结果为 False
    3. False and True # 结果为 False
    4. False and False # 结果为 False

    表达式1 和表达式2 都成立了,最终结果才能成立。 

    任何一个表达式为false,结果都是false。

    逻辑或:or

    1. True or True # 结果为 True
    2. True or False # 结果为 True
    3. False or True # 结果为 True
    4. False or False # 结果为 False

    表达式任何一个计算结果为True,最终结果都成立True。

    两个表达式计算结果都为False,结果才为False。

    逻辑非:not

    1. not True # 结果为 False
    2. not False # 结果为 True

    not 加在条件表达式的前面,会反转前面的结果。

    上面的这些布尔表达式都表示了一个结果,True或False。

    那么,这些表达式有什么用呢?

    主要是用在判断语句中。非常基础的非常重要的语法要求。

    判断语句是根据某个条件,决定是否要执行一些代码。

    判断语句是以if语句开头的。

    1. def registerUser():
    2. phone = input('请输入你的手机号码(不超过11个字符):')
    3. if len(phone) > 11:
    4. print('输入错误!手机号码超过了11个字符')
    5. print('函数结束')
    6. registerUser()

    如果 if 关键字 后面的条件 对应的表达式 运算结果 为 True ,就表示条件成立,就去执行 下面缩进的 代码。

    如果 if 后面的表达式结果为 False 就不会执行它 。

    在编写Shell脚本的时候,我们多添加if判断条件语句,可以将一些条件进行约束,将某个大的范围约束、缩小到某个条件内。

    1. def registerUser():
    2. phone = input('请输入你的手机号码(不超过11个字符):')
    3. if len(phone) > 11:
    4. print('输入错误!手机号码超过了11个字符')
    5. elif not phone.isdigit():
    6. print('输入错误!手机号码必须全为数字')
    7. elif not phone.startswith('1'):
    8. print('输入错误!手机号码必须以数字1开头')
    9. else:
    10. print('手机号码输入正确')
    11. print('执行 存储用户信息到数据库 的操作...')
    12. print('函数结束')
    13. registerUser()

    这种if语句结构,都是通过条件表达式进行判断。

    跟c语言中的单分支、双分支和多分支一样的。

    这些逻辑表达式,确实是需要好好地理顺才行的。

    如果我们要求在输入检查条件全部通过之后,执行存储用户信息到数据库的操作,可以写到最后的else语句中。

    1. def registerUser():
    2. phone = input('请输入你的手机号码(不超过11个字符):')
    3. if len(phone) > 11:
    4. print('输入错误!手机号码超过了11个字符')
    5. elif not phone.isdigit() :
    6. print('输入错误!手机号码必须全是数字')
    7. elif not phone.startswith('1') :
    8. print('输入错误!手机号码必须以数字1开头')
    9. else:
    10. print('手机号码输入正确')
    11. print('执行 存储用户信息到数据库 的操作...')

    函数执行某个功能前,要做一些条件检查,如果这些条件任何一个不满足,后续的操作就不要做了。

    1. def registerUser():
    2. phone = input('请输入你的手机号码(不超过11个字符):')
    3. # 下面任何一个检查条件不通过,直接 return 返回
    4. if len(phone) > 11:
    5. print('输入错误!手机号码超过了11个字符')
    6. return
    7. if not phone.isdigit() :
    8. print('输入错误!手机号码必须全是数字')
    9. return
    10. if not phone.startswith('1') :
    11. print('输入错误!手机号码必须以数字1开头')
    12. return
    13. # 前面的条件检查全部通过
    14. print('手机号码输入正确')
    15. print('执行 存储用户信息到数据库 的操作...')

    结合return语句,这种程序的可读性更好。

    某个国家的计费计算:

    里程收费
    <= 320元/每公里
    > 3 15元/每公里

    这是典型的双分支if-else结构:

    1. def charge(miles):
    2. if miles <= 3:
    3. unit = 20
    4. else:
    5. unit = 15
    6. return miles * unit
    7. print(charge(3))
    8. print(charge(5))

    那如果我们这么写:

    1. def charge(miles):
    2. if miles <= 3:
    3. unit = 20
    4. if miles > 3:
    5. unit = 15
    6. return miles * unit
    7. print(charge(3))
    8. print(charge(5))

    也是可以得到正确的结果。

    但是这两个程序还是有区别的。

    if-else,双分支结构只执行其中一个分支。而两个if语句,两个if语句都会进行判断。效率没有if-else高。

    如果这个出租车的计费规则更复杂些:

    里程收费
    <= 3 公里20元/每公里
    > 3 公里 <= 5 公里15元/每公里
    > 5 公里 <= 8 公里12元/每公里
    > 8 公里10元/每公里

    那这种情况就用多分支结构进行处理:

    1. def charge(miles):
    2. if miles <= 3:
    3. unit = 20
    4. elif 3 < miles <= 5:
    5. unit = 15
    6. elif 5 < miles <= 8:
    7. unit = 12
    8. else:
    9. unit = 10
    10. return miles * unit
    11. print(charge(1))
    12. print(charge(4))
    13. print(charge(7))
    14. print(charge(10))

    elif后面有一个条件表达式,而else没有。

    条件判断的嵌套:

    1. def charge(miles, duration):
    2. if miles <= 3 and duration <= 1:
    3. print('20 元/每公里')
    4. return miles*20
    5. elif miles > 3 and duration <= 1 :
    6. print('15 元/每公里')
    7. return miles*15

    有的时候,条件判断成立或者不成立,后面要做什么,还需要再次分情况处理。

    这时候往往需要在缩进的代码中再次进行条件判断。

    1. def charge(miles, duration):
    2. if miles <= 3:
    3. if duration <= 1:
    4. unit = 20
    5. return miles * unit
    6. else:
    7. unit = 22
    8. return miles * unit
    9. elif miles > 3:
    10. if duration <= 1:
    11. unit = 15
    12. return miles * unit
    13. else:
    14. unit = 18
    15. return miles * unit

    另外,在这个场景中还有一些比较特殊的情况。

    要细心地对这些进行梳理,各种情况,把程序才能写好。细心和耐心。

  • 相关阅读:
    【LeetCode热题100】--1.两数之和
    webpack插件plugin 添加版权 打包html js压缩
    封装变化的内容
    剑指 Offer 49. 丑数 && 264. 丑数 II ●●
    SB30100LCT-ASEMI插件肖特基二极管SB30100LCT
    label问题排查:打不开标注好的图像
    Salesforce LWC学习(四十七) 标准页面更新以后自定义页面如何捕捉?
    电脑视频怎么录制?好用的电脑录屏方法
    代码随想录-Day32
    Opncv 实现拍照、颜色识别和阈值选取
  • 原文地址:https://blog.csdn.net/chang_chunhua/article/details/133815321