当前位置: 首页 > news >正文

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

某个国家的计费计算:

里程收费
<= 320元/每公里
> 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学习基础笔记六十五——布尔值

布尔对象&#xff1a; Python中有一种对象类型称之为布尔对象&#xff08;英文叫bool&#xff09;。 布尔对象只有两种取值&#xff0c;True和False。对应的是真和假&#xff0c;或者说是和否。True对应的是&#xff0c;False对应的是否。 我觉得这句话是一个关键&#xff1a…...

ChatGPT生产力|实用指令(prompt)

GPT已经成为一个不可或缺的科研生产力了&#xff0c;但是大多数人只知晓采用直接提问、持续追问以及细节展开的方式来查阅相关资料&#xff0c;本文侧重于探讨“限定场景限定角色限定主题”、“可持续追问细节展开”等多种方式来获取更多信息&#xff0c;帮人们解决更多问题。 …...

【大数据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 中的线程是映射到操作系统原生线程之上的&#xff0c;如果要阻塞或唤醒一个线程就需要操作系统的帮忙&#xff0c;这就需要从用户态转换到核心态。状态转换需要花费很多时间&#xff0c;如下代码所示&#xff1a; private Object lock new Object();private int value;p…...

处理机调度

目录 处理机调度概述 处理机调度的层次 低级调度 中级调度 高级调度 进程调度 进程调度的时机 进程调度的方式 非抢占式调度方式 抢占式调度方式 调度算法的评价指标 调度算法 先来先服务调度算法&#xff08;FCFS&#xff0c;First Come First Serve&#xff09; …...

Webpack 解决:ReferenceError: dist is not defined 的问题

1、问题描述&#xff1a; 其一、报错为&#xff1a; ReferenceError: dist is not defined 中文为&#xff1a; ReferenceError&#xff1a;dist 未定义 其二、问题描述为&#xff1a; 想在 webpack 的配置中&#xff0c;创建一个 dist 文件夹来存放 npm run build 打包后…...

MySQL的index merge(索引合并)导致数据库死锁分析与解决方案 | 京东云技术团队

背景 在DBS-集群列表-更多-连接查询-死锁中&#xff0c;看到9月22日有数据库死锁日志&#xff0c;后排查发现是因为mysql的优化-index merge&#xff08;索引合并&#xff09;导致数据库死锁。 定义 index merge(索引合并)&#xff1a;该数据库查询优化的一种技术&#xff0…...

第四章 网络层 | 计算机网络(谢希仁 第八版)

