初始Python篇(2)——逻辑控制、序列

news2024/10/23 13:30:18

找往期文章包括但不限于本期文章中不懂的知识点:

个人主页:我要学编程(ಥ_ಥ)-CSDN博客

所属专栏: Python

目录

顺序结构

选择结构

循环结构

遍历循环-for

break 和 continue 

无限循环-while

pass空语句 

猜数字小游戏

序列

序列相关的操作 

切片操作 

常见的操作序列的函数与操作符


编程语言共有的程序结构结构:顺序结构、分支结构、循环结构。

顺序结构

概念:按照程序语句的自然顺序,从上到下,依次执行每条语句。

 

选择结构

选择结构也称为分支结构,是按照条件的不同,选择执行不同的代码块。

选择结构主要是靠 if-else 来实现的。例如,输入一个数字,判断是奇数,还是偶数。

if - else 的语法结构:

if 条件语句:
    代码块

# 这里的条件语句的结果只能是True或False

这里就是根据我们输入的是奇数,还是偶数,来执行不同的代码块。

注意:

1、input 函数返回的是一个字符串,因此得用 eval 函数来去掉 引号。

2、在Python中 if-else 并不是和C语言、Java那样,需要用括号将判断条件括起来,而是直接写即可,并且后面要跟上一个冒号,表示条件结束。

3、同样其代码块也不是通过花括号去括起来,而是通过缩进来表明这个代码是否是条件语句里面的,如果有缩进,则证明是;否则,不是。

4、Python 和 C语言一样,0可以表示False,非0可以表示True。

下面就是Python 与 C语言、Java不同的地方了。

在C语言或Java中,如果有多重判断条件,我们是 if - else if - else ,但是在Python中,else if 被简写为 elif 。

 上面程序的执行逻辑:和顺序结构一样,从上往下判断条件语句是否成立。如果成立,就选择其中一个执行,否则就选择最后一个语句执行。

当然,Python当中也是存在 if-else 的嵌套。

虽然代码可以嵌套,但是也是有层数限制的(不是强制),最好不要超过三层。

下面我们就来看一下缩进不符合要求的代码。

如果当条件语句中有多个语句时,可以使用 and 或者 or 这样的逻辑运算符来连接。

上面都是大部分情况下使用的条件判断语句,但是还有一些情况下,不适合使用 if-else 语句,因为会造成大量的 if-else 嵌套,不利于我们阅读。因此在Python3.11中就新增了一个模式匹配的语法。类似与C语言和Java中的switch语句。

模式匹配就是通过判断 match 后面跟着的变量 和 case 后面的哪个是相匹配,从而来执行相应的代码块。

循环结构

Python当中的循环结构有两种循环结构:遍历循环-for ,无限循环-while。

注意:Python当中是没有 do-while循环的。

遍历循环-for

语法格式:

# 第一种
for 循环变量 in 遍历对象:
    代码块

# 第二种
for 循环变量 in 循环对象
    代码块
else: # 这个else只有在循环正常执行完毕之后,才会去执行的
    代码块

# 循环变量是我们自己定义的
# 遍历对象一般是序列。例如,字符串、元组等(后面会学)

我们可以来遍历一个字符串并输出。

我们还可以和在C语言、Java中那样去进行范围遍历。

这里我们使用的是Python的内置函数:range。其可以实现范围遍历,但要注意的是:编程中,基本上范围都是前闭后开的状态,[1, 10) 

接下来,我们学习第二种for循环的方式。

上面的代码中遇到了break,提前结束了循环,这就叫非正常结束循环。只有当循环变量全部遍历完成之后结束的循环,才叫正常结束循环。 

break 和 continue 

上面的代码中,我们是用了Python中的保留字:break,和其一样,经常与循环语句一起搭配使用的,还有一个是continue。

break的作用是 提前结束循环;continue的作用是跳过本次循环后面的部分,但是还是会继续执行循环。下面用代码来演示:

无限循环-while

语法格式:

# 第一种方式:
while 条件判断:
    代码块
# 第二种方式:
while 条件判断
    代码块
else:
    代码块


