Python学习基础笔记六十五——布尔值
布尔对象:
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个字符')returnif not phone.isdigit() : print('输入错误!手机号码必须全是数字')returnif not phone.startswith('1') : print('输入错误!手机号码必须以数字1开头')return# 前面的条件检查全部通过print('手机号码输入正确') print('执行 存储用户信息到数据库 的操作...')
结合return语句,这种程序的可读性更好。
某个国家的计费计算:
| 里程 | 收费 |
| <= 3 | 20元/每公里 |
| > 3 | 15元/每公里 |
这是典型的双分支if-else结构:
def charge(miles):if miles <= 3:unit = 20else:unit = 15return miles * unitprint(charge(3))
print(charge(5))
那如果我们这么写:
def charge(miles):if miles <= 3:unit = 20if miles > 3:unit = 15return miles * unitprint(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 = 20elif 3 < miles <= 5:unit = 15elif 5 < miles <= 8:unit = 12else:unit = 10return miles * unitprint(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*20elif miles > 3 and duration <= 1 :print('15 元/每公里')return miles*15

有的时候,条件判断成立或者不成立,后面要做什么,还需要再次分情况处理。
这时候往往需要在缩进的代码中再次进行条件判断。
def charge(miles, duration):if miles <= 3:if duration <= 1:unit = 20return miles * unitelse:unit = 22return miles * unitelif miles > 3:if duration <= 1:unit = 15return miles * unitelse:unit = 18return miles * unit
另外,在这个场景中还有一些比较特殊的情况。
要细心地对这些进行梳理,各种情况,把程序才能写好。细心和耐心。
相关文章:
Python学习基础笔记六十五——布尔值
布尔对象: Python中有一种对象类型称之为布尔对象(英文叫bool)。 布尔对象只有两种取值,True和False。对应的是真和假,或者说是和否。True对应的是,False对应的是否。 我觉得这句话是一个关键:…...
ChatGPT生产力|实用指令(prompt)
GPT已经成为一个不可或缺的科研生产力了,但是大多数人只知晓采用直接提问、持续追问以及细节展开的方式来查阅相关资料,本文侧重于探讨“限定场景限定角色限定主题”、“可持续追问细节展开”等多种方式来获取更多信息,帮人们解决更多问题。 …...
【大数据Hive】hive select 语法使用详解
目录 一、前言 二、Hive select 完整语法树 三、Hive select 操作演示 3.1 数据准备 3.1.1 创建一张表 3.1.2 将数据load加载到t_usa_covid19表 3.1.3 再创建一张分区表 3.1.4 使用动态分区插入数据 3.2 select 常用语法 3.2.1 查询所有字段或者指定字段 3.2.2 查询…...
Android---java线程优化 偏向锁、轻量级锁和重量级锁
java 中的线程是映射到操作系统原生线程之上的,如果要阻塞或唤醒一个线程就需要操作系统的帮忙,这就需要从用户态转换到核心态。状态转换需要花费很多时间,如下代码所示: private Object lock new Object();private int value;p…...
处理机调度
目录 处理机调度概述 处理机调度的层次 低级调度 中级调度 高级调度 进程调度 进程调度的时机 进程调度的方式 非抢占式调度方式 抢占式调度方式 调度算法的评价指标 调度算法 先来先服务调度算法(FCFS,First Come First Serve) …...
Webpack 解决:ReferenceError: dist is not defined 的问题
1、问题描述: 其一、报错为: ReferenceError: dist is not defined 中文为: ReferenceError:dist 未定义 其二、问题描述为: 想在 webpack 的配置中,创建一个 dist 文件夹来存放 npm run build 打包后…...
MySQL的index merge(索引合并)导致数据库死锁分析与解决方案 | 京东云技术团队
背景 在DBS-集群列表-更多-连接查询-死锁中,看到9月22日有数据库死锁日志,后排查发现是因为mysql的优化-index merge(索引合并)导致数据库死锁。 定义 index merge(索引合并):该数据库查询优化的一种技术࿰…...
第四章 网络层 | 计算机网络(谢希仁 第八版)
文章目录 第四章 网络层4.1 网络层提供的两种服务4.2 网际协议IP4.2.1 虚拟互连网络4.2.2 分类的IP地址4.2.3 IP地址与硬件地址4.2.4 地址解析协议ARP4.2.5 IP数据报的格式4.2.6 IP层转发分组的流程 4.3 划分子网和构造超网4.3.1 划分子网4.3.2 使用子网时分组的转发4.3.3 无分…...
课题学习(八)----卡尔曼滤波动态求解倾角、方位角
一、 卡尔曼滤波 卡尔曼滤波的应用要求系统和底层过程的测量模型都是线性的。离散时间线性状态空间系统的描述为: x k Φ k , k − 1 x k − 1 G k − 1 w k − 1 x_k\Phi_{k,k-1}x_{k-1}G_{k-1}w_{k-1} xkΦk,k−1xk−1Gk−1wk−1 式中 Φ k , k − 1 \Phi_{…...
仿真软件Proteus8.9 SP2 Pro 下载、安装、汉化详细图文教程
Proteus8.9 安装教程 视频教程一、安装软件解压二、软件安装常见问题及解决方法:三、汉化 Proteus8.9 SP2 Pro 安装教程 本破解教程仅供个人及 proteus 8.9粉丝们交流学习之用,请勿用于商业用途, 谢谢支持。此版本为Proteus8.9 SP2 Pro。其他…...
振弦传感器和无线振弦采集仪在隧道安全监测的解决方案
振弦传感器和无线振弦采集仪在隧道安全监测的解决方案 隧道作为交通工程的重要组成部分,具有极高的安全风险,因此隧道安全监测是必不可少的。振弦传感器和无线振弦采集仪作为隧道安全监测的两种重要设备,能够有效地监测隧道的振动情况&#…...
c# xml 参数读取的复杂使用
完整使用2 生产厂家里面包含很多规格型号,一个规格型号里面包含很多出厂序列号,点击下一步如果检测到填充的和保存的不一样 就新增一条(如检测到生产厂家相同,但是规格型号不同,就新增一组规格型号)。 界面一:新增界面 界面2 删除界面 界面一:新增界面 load 其中…...
在Mac中使用 brew services start redis 命令启动、停止Redis服务报错
一、问题现象 启动Redis服务命令: brew services start redis异常信息如下: Error: uninitialized constant Homebrew::Service::System /opt/homebrew/Library/Homebrew/macos_version.rb:150:in const_missing /opt/homebrew/Library/Taps/homebrew…...
iapp源码-----比较经典
2.0底部菜单导航栏.rar: https://url18.ctfile.com/f/7715018-958700751-6096bd?p6511 (访问密码: 6511) 2.0涟漪_拖动条控制音乐播放.rar: https://url18.ctfile.com/f/7715018-958700754-4cec13?p6511 (访问密码: 6511) 2.0手电筒.rar: https://url18.ctfile.com/f/7715018…...
为什么手机会莫名多出许多软件?
许多手机用户都曾遭遇过这样的问题,他们在使用手机的过程中,突然发现手机屏幕上出现了一些未知的软件。这些软件并非他们主动下载的,但它们却显现在屏幕上。这些软件从何而来? 其实,这些软件往往是在浏览网页、阅读小…...
测试自动化的边缘:DevTestOps 和 DevSecOps
什么是 DevOps? DevOps 允许企业通过自动化基础设施、工作流程和持续测量应用程序的性能来提高开发人员和运营团队之间的协作和生产力。通过 DevOps,开发人员可以以小块的形式编写代码,以便在几个小时内集成、测试、监控和部署代码ÿ…...
fatal:Could not read from remote repository解决方法
Linux服务器如何连接GitHub? 生成SSH密钥 ssh-keygen -C “邮箱” -t rsa 存放位置一般是/root/.ssh/id_rsa 登录个人github,添加客户端生成的公钥 打开Settings,点击SSH and GPG keys,点击New SSH Key。Key中粘贴id_rsa.pub…...
数学基础
线性代数 关键词:线性方程组、矩阵、增广矩阵(系数矩阵、常数项矩阵)、阶梯型矩阵、行最简矩阵、最简形矩阵、向量系统、向量加法、向量空间、基本单位向量、线性相关、线性无关、Span张成空间、 向量乘法(点积、内积、外积、叉积…...
【Python】Python语言基础(上)
第一章 前言 1. Python简介 Python语言并不是新的语言,它早于HTTP 1.0协议5年,早于Java语言 4年。 Python是由荷兰人Guido van Rossum(吉多范罗苏姆)于1989年圣诞节期间在阿姆斯特丹休假时为了打发无聊的假期而编写的一个脚本…...
C#设计模式六大原则之依赖倒置原则
C#设计模式六大原则是单一职责原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特法则、开闭原则。它们不是要我们刻板的遵守,而是根据实际需要灵活运用。只要对它们的遵守程度在一个合理的范围内,努为做到一个良好的设计。以下介绍C#依赖倒置原则…...
第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
使用分级同态加密防御梯度泄漏
抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...
MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...
SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现
摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...
自然语言处理——循环神经网络
自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元(GRU)长短期记忆神经网络(LSTM)…...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...
在Ubuntu24上采用Wine打开SourceInsight
1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...
基于TurtleBot3在Gazebo地图实现机器人远程控制
1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...
uniapp 小程序 学习(一)
利用Hbuilder 创建项目 运行到内置浏览器看效果 下载微信小程序 安装到Hbuilder 下载地址 :开发者工具默认安装 设置服务端口号 在Hbuilder中设置微信小程序 配置 找到运行设置,将微信开发者工具放入到Hbuilder中, 打开后出现 如下 bug 解…...
协议转换利器,profinet转ethercat网关的两大派系,各有千秋
随着工业以太网的发展,其高效、便捷、协议开放、易于冗余等诸多优点,被越来越多的工业现场所采用。西门子SIMATIC S7-1200/1500系列PLC集成有Profinet接口,具有实时性、开放性,使用TCP/IP和IT标准,符合基于工业以太网的…...
