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

news2024/11/20 9:12:25

布尔对象:

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

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

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

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

我们判断是真还是假。

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

布尔表达式:

>>> 1 == 1
True

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

>>> 1 == '1'
False

我们也可以连写:

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

条件组合:

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

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

逻辑且:and

True   and  True    # 结果为 True
True   and  False   # 结果为 False
False  and  True    # 结果为 False
False  and  False   # 结果为 False

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

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

逻辑或:or

True   or  True    # 结果为 True
True   or  False   # 结果为 True
False  or  True    # 结果为 True
False  or  False   # 结果为 False

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

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

逻辑非:not

not  True    # 结果为 False
not  False   # 结果为 True

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

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

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

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

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

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

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

    print('函数结束')

registerUser()

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

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

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

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语句中。

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('执行 存储用户信息到数据库 的操作...') 

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

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语句,这种程序的可读性更好。

某个国家的计费计算:

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

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

def charge(miles):
    if miles <= 3:
        unit = 20
    else:
        unit = 15
    return miles * unit


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

那如果我们这么写:

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元/每公里

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

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没有。

条件判断的嵌套:

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

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

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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1088603.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

04 | 如何利用 Repository 中的方法返回值解决实际问题?

上一课时&#xff0c;我们着重讲了方法名和参数的使用方法&#xff0c;这一课时我们来看下Repository 支持的返回结果有哪些&#xff0c;以及 DTO 类型的返回结果如何自定义&#xff0c;及其在实际工作场景中我们如何做。通过本课时的学习&#xff0c;你将了解到 Repository 的…

Ansible概述以及模块

目录 一、Ansible概述 1、Ansible是什么 2、Ansible的作用 3、Ansible的特性 4、Ansible的工作机制 5、Ansible的特点 二、Ansible安装部署 1、管理端安装ansible 2、配置主机清单 3、配置密钥对验证 三、Absible命令行模块 1、command模块 2、shell模块 3、cron …

Jackson+Feign反序列化问题排查

概述 本文记录在使用Spring Cloud微服务开发时遇到的一个反序列化问题&#xff0c;RPC/HTTP框架使用的是Feign&#xff0c;JSON序列化反序列化工具是Jackson。 问题 测试环境的ELK告警日志如下&#xff1a; - [43f42bf7] 500 Server Error for HTTP POST "/api/open/d…

一篇文章让你了解“JWT“

一.JWT简介 1.概念 JWT (JSON Web Token) 是一种用于在网络上安全传输信息的开放标准&#xff08;RFC 7519&#xff09;。它是一种紧凑且自包含的方式&#xff0c;用于在不同组件之间传递信息&#xff0c;通常用于身份验证和授权目的。JWT 是以 JSON 格式编码的令牌&#xff…

Shell后门脚本

说明&#xff1a;请在云服务器中执行&#xff0c;执行脚本后会发生 1、创建${create_user}用户并赋予sudo权限2、获取公网IP地址和SSH端口3、将用户公网IPSSH端口信息发送给${mail_from}变量 #!/bin/bash # 收件人邮箱 mail_fromxxxxx.com sshd_port$(grep "^Port"…

AI低代码维格云甘特视图怎么用?

甘特视图,以日期为横轴展示任务持续时长和先后顺序,简称甘特图。 项目管理过程中,合理分配任务和资源至关重要,使用甘特图,妥当解决以下场景: 想知道整个项目的周期多长,哪些任务对项目的周期影响最大; 想知道每个任务的时间有多长,任务的优先级和依赖关系是什么; 想…

VUE3页面截取部署后的二级目录地址

用vue3开发了一个项目&#xff0c;只能部署在根目录&#xff0c;不能加二级目录&#xff0c;后来网上找了解决方案&#xff0c;在vite.config.ts中增加base: ./,配置解决问题&#xff0c;参考下图&#xff1a; 但部署后要获取部署的二级目录地址切遇到问题&#xff0c;后来想了…

SQL如何导入数据以及第一次上机作业

如何导入excel数据 首先得学会导入数据 使用excel格式不需要改成其它格式&#xff08;如csv&#xff0c;txt&#xff09;&#xff0c;因为你改了到时候还是会报错&#xff08;实践过使用Sum统计总数一直说我数据格式有问题&#xff09; 首先右键TSGL数据库->任务->导入数…

makefile规则查找

文章目录 对应 跟我一起写Makefile2.1**makefile** **的规则****2.2** **一个示例****2.5** **让** **make** **自动推导****2.6 makefile** **的另一种风格****2.7** **清空目录的规则****2.10** **包含其它** **Makefile****3.4** **文件搜寻****3.5** **伪目标****3.6** **多…

