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

Python语法基础--条件选择

学习目标

  • 使用比较运算符编写布尔表达式。
  • 使用random.randint(a,b)或者random.random()函数来生成随机数。
  • 编写布尔表达式(AdditionQuiz)。
  • 使用单向if语句实现选择控制。
  • 使用单向if语句编程。
  • 使用双向if-else语句实现选择控制。
  • 使用嵌套if和多向if-elif-else语句实现选择控制。
  • 避免if语句里的常见错误。
  • 使用选择语句编程。
  • 使用逻辑运算符(and、or和not)组合各种条件。
  • 使用带组合条件的选择语句(LeapYear、Lottery)。
  • 编写使用条件表达式的表达式。
  • 了解控制运算符优先权和结合性的规则。
  • 检测出一个对象的位置。

一、引言

关键点:程序可以根据某个条件决定执行哪条语句。

        如果在计算圆的面积程序清单中输入一个负的radius值,程序将产生一个无效结果。如果这个半径是负的,程序将无法计算这个区域。你怎么解决这种情况呢?

        就像所有的高级程序设计语言一样,Python提供选择语句让你可以在两个或多个不同条件下选择不同的动作。你可以使用下面的选择语句来替换程序清单中的代码:

if radius < 0:print("Incorrect input")
else:area = radius * radius * math.piprint("Area is", area)

选择语句使用的条件称为布尔表达式。本章将介绍布尔类型、数值、比较运算符以及表达式。

二、布尔类型、 数值和表达式

关键点:布尔表达式是能计算出一个布尔值True或False的表达式。

        怎么比较两个数值呢?例如,半径是大于0、等于0还是小于0? Python 提供了六种比较运算符(也称为关系运算符),如表4-1所示,那么哪个用来比较两个数值呢? (表中假设使用的半径是5)。

警告:比较运算符的相等是两个等号(==),而不是单个等号(=),后者是用来赋值的。

        比较的结果就是一个布尔逻辑值: True 或False。例如:下面的语句显示结果为True。

radius = 1
print(radius > 0)

        存储布尔值的变量被称为布尔变量。布尔数据类型被用来代表布尔值,一个布尔变量可以代表True或False值中的一个。例如:下面的语句将True赋值给变量lightson。

lightsOn = True

        True和False都是字面量,就像数字10是字面量一样。它们都是保留字,不能在程序中被当作标识符。

        在计算机内部,Python使用1来表示True而使用0来表示False。你可以使用int数将布尔值转换为一个整数。
例如:

print(int(True))   #显示1
print(int(False))  #显示0

        你也可以用bool函数将一个数字值转换成一个布尔值。如果值为0,这个函数返回False;否则,这个函数总是返回True。
例如:

print(bool(0))  #显示False
print(boo1(4))  #显示True。

三、产生随机数

关键点:函数randint (a, b)可以用来产生一个a和b之间且包括a和b的随机整数。

        设想你要开发一个帮助一年级学生练习加法的程序。这个程序会随机产生两个一位整数: number1和number2,然后显示给学生一个问题: What is 1+7( 1+7=? ),如下面程序清单所示。在学生输入答案后,程序会显示一条消息表明答案是对还是错。

        你可以使用函数random模块中的randint (a,b)函数产生一个随机数字。这个函数返回一个在a和b之间包括a和b的随机整数i。使用randint(0,9)获取一个在0到9之间的随机整数。

        这个程序会按照如下步骤工作。

  • 第1步:产生两个一位整数number1 (例如,4)和number2 (例如,5 )。
  • 第2步:提示学生回答What is 4+5。
  • 第3步:检测学生的答案是否正确。
import randomnumber1 = random.randint(0,9)
number2 = random.randint(0,9)answer = eval(input("What is " + str(number1) +"+"+ str(number2) + "? "))print (number1, "+" , number2, "=" , answer , "is",  number1 + number2 == answer)

        程序使用random模块中定义的randint函数。import 语句会导人这个模块(第1行)。

        也可以使用random( )函数生成一个满足条件0<=r<=1.0的随机浮点数r。