文章目录 第四章 网络层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−1​xk−1​Gk−1​wk−1​    式中 Φ k , k − 1 \Phi_{…...

仿真软件Proteus8.9 SP2 Pro 下载、安装、汉化详细图文教程

Proteus8.9 安装教程 视频教程一、安装软件解压二、软件安装常见问题及解决方法&#xff1a;三、汉化 Proteus8.9 SP2 Pro 安装教程 本破解教程仅供个人及 proteus 8.9粉丝们交流学习之用&#xff0c;请勿用于商业用途&#xff0c; 谢谢支持。此版本为Proteus8.9 SP2 Pro。其他…...

振弦传感器和无线振弦采集仪在隧道安全监测的解决方案

振弦传感器和无线振弦采集仪在隧道安全监测的解决方案 隧道作为交通工程的重要组成部分&#xff0c;具有极高的安全风险&#xff0c;因此隧道安全监测是必不可少的。振弦传感器和无线振弦采集仪作为隧道安全监测的两种重要设备&#xff0c;能够有效地监测隧道的振动情况&#…...

c# xml 参数读取的复杂使用

完整使用2 生产厂家里面包含很多规格型号,一个规格型号里面包含很多出厂序列号,点击下一步如果检测到填充的和保存的不一样 就新增一条(如检测到生产厂家相同,但是规格型号不同,就新增一组规格型号)。 界面一:新增界面 界面2 删除界面 界面一:新增界面 load 其中…...

在Mac中使用 brew services start redis 命令启动、停止Redis服务报错

一、问题现象 启动Redis服务命令&#xff1a; brew services start redis异常信息如下&#xff1a; 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…...

为什么手机会莫名多出许多软件?

许多手机用户都曾遭遇过这样的问题&#xff0c;他们在使用手机的过程中&#xff0c;突然发现手机屏幕上出现了一些未知的软件。这些软件并非他们主动下载的&#xff0c;但它们却显现在屏幕上。这些软件从何而来&#xff1f; 其实&#xff0c;这些软件往往是在浏览网页、阅读小…...

测试自动化的边缘:DevTestOps 和 DevSecOps

什么是 DevOps&#xff1f; DevOps 允许企业通过自动化基础设施、工作流程和持续测量应用程序的性能来提高开发人员和运营团队之间的协作和生产力。通过 DevOps&#xff0c;开发人员可以以小块的形式编写代码&#xff0c;以便在几个小时内集成、测试、监控和部署代码&#xff…...

fatal:Could not read from remote repository解决方法

Linux服务器如何连接GitHub&#xff1f; 生成SSH密钥 ssh-keygen -C “邮箱” -t rsa 存放位置一般是/root/.ssh/id_rsa 登录个人github&#xff0c;添加客户端生成的公钥 打开Settings&#xff0c;点击SSH and GPG keys&#xff0c;点击New SSH Key。Key中粘贴id_rsa.pub…...

数学基础

线性代数 关键词&#xff1a;线性方程组、矩阵、增广矩阵&#xff08;系数矩阵、常数项矩阵&#xff09;、阶梯型矩阵、行最简矩阵、最简形矩阵、向量系统、向量加法、向量空间、基本单位向量、线性相关、线性无关、Span张成空间、 向量乘法&#xff08;点积、内积、外积、叉积…...

【Python】Python语言基础(上)

第一章 前言 1. Python简介 Python语言并不是新的语言&#xff0c;它早于HTTP 1.0协议5年&#xff0c;早于Java语言 4年。 ​ Python是由荷兰人Guido van Rossum&#xff08;吉多范罗苏姆&#xff09;于1989年圣诞节期间在阿姆斯特丹休假时为了打发无聊的假期而编写的一个脚本…...

C#设计模式六大原则之依赖倒置原则

C#设计模式六大原则是单一职责原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特法则、开闭原则。它们不是要我们刻板的遵守&#xff0c;而是根据实际需要灵活运用。只要对它们的遵守程度在一个合理的范围内&#xff0c;努为做到一个良好的设计。以下介绍C#依赖倒置原则…...

如何在广告泛滥的时代找到纯粹的音乐净土?铜钟音乐的极简听歌方案

如何在广告泛滥的时代找到纯粹的音乐净土&#xff1f;铜钟音乐的极简听歌方案 【免费下载链接】tonzhon-music 铜钟 (Tonzhon.com): 免费听歌; 没有直播, 社交, 广告, 干扰; 简洁纯粹, 资源丰富, 体验独特&#xff01;(密码重置功能已回归) 项目地址: https://gitcode.com/Gi…...

基于模型参考自适应的永磁同步电机参数辨识仿真模型探索

基于模型参考自适应的永磁同步电机参数辨识仿真模型 具有电阻、电感辨识&#xff0c;且精度分别在99.9%左右 参考文献&#xff1a;附带搭建仿真过程的参考文献&#xff0c;如图在永磁同步电机&#xff08;PMSM&#xff09;的研究与应用中&#xff0c;准确的参数辨识至关重要。今…...

除了浏览器点一点,Oracle 19c EM Express还能这么用?几个提升DBA效率的隐藏技巧

Oracle 19c EM Express高阶应用&#xff1a;解锁DBA效率提升的五大隐藏技巧 当你已经能够熟练地通过浏览器访问Oracle 19c EM Express时&#xff0c;是否思考过这个轻量级管理工具还能为你带来哪些惊喜&#xff1f;本文将带你超越基础操作&#xff0c;探索那些被大多数DBA忽略的…...

普里斯特利时间轴制作教程:使用chart-doctor创建精美历史时间线

普里斯特利时间轴制作教程&#xff1a;使用chart-doctor创建精美历史时间线 【免费下载链接】chart-doctor Sample files to accompany the FTs Chart Doctor column 项目地址: https://gitcode.com/gh_mirrors/ch/chart-doctor chart-doctor是GitHub加速计划中的一个实…...

Python内存管理正在消失?——2026年三大趋势预警:Rust内存安全层集成、WASI沙箱化运行时、实时GC延迟<50μs(仅限首批Early Adopter)

第一章&#xff1a;Python智能体内存管理策略2026最新趋势随着大语言模型驱动的Python智能体&#xff08;Agent&#xff09;在生产环境中的深度部署&#xff0c;内存管理已从传统CPython引用计数循环检测机制&#xff0c;演进为面向LLM推理生命周期的多维协同治理范式。2026年主…...

别再花钱买会员了!手把手教你用D-ID AI Studio免费复活老照片,7天试用期全攻略

零成本玩转AI影像修复&#xff1a;D-ID免费额度深度使用指南 老照片承载着无数珍贵回忆&#xff0c;但褪色、折痕让它们逐渐模糊。如今AI技术让这些记忆重获新生——无需付费订阅&#xff0c;你完全可以通过合理规划免费资源完成老照片动画化项目。本文将彻底拆解如何最大化利用…...

三相静止无功发生器SVG并网仿真模型(附说明报告) 仿真带一份与仿真完全对应的31页Word报...

三相静止无功发生器SVG并网仿真模型&#xff08;附说明报告&#xff09; 仿真带一份与仿真完全对应的31页Word报告可结合仿真快速入门学习SVG [1]报告内容&#xff1a;原理说明及仿真详细说明和结果分析&#xff08;详细看展示的报告内容&#xff09; 1.基于电压定向的双闭环控…...

AIVideo GPU算力适配指南:低显存(8G)模式启用、缓存策略与批处理优化

AIVideo GPU算力适配指南&#xff1a;低显存&#xff08;8G&#xff09;模式启用、缓存策略与批处理优化 1. 引言&#xff1a;当AI视频创作遇上“显存焦虑” 如果你尝试过用AI生成视频&#xff0c;大概率遇到过这样的场景&#xff1a;兴致勃勃地输入一个创意主题&#xff0c;…...

2026生成式引擎优化(GEO)深度实测报告:基于Hakuna Matata平台的五大主流大模型对抗性测试全景分析

摘要&#xff1a;本文以“Hakuna Matata”测试平台为基准场&#xff0c;针对百度文心一言、Moonshot AI&#xff08;Kimi&#xff09;、腾讯元宝、阿里千问、字节豆包五大国内主流生成式AI平台&#xff0c;开展了一场史无前例的生成式引擎优化&#xff08;GEO&#xff09;对抗性…...

实时手机检测-通用企业应用案例:手机回收站自动分拣系统集成

实时手机检测-通用企业应用案例&#xff1a;手机回收站自动分拣系统集成 1. 引言&#xff1a;当手机回收遇上AI&#xff0c;效率革命正在发生 想象一下&#xff0c;一个大型的手机回收处理中心&#xff0c;每天要处理成千上万部来自不同渠道的旧手机。工人们需要手动将手机从…...