AWS香港Web3方案日,防御云安全实践案例受关注

9月26日&#xff0c;AWS合作伙伴之Web3解决方案日在香港举办。来自人工智能、Web3等领域的创业公司、技术专家、风险投资商&#xff0c;就元宇宙时代未来发展进行了深入交流。现场展示了顶象防御云在金融与Web3领域的安全实践案例。 Web3为互联网体系架构的一个整体演进和升级&…

LoRa技术未来发展前景:物联网和边缘计算的引领者

随着物联网和边缘计算的快速发展&#xff0c;低功耗广域网&#xff08;LoRa&#xff09;技术在连接远距离设备、实现长距离通信和满足低功耗需求方面崭露头角。本文将分析LoRa技术在未来的发展前景&#xff0c;尤其是在物联网和边缘计算领域的潜在影响。 LoRa技术的核心优势 1…

自动化产线集控系统(西门子CNC 840D/840DSL远程控制)

1.1项目背景 RQQ/VF120机组目前为1人操作3台机床&#xff0c;需在机台旁监控。为了改善人员在班中劳动强度非常大的现状&#xff0c;调整好每台机床的节奏&#xff0c;以保证机床的最少的等待时间。本项目旨在通过远程监视设备运行过程关键参数&#xff0c;操作人员人员可远程监…

清洁洗鞋商城小程序的作用是什么

人靠衣装&#xff0c;一身干净合身的衣物总是给人赏心悦目的感觉&#xff0c;人们对颜值要求越来越高&#xff0c;不仅是衣服&#xff0c;鞋也是重要的组成部分。各种品牌样式鞋&#xff0c;很多人家里往往有几十双&#xff0c;而在清洁这一块&#xff0c;没有时间、或材质特殊…

JS加密/解密之webpack打包代码逆向

Webpack 是一个强大的打包工具&#xff0c;能够将多个文件打包成一个或多个最终的文件。然而&#xff0c;将已经经过打包的代码还原回原始源代码并不是一件直接的事情&#xff0c;因为 webpack 打包的过程通常会对代码进行压缩、混淆和优化&#xff0c;丢失了部分变量名和代码结…

K8S环境搭建

K8S环境搭建 前置条件 部署3台VM&#xff0c;一台作为master,两台作为slave需要保障vm之间网络是互通的 为vm安装docker # 安装/更新 yum-utils yum install -y yum-utils#添加阿里镜像稳定版仓库 sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce…

TCP/IP(六)TCP的连接管理(三)半连接

一 半连接和全连接 内容参考小林coding 说明&#xff1a; 普通中小厂不会问的这么深,这么细,但是当性能调优阶段必须掌握原理 ① 内容提纲 ② 概念 说明&#xff1a; 半连接只是一个中间状态 ② 图谱 二 半连接 ① 查看 TCP 半连接队列长度 root 用户 执行 --> …

mysql面试题45:读写分离常见方案、哪些中间件可以实现读写分离

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:说一说你知道的读写分离常见方案 读写分离是一种常见的数据库架构方案,旨在分担数据库的读写压力,提高系统的性能和可扩展性。以下是两种常见的…

图解==>渗透测试KAILI系统的基本操作(第九课)

渗透测试KAILI系统的基本操作(第九课) 渗透测试KAILI系统的安装环境(第八课)-CSDN博客 第一部分 认识KAILI操作系统的使用 以2022年版本为例 第二部分 kaili 最新版本的操作系统 的图形话页面 英文版本 第三部分 13条基础命令操作回顾 1 第一条命令 ls ls/ less cat …

与领航者共话湖仓, StarRocks Summit 2023 技术专场分论坛剧透来了!

过去一年里&#xff0c;越来越多的企业开始为自有大数据平台引入湖仓一体数据架构方案&#xff0c;来解决实际的业务问题&#xff1a; 微信实现多个平台数据需求统一&#xff0c;将平均数据查询速度提升 3 倍。 芒果TV 构建全新统一湖仓分析架构&#xff0c;将线上性能提升至原…

C++数位动态规划算法:统计整数数目

题目 给你两个数字字符串 num1 和 num2 &#xff0c;以及两个整数 max_sum 和 min_sum 。如果一个整数 x 满足以下条件&#xff0c;我们称它是一个好整数&#xff1a; num1 < x < num2 min_sum < digit_sum(x) < max_sum. 请你返回好整数的数目。答案可能很大&…