注意:调用random. random( ) 返回一个0.0到1.0之间(不包括1.0)的随机浮点数。调用函数random.randint(0,1)返回0或1。调用random.randrange(0,1) 总是返回0。

四、if 语句

关键点:如果条件正确就执行一个单向if语句。

        前面的程序显示一条像“6+2=7 is false”这样的信息。如果你想将信息改成“6+2=7 is incorrect”,你必须使用选择语句来做这种微小改变。

        Python有多种选择语句类型:单向if语句、双向if-else语句、嵌套if语句,多向if-elif-else语句以及条件表达式。这节介绍单向if语句。

当且仅当条件为true时,一条单向if语句执行一个动作。单向if语句的语法如下:

if boolean-expression:statement(s) # Note that the statement(s) must be indented

        这里statement(s)必须相对于if向右至少缩进一个空白,而每条语句也必须使用同样个数的缩进。为了保持一致性。

        如果布尔表达式计算的结果为真,那么就会执行if块中的语句。if块里的语句都要在if语句之后缩进。例如:
 

if radius >= 0:area = radius * radius * math. piprint("The area for the circle of radius", radius, "is",area)

        在if块中的语句必须在if行后的一.行进行缩进,而且要以相同的空白缩进(即上述代码的第2行和第3行缩进要相同)。

五、双向 if-else 语句

关键点:双向if-else语句根据条件是真还是假来决定执行哪些语句。

        如果指定条件是True,那么一条单向if语句会完成一个动作。如果条件是False,那它什么都不做。但是当条件为False时,你想要完成一个或多个动作时应该怎么办?你可以使用一个双向if-else语句。双向if-else语句根据条件是True还是False指定不同的动作。

        下面是一个双向if-else 语句的句法:

if boolean-expression:statement(s)-for-the-true-case
else:statement(s)-for-the-false-case

六、嵌套 if和多向if-elif-else语句

关键点:将一个if语句放在另一个if语句中就形成了一个嵌套if语句。

if或if-else语句中的语句可以是任意一个合法的Python语句,甚至可以包括另一个if或if-else语句。内部if语句被称为嵌套在外部if语句中。内部if语句也可以包含另一个if语句;事实上,嵌套的深度是没有限制的。例如,下面的语句是一个嵌套if语句:

if i>k:if j>k:print("i and j are greater than k" )else:print("i is less than or equal to k")

        if j>k语句是嵌套在if i>k语句中的。

七、选择语句中常见的错误

关键点:选择语句中的大多数常见错误都是由不正确的缩进问题导致的。

仔细思考a和b中的代码。

        在a中,print语句不在if语块内。要将它放进if块中,你必须像b中那样将print语句缩进,如图b所示。

        考虑下面a和b中代码的另一个例子。a中的代码有两个if子句和一个else子句。哪个if子句是匹配这个else子句的?缩进表明a中else子句匹配第一个if子句而b中else子句匹配第二个if子句。

 因为(i>j) 是false,所以a中的代码显示B,但是b中的语句什么也不显示。

八、逻辑运算符

关键点:逻辑运算符not、 and和or都可以用来创建一个组合条件。

        有时候,几个条件组合在一起决定是否执行一条语句。你可以使用逻辑运算符来组合这些条件形成一个组合表达式。逻辑运算符,也被称为布尔运算符,它是在布尔值上的运算并创建出一个新的布尔值。表4-3罗列出所有的布尔运算符。表4-4定义了not运算符。它对True取反得False,对False取反得True。表4-5定义了and运算符。当且仅当两个操作数都为真时,两个操作数的and操作结果是真。表4-6定义了or运算符。至少有一个操作数为真,两个操作数的or操作结果才为真。

 九、条件表达式

关键点:条件表达式是根据某个条件计算一个表达式。

        你可能想给一个变量赋值,但又受一些条件的限制。例如:下面的语句在x大于0时将1赋值给y,在x小于等于0时将-1赋予y。