# 代码块中要包含能够影响改变条件判断真假的语句
# 如果没有的话,就很容易写出死循环的代码
# 一个完美的循环,要有四个条件:
# 1、初始化变量
# 2、条件判断
# 3、改变变量
# 4、循环做的事情(这个不会导致死循环)
# 这里的变量都是指的同一个变量

我们还是用代码来演示:

注意:Python中没有 i++ 这样的自增写法。 

第二种while循环,和我们前面学习的第二种for循环是一样的,只有当循环正常结束时,才能够执行else语句。 

关于循环练习——打印图形,如果有小伙伴感兴趣的话,可以去看下面的文章,详细地介绍了如果打印,以及怎么打印图形:随心所欲打印图形

pass空语句 

pass是Python中的保留字,在语法结构中只起到占位符作用,使语法结构完整,不报错。一般可用在if、for、while、函数的定义、类的定义中。

猜数字小游戏

要求:利用程序随机生成一个1-100之间数字,然后让用户去猜测,根据猜测的结果,显示不同的结果,直至猜对为止。

如果有小伙伴想详细了解的话,可以去看这篇博客(虽然代码是C语言,但是主要是了解思路):利用C语言的分支循环少量的函数知识写一个猜数字的小游戏_c语言循环部分小游戏-CSDN博客 

序列

序列是一个用于存储多个值的连续空间(类似于C语言和Java中的数组),每个值都对应一个整数的编号,称为索引(类似数组的下标)。但是数组中的下标是从0开始到数组长度-1结束的(正向递增),而索引从 -1 到 -数组长度的反向递减的情况。

我们前面学习的字符串就是由字符组成的序列。现在我们可以利用不同的索引来访问字符串了。 

字符串只是序列的一种,序列还有其他的一些组合数据类型,后面再学习。

序列相关的操作 

切片操作 

对于是序列类型的对象(例如,字符串),我们都可以使用切片操作来访问其中的序列元素。 

我们前面是访问一个一个的元素,现在我们要来访问一个范围内的元素,就可以使用切片操作。 

# 切片操作
str = 'HelloWorld'
s1 = str[0:5:2] # 从0开始,到4结束,步长为2
print(s1) # 结果为 Hlo

 还可以将开始位置、步长、结束位置都进行省略。

# 省略开始位置
str = 'HelloWorld'
print(str[:5:2]) # 默认从0开始,到4结束,步长为2

# 省略步长
str = 'HelloWorld'
print(str[:5:]) # 默认从0开始,到4结束,默认步长为1

# 省略结束位置
str = 'HelloWorld'
print(str[::]) # 默认从0开始,默认到 len()-1 结束,默认步长为1

str = 'HelloWorld'
print(str[:]) # 当结束位置和步长都没写时,可以将省略两者之间的 ":"

注意:开始位置、结束位置和步长都是可以为负数的。因为序列的切片操作和索引是相对应的。即索引可以为负数,那么切片操作中开始位置、步长、结束位置都可以是负数。

str = 'HelloWorld'
print(str[-1:-11:-1]) # 步长为-1,开始位置为-1,结束位置为-10

str = 'HelloWorld'
# 前面是不能省略的,只能省略后面,否则达不到我们想要的效果
print(str[::-1]) # 步长为-1,开始位置默认为-1,结束位置默认为-10

常见的操作序列的函数与操作符

首先,就是我们之前再学习字符串时的相加和相乘操作。 

# 字符串相加(拼接)
print('Hello'+'World') # 输出HelloWorld
# 字符串相乘(幂)
print('Hello'*2) # 输出HelloHello
# 字符串相乘的两者的次序可以交换
print(2*'Hello') # 输出HelloHello
操作符 / 函数描述
x in s如果x是s的元素,结果为True,否则结果为False
x not in s如果x不是s的元素,丝结果为True,否则结果为False
len(s)序列s中元素的个数 (即序列的长度)
max(s)序列s中元素的最大值
min(s)序列s中元素的最小值
s.index(x)序列s中第一次出现元素x的位置
s.count(x)序列s中出现x的总次数

注意:对于序列的 max 和 min 操作,比较的依据取决于序列中元素的类型。

