当前位置: 首页 > 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…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天&#xff0c;再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至&#xff0c;这不仅是开发者的盛宴&#xff0c;更是全球数亿苹果用户翘首以盼的科技春晚。今年&#xff0c;苹果依旧为我们带来了全家桶式的系统更新&#xff0c;包括 iOS 26、iPadOS 26…...

反向工程与模型迁移:打造未来商品详情API的可持续创新体系

在电商行业蓬勃发展的当下&#xff0c;商品详情API作为连接电商平台与开发者、商家及用户的关键纽带&#xff0c;其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息&#xff08;如名称、价格、库存等&#xff09;的获取与展示&#xff0c;已难以满足市场对个性化、智能…...

centos 7 部署awstats 网站访问检测

一、基础环境准备&#xff08;两种安装方式都要做&#xff09; bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径&#xff0c; 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解&#xff0c;但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后&#xff0c;通常在该文件中会出现以下配置&…...

ESP32读取DHT11温湿度数据

芯片&#xff1a;ESP32 环境&#xff1a;Arduino 一、安装DHT11传感器库 红框的库&#xff0c;别安装错了 二、代码 注意&#xff0c;DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 &#xff08;部分有免费额度&#x…...

ardupilot 开发环境eclipse 中import 缺少C++

目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作

一、上下文切换 即使单核CPU也可以进行多线程执行代码&#xff0c;CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短&#xff0c;所以CPU会不断地切换线程执行&#xff0c;从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲&#xff1a;队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

Device Mapper 机制

Device Mapper 机制详解 Device Mapper&#xff08;简称 DM&#xff09;是 Linux 内核中的一套通用块设备映射框架&#xff0c;为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程&#xff0c;并配以详细的…...