ifX>0:y=1
else:y=-1

        你还可以像下面的例子一样,使用一个条件表达式来获取同样的结果。

y=l if x>0 else -1

        条件表达式完全是另一种不同风格。句法结构如下所示:

expression1 if boolean-expression else expression2

        如果布尔逻辑表达式(boolean-expression)为真,那么这个条件表达式的结果就是expressionl;否则,这个结果就是expression2。

        假设你想将变量numberl和number2中较大的赋值给max。你可以使用下面的条件表达式简单地编写一条语句。

max = number1 if number1 > number2 else number2

        对于另一个例子,如果number是偶数,下 面的语句显示消息“ number is even”,否则,显示“number is odd"。

print("number is even" if number% 2 == 0 else "number is odd")

十、运算符的优先级和结合方向

关键点:运算符的优先级和结合方向决定了运算符的计算顺序。

运算符的优先级和结合方向决定Python运算符的计算顺序。假设你有如下的表达式:

3+4*4>5*(4+3)-1

        它的值是多少?这些运算符的执行顺序又是什么?

        算术上,最先计算括号内的表达式。(括号也可以嵌套,最先执行的是最里面括号中的表达式。)当计算没有括号的表达式时,可以根据优先规则和组合规则使用运算符。

        优先规则定义了运算符的优先性。表4-7包含了你至今已经学习过的所有运算符,以从上到下的顺序罗列出来,其优先级越来越弱。逻辑运算符的优先级低于关系运算符,而关系运算符的优先级小于算术运算符。具有相同的优先级的运算符出现在同一行。

        如果相同优先级的运算符紧连在一起,那它们的结合方向决定了计算顺序。所有的二元运算符(除赋值运算符外)都是从左到右的结合顺序。例如:因为+和-都有相同的优先级,所以表达式:

 

 注意: Python 有自己内部计算表达式的方法,Python计算的结果和它对应的算术计算是一样的。

相关文章:

Python语法基础--条件选择

学习目标 使用比较运算符编写布尔表达式。使用random.randint(a,b)或者random.random()函数来生成随机数。编写布尔表达式(AdditionQuiz)。使用单向if语句实现选择控制。使用单向if语句编程。使用双向if-else语句实现选择控制。使用嵌套if和多向if-elif-else语句实现选择控制。…...

visual studio 2017 运行的程序关闭后不能再运行?(visual studio建立项目之后退出,如何再次完整打开项目?)

在你储存项目的文件夹里面应该是这样的 里面.vcxproj后缀名的就是原来创建的项目&#xff0c;直接打开这个头文件源文件就会一起出来了&#xff01; 真的管用&#xff0c;亲测有效。...

亚马逊feedback和review有什么区别

在亚马逊上&#xff0c;"Feedback"&#xff08;反馈&#xff09;和"Review"&#xff08;评论&#xff09;是两个不同的概念&#xff0c;它们在购物体验中起着不同的作用。 Feedback&#xff08;反馈&#xff09;&#xff1a; 亚马逊的"Feedback"…...

新疆大学841软件工程考研

1&#xff0e;软件生产的发展经历了三个阶段&#xff0c;分别是____、程序系统时代和软件工程时代时代。 2&#xff0e;可行性研究从以下三个方面研究每种解决方法的可行性&#xff1a;经济可行性、社会可行性和_____。 3&#xff0e;HIPO图的H图用于描述软件的层次关系&…...

Vue: el-form 自定义校验规则

Vue 的 el-form 组件可以使用自定义校验规则进行表单验证。自定义校验规则可以通过传递一个函数来实现&#xff0c;该函数接受要校验的字段的值作为参数&#xff0c;并返回一个布尔值或一个 Promise 对象。 下面是一个示例&#xff0c;演示如何在 el-form 中使用自定义校验规则…...

8.14 ARM

