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

布尔对象:

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

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

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

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

我们判断是真还是假。

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

布尔表达式:

bash 复制代码
>>> 1 == 1
True

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

bash 复制代码
>>> 1 == '1'
False

我们也可以连写:

bash 复制代码
num = 3
print(2 < num <= 5)

条件组合:

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

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

逻辑且:and

bash 复制代码
True   and  True    # 结果为 True
True   and  False   # 结果为 False
False  and  True    # 结果为 False
False  and  False   # 结果为 False

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

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

逻辑或:or

bash 复制代码
True   or  True    # 结果为 True
True   or  False   # 结果为 True
False  or  True    # 结果为 True
False  or  False   # 结果为 False

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

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

逻辑非:not

bash 复制代码
not  True    # 结果为 False
not  False   # 结果为 True

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

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

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

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

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

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

bash 复制代码
def registerUser():
    phone = input('请输入你的手机号码(不超过11个字符):')
    if len(phone) > 11:
        print('输入错误!手机号码超过了11个字符')

    print('函数结束')

registerUser()

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

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

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

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

    print('函数结束')

registerUser()

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

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

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

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

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

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

bash 复制代码
def registerUser():
    phone = input('请输入你的手机号码(不超过11个字符):')

    # 下面任何一个检查条件不通过,直接 return 返回
    if len(phone) > 11:
        print('输入错误!手机号码超过了11个字符')
        return
    
    if not phone.isdigit() : 
        print('输入错误!手机号码必须全是数字')
        return
    
    if not phone.startswith('1') : 
        print('输入错误!手机号码必须以数字1开头')
        return
    
    # 前面的条件检查全部通过
    print('手机号码输入正确')    
    print('执行 存储用户信息到数据库 的操作...')

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

某个国家的计费计算:

|-------|---------|
| 里程 | 收费 |
| <= 3 | 20元/每公里 |
| > 3 | 15元/每公里 |

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

bash 复制代码
def charge(miles):
    if miles <= 3:
        unit = 20
    else:
        unit = 15
    return miles * unit


print(charge(3))
print(charge(5))

那如果我们这么写:

bash 复制代码
def charge(miles):
    if miles <= 3:
        unit = 20
    if miles > 3:
        unit = 15
    return miles * unit


print(charge(3))
print(charge(5))

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

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

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

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

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

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

bash 复制代码
def charge(miles):
    if miles <= 3:
        unit = 20
    elif 3 < miles <= 5:
        unit = 15
    elif 5 < miles <= 8:
        unit = 12
    else:
        unit = 10

    return miles * unit


print(charge(1))
print(charge(4))
print(charge(7))
print(charge(10))

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

条件判断的嵌套:

bash 复制代码
def charge(miles, duration):
    if miles <= 3 and duration <= 1:
        print('20 元/每公里')
        return miles*20
    elif miles > 3 and duration <= 1 :
        print('15 元/每公里')
        return miles*15

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

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

bash 复制代码
def charge(miles, duration):
    if miles <= 3:
        if duration <= 1:
            unit = 20
            return miles * unit
        else:
            unit = 22
            return miles * unit
    elif miles > 3:
        if duration <= 1:
            unit = 15
            return miles * unit
        else:
            unit = 18
            return miles * unit

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

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

相关推荐
belldeep2 小时前
python:reportlab 将多个图片合并成一个PDF文件
python·pdf·reportlab
FreakStudio5 小时前
全网最适合入门的面向对象编程教程:56 Python字符串与序列化-正则表达式和re模块应用
python·单片机·嵌入式·面向对象·电子diy
丶21365 小时前
【CUDA】【PyTorch】安装 PyTorch 与 CUDA 11.7 的详细步骤
人工智能·pytorch·python
_.Switch6 小时前
Python Web 应用中的 API 网关集成与优化
开发语言·前端·后端·python·架构·log4j
一个闪现必杀技6 小时前
Python入门--函数
开发语言·python·青少年编程·pycharm
小鹿( ﹡ˆoˆ﹡ )7 小时前
探索IP协议的神秘面纱:Python中的网络通信
python·tcp/ip·php
卷心菜小温7 小时前
【BUG】P-tuningv2微调ChatGLM2-6B时所踩的坑
python·深度学习·语言模型·nlp·bug
陈苏同学7 小时前
4. 将pycharm本地项目同步到(Linux)服务器上——深度学习·科研实践·从0到1
linux·服务器·ide·人工智能·python·深度学习·pycharm
唐家小妹7 小时前
介绍一款开源的 Modern GUI PySide6 / PyQt6的使用
python·pyqt
羊小猪~~8 小时前
深度学习项目----用LSTM模型预测股价(包含LSTM网络简介,代码数据均可下载)
pytorch·python·rnn·深度学习·机器学习·数据分析·lstm