当前位置: 首页 > 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#依赖倒置原则…...

测试微信模版消息推送

进入“开发接口管理”--“公众平台测试账号”&#xff0c;无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息&#xff1a; 关注测试号&#xff1a;扫二维码关注测试号。 发送模版消息&#xff1a; import requests da…...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中&#xff0c;新增了一个本地验证码接口 /code&#xff0c;使用函数式路由&#xff08;RouterFunction&#xff09;和 Hutool 的 Circle…...

基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解

JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用&#xff0c;结合SQLite数据库实现联系人管理功能&#xff0c;并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能&#xff0c;同时可以最小化到系统…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表

##鸿蒙核心技术##运动开发##Sensor Service Kit&#xff08;传感器服务&#xff09;# 前言 在运动类应用中&#xff0c;运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据&#xff0c;如配速、距离、卡路里消耗等&#xff0c;用户可以更清晰…...

PHP 8.5 即将发布:管道操作符、强力调试

前不久&#xff0c;PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5&#xff01;作为 PHP 语言的又一次重要迭代&#xff0c;PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是&#xff0c;借助强大的本地开发环境 ServBay&am…...

android RelativeLayout布局

<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:gravity&…...

数学建模-滑翔伞伞翼面积的设计,运动状态计算和优化 !

我们考虑滑翔伞的伞翼面积设计问题以及运动状态描述。滑翔伞的性能主要取决于伞翼面积、气动特性以及飞行员的重量。我们的目标是建立数学模型来描述滑翔伞的运动状态,并优化伞翼面积的设计。 一、问题分析 滑翔伞在飞行过程中受到重力、升力和阻力的作用。升力和阻力与伞翼面…...

【Kafka】Kafka从入门到实战:构建高吞吐量分布式消息系统

Kafka从入门到实战:构建高吞吐量分布式消息系统 一、Kafka概述 Apache Kafka是一个分布式流处理平台,最初由LinkedIn开发,后成为Apache顶级项目。它被设计用于高吞吐量、低延迟的消息处理,能够处理来自多个生产者的海量数据,并将这些数据实时传递给消费者。 Kafka核心特…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现指南针功能

指南针功能是许多位置服务应用的基础功能之一。下面我将详细介绍如何在HarmonyOS 5中使用DevEco Studio实现指南针功能。 1. 开发环境准备 确保已安装DevEco Studio 3.1或更高版本确保项目使用的是HarmonyOS 5.0 SDK在项目的module.json5中配置必要的权限 2. 权限配置 在mo…...

大数据驱动企业决策智能化的路径与实践

&#x1f4dd;个人主页&#x1f339;&#xff1a;慌ZHANG-CSDN博客 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 一、引言&#xff1a;数据驱动的企业竞争力重构 在这个瞬息万变的商业时代&#xff0c;“快者胜”的竞争逻辑愈发明显。企业如何在复杂环…...