1.练习一 .text 文本段 .global _start 声明一个_start函数入口 _start: _start标签&#xff0c;相当于C语言中函数mov r0,#0x2mov r1,#0x3cmp r0,r1beq stopsubhi r0,r0,r1subcc r1,r1,r0stop: stop标签&#xff0c;相当于C语言中函数b stop 跳转到stop标签下的第一条…...

Flink笔记

下面是你提供的文字整理后的结果&#xff1a; 1. Flink是一个针对流数据和批数据的分布式处理引擎&#xff0c;同时支持原生流处理的开源框架。 - 延迟低(毫秒级)&#xff0c;且能够保证消息传输不丢失不重复。 - 具有非常高的吞吐(每秒千万级)。 - 支持原生流处理。…...

深度学习在MRI运动校正中的应用综述

运动是MRI中的主要挑战之一。由于MR信号是在频率空间中获取的&#xff0c;因此除了其他MR成像伪影之外&#xff0c;成像对象的任何运动都会导致重建图像中产生伪影。深度学习被提出用于重建过程的几个阶段的运动校正。广泛的MR采集序列、感兴趣的解剖结构和病理学以及运动模式&…...

内存不足V4L2 申请DMC缓存报错问题

当内存不足时,V4L2可能存在申请DMA缓存报错,如下日志: 13:36:54:125 [15070.640862] rkcifhw fdfe0000.rkcif: swiotlb buffer is full (sz: 1843200 bytes) 13:36:54:125 [15070.640891] rkcifhw fdfe0000.rkcif: swiotlb: coherent allocation failed, size=1843200 13:3…...

论文笔记--Llama 2: Open Foundation and Fine-Tuned Chat Models