如果序列中的元素是字符串,比较的是字符的编码值,在某种程度上可以理解为类似于ASCII码值(对于ASCll 范围内的字符来说),但对于更广泛的 Unicode 字符集,是按照其Unicode 编码值进行比较。
如果序列中的元素是数字类型(如整数、浮点数等),则是按照数字的大小进行比较。
如果序列中的元素是其他可比较类型的对象(如自定义的类,只要实现了比较方法),则按照自定义的比较规则进行比较。

这里不理解暂时没关系,后期会慢慢学习的。想了解ASCII码值的小伙伴,可以去看这篇博客:

C语言常见概念-CSDN博客

print('e' in 'Hello') # True
print('x' not in 'Hello') # True
print(len('Hello')) # 5
print(max('Hello')) # o --> o的ASCII码值最大
print(min('Hello')) # H --> H的ASCII码值最小
print('Hello'.index('l')) # 2 --> Hello中l第一次出现的位置为2
# print('Hello'.index('w')) # 如果不存在的话,就会报错
print('Hello'.count('l')) # 2 --> Hello中l出现的次数为2
print('Hello'.count('w')) # 0 --> 不存在,那么出现的次数就是0

好啦!本期  初始Python篇(2)——逻辑控制、序列 的学习之旅就到此结束啦!我们下一期再一起学习吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2213251.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何管理和维护自动化测试

将测试数据、测试脚本和测试结果进行有效的管理和维护是软件测试过程中的重要任务,它直接关系到测试的质量和效率。以下是对这三个方面分别进行管理和维护的具体建议: 一、测试数据的管理和维护 1. 数据收集 来源选择:测试数据主要来源于生…

Redis 简单编写C++客户端

我们之前的学习都是通过Redis自带的命令行式的客户端来使用Redis的,我们在执行命令的时候,都是手动执行的。然而这种操作方式并不是日常开发的主要形式。 更多的时候,是使用Redis的api来实现定制化的Redis客户端程序,进一步来操作…

一场被真话包场的前端面试记录……

​ 面试官:等很久了吧,我是故意的!这不是要装的忙一点,让领导看看嘛。前端小李:看你们这公司不大,破事倒是不少!要不是到门口了,我都想回去。面试官:没错,我们…

为什么kafka处理速度这么快啊!?

Apache Kafka 是一个开源的分布式事件流平台,具有高吞吐量、可扩展性和持久性等特点。目前被广泛使用,本文将介绍kafka的组成部分、特点,并且解释为什么kafka能够快速处理。 一、基本组成部分 1. 消息(Message)&#x…

【AAOS】Android Automotive 14模拟器源码下载及编译

源码下载 repo init -u https://android.googlesource.com/platform/manifest -b android-14.0.0_r20 repo sync -c --no-tags --no-clone-bundle 源码编译 source build/envsetup.sh lunch sdk_car_x86_64-trunk_staging-eng make -j8 运行效果 emualtor Home All apps …

Nature 正刊丨镊子时钟的通用量子运算和基于ancilla的读出

01摘要 通过利用纠缠来提高测量精度是量子计量学长期追求的目标1,2。然而,在存在噪声的情况下获得量子理论允许的最佳灵敏度是一个突出的挑战,需要最佳的探测态生成和读出策略3,4,5,6,7。中性原子光学钟8是测量时间的主要系统,在纠缠产生方面…

【C++贪心 分治】1717. 删除子字符串的最大得分|1867

本文涉及知识点 贪心 分治 LeetCode1717. 删除子字符串的最大得分 给你一个字符串 s 和两个整数 x 和 y 。你可以执行下面两种操作任意次。 删除子字符串 “ab” 并得到 x 分。 比方说,从 “cabxbae” 删除 ab ,得到 “cxbae” 。 删除子字符串"…

IEEE出版:第十二届信息系统与计算技术国际学术会议参会邀请

第十二届信息系统与计算技术国际会议(ISCTech 2024)将于2024年11月8-11日在西安举办,聚焦信息系统与计算技术领域,邀请专家学者参与交流。投稿论文将经严格审稿并出版至IEEE Xplore,支持EI等检索。会议涵盖多个主题&am…

编译cifx的驱动代码报错“netlink/cli/utils.h: No such file or directory”

