前言
之前讲了列表、元组、字典集合和字符串等一系列Python的基本数据结构,但是如何把这一个个基本的数据结构串接起来,组成一手漂亮的代码呢?这就是今天要讨论的条件与循环。(文字较长,文末有视频版学习资料)
为什么说它是最基本的
因为它控制着代码的逻辑,可以说是程序的中枢系统。如果把写程序比作盖楼房,那么条件与循环就是楼房的根基,其他所有东西都是在此基础上构建而成。写一手简洁易读的条件与循环代码对提高程序整体的质量至关重要,因为包含大量的代码块。
Python的条件语句
1、 if结构
其语法结构为:
if 条件:
语句组
如何运算:如果条件为真(True)就执行语句组,为假(False)则执行if结构后面的语句。
比如:
其中:!= :表示不等于;
== :表示等于(用于判断语句)
条件后的冒号(😃:代表当前这一行语句没有结束,不能漏掉。
注意:汉语拼音容易存在歧义,写代码时最好用英语。
补充:若将所有的代码加注释,可以用快捷键:Alt + 3
多行加注释代码取消注释,可以用快捷键:Alt + 4
2、 if-else结构
其语法结构为:
if 条件 :
语句组1
else:
语句组2
如何运算:如果条件为真(True)就执行语句组1,然后跳过else语句和语句2,继续执行后面的语句。如果条件为假(False)就执行语句组2,然后继续执行后面的语句。
补:if:关键字,用于判断语句,有“如果”的意思,后面跟上判断语句。
else:常和“if”连用,有否则的意思,后面直接跟上冒号“:”。
比如:
3、 elif结构
其语法结构为:
if 条件1 :
语句组1
elif 条件2 :
语句组2
elif 条件3 :
语句组3
……
elif 条件n :
语句组n
else:
语句组n+1
何时适用:
(1)当条件多于两种情况时,就要加上elif语句;
(2)如果条件只有两种情况时,通过if-else结构来执行判断;多种情况时,可以使用elif保证在一个判断当中,否则会进行多次判断,增加程序运行时间。
比如:
注意:elif只能跟在if后面,不能自己单独写。
4、 三目运算
其语法结构为:
True if 条件 else False
注:True的位置是判断为真时返回的值;
False的位置是判断为假时返回的值。
比如:
三目运算同样也是判断,但是要相当简洁,这样可以节省很多代码,让代码看起来更加简洁。
注:只有简单的if判断可以使用,过于复杂的判断就不要使用了,否则会影响代码的可读性。
补:
如何在交互模式同时定义多个变量:
比如:
python循环语句
所谓循环,顾名思义,本质上就是便利集合中的元素。和其他语言一样,Python中的循环一般通过for循环和while循环来实现。比如我们有一个列表,需要遍历列表中的所有元素并打印输出。
其实Python中的数据结构只要是可迭代的,比如列表、集合等等,那么他们都可以通过下面这种方式来遍历:
这里需要单独强调一下字典,字典本身只有键是可迭代的,如果我们要便利它的值或者是键值对,就需要通过其内置的函数values()或者items()来实现。那其中values()返回字典的值的集合,Items()返回键值对的集合。
看到这里你也许会问,有没有什么办法通过集合中的索引来便利元素呢?当然可以,其实这种情况在实际工作当中呢,还是比较常见的,甚至很多时候我们还得根据索引来做一些条件判断。
我们通常通过range()这个函数拿到索引,再去遍历访问集合中的元素。
当我们同时需要索引和元素时,还有一种更简洁的方式,那就是通过Python内置的函数,enumerate(),用它来遍历集合,不仅返回每个元素,并且还返回其对应的索引。
在循环语句中,我们还经常搭配continue和break一起来使用,所以continue就是让程序跳过当前这层循环,继续执行下面的循环,而break则是指完全跳出所在的整个循环体。在循环中适当加入continue和break,往往能使程序更加简洁易读。
比如给定两个字典,分别是产品名称到价格的映射和产品名称到颜色列表的映射。我们要找出价格小于1000并且颜色不是红色的所有产品名称和颜色的组合。如果不用continue,代码应该是下面这样的:
而加入continue后,代码显然清晰了很多。
我们可以看到按照第一个版本的写法,从开始一直到打印输出符合条件的产品名称和颜色,共有五层for或者if的嵌套,但第二个版本加入了continue后,只有三层嵌套。
显然如果代码中出现嵌套里还有嵌套的情况,代码会变得非常冗余,难度也不利于后续的调试和修改。因此呢,我们要尽量避免这种多层嵌套的情况。
前面说了for循环对while循环原理也是一样的,它表示当condition满足时呢,一直重复循环内部的操作,知道condition不再满足就跳出循环体。
那很多时候for循环和while循环可以互相转换,比如要遍列一个列表,我们用while循环同样可以完成。
for循环和while循环的使用场景的区别
那通常来说,如果你只是便利一个已知的集合,找出满足条件的元素并进行相应的操作,那么使用for循环更加简洁。但如果你需在满足某个条件前不停的重复某些操作,并且没有特定的集合需要去便利,那么一般则会使用while循环。
比如某个交互式问答系统,用户输入文字,系统会根据内容做出相应的回答。为了实现这个功能,我们一般会使用while循环,大致的代码如下:
同时需要注意的是for循环和while循环的效率问题。比如下面的while循环
和等价的for循环
究竟哪个效率高呢?要知道,Range函数是直接由C语言写的,调用它速度非常快,而while循环中的i+=1这个操作得通过Python的解释器间接调用底层的C语言,并且呢,这个简单的操作又涉及到了对象的创建和删除,所以显然for循环的效率更胜一筹。
条件与循环的复用
上面说了条件与循环的一些基本操作,接下来重点来看他们的进阶操作,让程序变得更简洁高效。
在阅读代码的时候,你经常会发现有很多将条件与循环并做一行的操作,例如:
将这个表达式分解开来,其实就等同于下面这样的嵌套结构。
而如果没有else语句,则需要写成:
比如我们在处理文件中的字符串时常常遇到的一个场景,将文件中逐行读取的一个完整语句按逗号分割单词,去掉首位的空字符,并过滤掉长度小于3的单词,最后返回由单词组成的列表,这同样可以简洁的表达成一行。
当然这样的复用并不仅仅局限于一个循环,比如给定两个列表X、Y,要求返回X、Y中所有元素,对组成的元组相等情况除外,那么也可以很容易用复用形式表示出来,
而这样的写法就等价于:
熟练之后你会发现这种写法非常方便。当然,如果遇到逻辑很复杂的复用,你可能会觉得写成一行难以理解,容易出错,那种情况下,用正常的形式表达也不失为一种好的规范和选择。
总结
强调几个易错的地方:
第一个,在条件语句中,If可以单独使用,但是elif和else必须和if同时搭配使用,而if条件语句的判断,除了boolean类型外,其他的最好显示出来。
第二个,在for循环中,如果需要同时访问索引和元素,你可以使用enumerate()函数来简化代码。
第三个写条件与循环时,合理利用continue或者break来避免复杂的嵌套是十分重要的。
第四个要注意条件与循环的复用,简单功能往往可以用一行直接完成,极大的提高代码质量与效率。
视频版学习
零基础Python学习指南
👉Python学习路线汇总👈
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
👉Python必备开发工具👈
温馨提示:篇幅有限,已打包文件夹,获取方式在:文末
👉Python学习视频600合集👈
观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
👉实战案例👈
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
👉100道Python练习题👈
检查学习结果。
👉面试刷题👈
👉资料领取👈
这份完整版的Python全套学习资料已为大家备好,朋友们如果需要可以微信扫描下方二维码添加“住隔壁的王叔”,输入"领取资料" 可免费领取全套资料【有什么需要协作的还可以随时联系我】朋友圈也会不定时的更新最前言python知识。