论文笔记--Llama 2: Open Foundation and Fine-Tuned Chat Models 1. 文章简介2. 文章概括3 文章重点技术3.1 预训练Pretraining3.1.1 预训练细节3.1.2 Llama2模型评估 3.2 微调Fine-tuning3.2.1 Supervised Fine-Tuning(FT)3.2.2 Reinforcement Learning with Human Feedback(…...

客达天下项目案例

本资料转载于传智播客https://www.itheima.com/ https://space.bilibili.com/3493265607232348 黑马程序员主办的全日制统招大学——大同互联网职业技术学院 预计2024年开始招生&#xff0c;敬请持续关注&#xff01; B站视频入口&#xff1a;002_接口项目介绍_哔哩哔哩_bili…...

系统设计类题目汇总二

12 如何在实际的生产者端减少数据库的IO次数&#xff1f; 我自己想到的&#xff1a; 1 对于局部性很强的数据&#xff0c;启用mysql缓存机制&#xff0c;这样就不用磁盘IO 2 对于行数很多的表&#xff0c;可以分库分表&#xff0c;单表的数据量下来了&#xff0c;则查找索引要…...

MySQL和Redis如何保证数据一致性

MySQL与Redis都是常用的数据存储和缓存系统。为了提高应用程序的性能和可伸缩性&#xff0c;很多应用程序将MySQL和Redis一起使用&#xff0c;其中MySQL作为主要的持久存储&#xff0c;而Redis作为主要的缓存。在这种情况下&#xff0c;应用程序需要确保MySQL和Redis中的数据是…...

Go学习第九天

使用sqlite3 package mainimport ("database/sql""fmt"_ "github.com/go-sql-driver/mysql""github.com/jmoiron/sqlx"_ "github.com/mattn/go-sqlite3""log""time" )var schema CREATE TABLE perso…...

kafka集成篇

kafka的Java客户端 生产者 1.引入依赖 <dependency><groupId>org.apache.kafka</groupId><artifactId>kafka-clients</artifactId><version>2.6.3</version></dependency>2.生产者发送消息的基本实现 /*** 消息的发送⽅*/ …...

go-安装部署

一、安装go 详细安装方式可以查看官网 # 下载 wget https://golang.google.cn/dl/go1.21.0.linux-amd64.tar.gz # 解压缩 tar -xzf go1.21.0.linux-amd64.tar.gz # 迁移目录 mv go /usr/local # 配置环境变量 export PATH$PATH:/usr/local/go/bin # 检查go的版本 go version有…...

vue项目的实用性总结

1、mockjs 基本使用 ★ 安装&#xff1a;npm i mockjs。 在src/mock/index.js内容如下&#xff1a; import Mock from mockjs //制订拦截规则 Mock.mock(http://www.0313.com,get,你好啊)记得在main.js中引入一下&#xff0c;让其参与整个项目的运行。 只要发出去的是get类型…...

IOC容器

DI&#xff08;依赖注入&#xff09;&#xff1a;DI&#xff08;Dependency Injection&#xff09;是一种实现松耦合和可测试性的软件设计模式。它的核心思想是将依赖关系的创建与管理交给外部容器&#xff0c;使得对象之间只依赖于接口而不直接依赖于具体实现类。通过依赖注入…...

若依框架浅浅介绍

由若依官网所给介绍可知 1、文件结构介绍 在ruoyi-admin的pom.xml文件中引入了ruoyi-framework、ruoyi-quartz和ruoyi-generatior模块&#xff0c;在ruoyi-framework的pom.xml文件中引入了ruoyi-system模块。 2、技术栈介绍 前端&#xff1a;Vue、Element UI后端&#xff1a…...

echarts 柱状图-折线图-饼图的基础使用

上图示例图表展示相关配置&#xff1a; var myChart echarts.init(this.$refs.firstMain);myChart.setOption({legend: { // 图例设置top: "15%",type: "scroll",orient: "vertical",//图例列表的布局朝向。left: "right",pageIconCo…...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

Frozen-Flask :将 Flask 应用“冻结”为静态文件

Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是&#xff1a;将一个 Flask Web 应用生成成纯静态 HTML 文件&#xff0c;从而可以部署到静态网站托管服务上&#xff0c;如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例&#xff0c;也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下&#xff1a; 定义实例工厂类&#xff08;Java代码&#xff09;&#xff0c;定义实例工厂&#xff08;xml&#xff09;&#xff0c;定义调用实例工厂&#xff…...

DBAPI如何优雅的获取单条数据

API如何优雅的获取单条数据 案例一 对于查询类API&#xff0c;查询的是单条数据&#xff0c;比如根据主键ID查询用户信息&#xff0c;sql如下&#xff1a; select id, name, age from user where id #{id}API默认返回的数据格式是多条的&#xff0c;如下&#xff1a; {&qu…...

laravel8+vue3.0+element-plus搭建方法

创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...

ABAP设计模式之---“简单设计原则(Simple Design)”

“Simple Design”&#xff08;简单设计&#xff09;是软件开发中的一个重要理念&#xff0c;倡导以最简单的方式实现软件功能&#xff0c;以确保代码清晰易懂、易维护&#xff0c;并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计&#xff0c;遵循“让事情保…...

深度学习水论文:mamba+图像增强

&#x1f9c0;当前视觉领域对高效长序列建模需求激增&#xff0c;对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模&#xff0c;以及动态计算优势&#xff0c;在图像质量提升和细节恢复方面有难以替代的作用。 &#x1f9c0;因此短时间内&#xff0c;就有不…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

nnUNet V2修改网络——暴力替换网络为UNet++

更换前,要用nnUNet V2跑通所用数据集,证明nnUNet V2、数据集、运行环境等没有问题 阅读nnU-Net V2 的 U-Net结构,初步了解要修改的网络,知己知彼,修改起来才能游刃有余。 U-Net存在两个局限,一是网络的最佳深度因应用场景而异,这取决于任务的难度和可用于训练的标注数…...

边缘计算网关提升水产养殖尾水处理的远程运维效率

一、项目背景 随着水产养殖行业的快速发展&#xff0c;养殖尾水的处理成为了一个亟待解决的环保问题。传统的尾水处理方式不仅效率低下&#xff0c;而且难以实现精准监控和管理。为了提升尾水处理的效果和效率&#xff0c;同时降低人力成本&#xff0c;某大型水产养殖企业决定…...