ethercat编译时遇到netlink/cli/utils.h: No such file or directory 确认已安装对应的库: sudo apt-get install libnl-3-devsudo apt-get install libnl-genl-3-dev依旧编译失败,找到文件所在路径。 发现该路径在系统默认的库查找路径内 选择创建软链…

MySQL数据库操作——(2)

3 DML(数据操作) 3.1 添加数据 insert语法: 向指定字段添加数据 insert into 表名 (字段名1, 字段名2) values (值1, 值2); 全部字段添加数据 insert into 表名 values (值1, 值2, ...); 批量添加数据(指定字段) ins…

雪花啤酒:以AI数智化重新书写啤酒产业

作者|斗斗 编辑|皮爷 出品|产业家 在中国,雪花啤酒的名字刻在了每个人脑中。就像在泰山南天门,必须拿一瓶“勇闯天涯”拍照打卡一样,已经成为了一个“必选项”。 1993年,华润集团收购了沈阳雪花啤酒厂55%股份,…

挑战高薪!腾讯/华为招聘提到的PMP证书来了!

想必大家伙都知道:想要挑战高薪工作,除了要有过硬的专业能力外,不断进行自我提升也非常重要! 现在招聘中,很多与岗位匹配的证书,也被纳入了基本条件中,比如被频繁提到的PMP证书,无论…

什么是上网行为管理?一文为你揭晓答案!

在当今这个数字化时代,互联网已成为人们工作、生活和学习中不可或缺的一部分。 然而,随着网络使用的普及,如何有效管理和控制用户的上网行为成为了一个重要议题。 上网行为管理,作为一种综合性的网络安全和管理工具,正…

123-基于AD9273的64路50Msps的超声侦测FMC子卡

一、产品概述 本板卡系我公司自主研发,采用8片AD9273,实现了64路模拟信号输入采集。板卡设计满足工业级要求。可用于水声侦测、医疗超声检测等。如图 1所示: 二、板卡介绍 模拟输入:两个J30J-66连接器数字输出:FMC连接…

【AIGC】如何通过ChatGPT快速学习Java、解决bug、搞定技术解决方案(完整教程)

目录 1、快速编写代码需求:创建一个Java方法,从ftp服务器下载文件 2、解决bug3、优化代码4、自学Java新技术5、推荐技术解决方案[如何直接使用ChatGPT4o、o1、OpenAI Canvas](https://www.nezhasoft.cn/)编程功能的提升 现在真的是进入了 “编码不用手&a…

起吊机革新:协议转换器解锁安全与效率

重工起吊机设备在工业生产中扮演着至关重要的角色,但其在实际应用中面临着一系列痛点问题。这些问题不仅影响了起吊机的性能和安全性,还限制了生产效率的提升。我们自主研发的MG协议转换器能够高效解决这些痛点,同时MG协议转换器作为一种关键…

路由器概述

一、路由器的工作原理 根据路由表转发数据 二、路由表与其形成 2.1路由表 (1)概念 路由:从源主机到目的主机的转发过程路由表:路由器中维护的路由条目的集合;路由器根据路由表做路径选择 (2&#xff…

光控资本:每天股票最佳买卖时间,什么时候交易股票最好?

一般来说,炒股每天最佳的生意时刻为下午的2:30-3:00,即尾盘买入,其原因如下: 1、能逃避大盘的系统性危险 投资者在尾盘买入个股,可以更好防备大盘暴降引发的资金被套的危险。 2、削减持股时刻…

001 Qt_从零开始创建项目

文章目录 前言什么是QtQt的优点Qt的应用场景创建项目小结 前言 本文是Qt专栏的第一篇文章,该文将会向你介绍如何创建一个Qt项目 什么是Qt Qt 是⼀个 跨平台的 C 图形⽤⼾界⾯应⽤程序框架 。它为应⽤程序开发者提供了建⽴艺术级图形界⾯所需的所有功能。它是完全…

多台服务器分布式定时调度的几种方案

背景:现在有多个后端服务器,并且在代码中定义了一个定时任务,希望这个定时任务在一个时间只在一个服务器上执行,涉及到分布式调度,调研了一下总结出几种方案: 1.mysql的内置GET_LOCK GET_LOCK方法的介绍 …