)
条件语句、循环语句与推导式Python 的流程控制说白了就三件事判断走哪条路、重复干多少遍、快速生成批量造数据。这就像开车——条件语句是红绿灯循环语句是绕着环岛转圈推导式则是自动化的流水线打包机。咱们一样一样拆。一、条件语句让代码学会“看人下菜碟”1. 三种基本形态条件语句的核心就是if后面跟着一个“真/假”表达式真就执行假就跳过或者走else。单分支if 条件: 做某事双分支if 条件: 做A else: 做B多分支if 条件1: ... elif 条件2: ... elif 条件3: ... else: ...注意一个关键特性每个条件语句只会命中第一个满足的条件后面的elif和else就都不看了。这跟按顺序问问题一样问到了“是”就不再往下问。num5ifnum0:print(a)# 输出 aelifnum1:print(b)# 不会执行因为上面已经满足了P.S.if后面的条件不一定是布尔值Python 会自动把任何值转成布尔——0、None、空字符串、空列表、空字典等都是False其他都是True。所以if []:永远不会进if hello:一定会进。2. 三元表达式一行搞定简单判断如果你只是根据条件给变量赋个值写四行if-else太啰嗦可以用三元表达式result牛逼ifscore90else优秀ifscore80else可以ifscore60else同志仍需努力这玩意儿是表达式有返回值不是代码块所以可以嵌在 f-string 里print(f老师说我{牛逼ifscore90else优秀ifscore80else可以ifscore60else同志仍需努力})不过实话实说嵌套多了可读性会下降适可而止。3. 嵌套与“奇葩”写法条件语句可以套娃——if里面再写if。PDF 里那个“包租婆”的例子就是典型的嵌套判断。另外Python 还支持一种“连环三元”的写法PDF 里有一长串但那个纯粹是炫技生产环境千万别这么写维护的人会想打你。二、循环语句让代码学会“重复劳动”循环分两种while和for一个靠条件一个靠遍历。1.while条件型循环只要条件为真就一直执行。最常见的是while True死循环配合break手动退出。count0whileTrue:print(count)count1ifcount5:breakwhile...else的坑else会在循环正常结束没有被break时执行。如果循环被break打断else就不执行。这一点容易忘但用好了可以省一个标志变量。2.for遍历型循环for可以遍历任何可迭代对象字符串、列表、元组、字典、集合、range 等。foriinabc:print(i)# a b cforkeyin{one:1,two:2}:# 遍历的是键print(key)for...else的逻辑和while...else一样——正常走完才执行else被break则跳过。3. 循环控制break和continuebreak终止整个循环只影响它所在的那一层外层不受影响。continue跳过本次直接进入下一次迭代。foriinrange(3):forjinrange(3):print(hello)break# 只跳出内层循环所以外层循环3次输出3个hello4. 两个实用内置工具range和enumeraterange(start, stop, step)生成一个不可变的整数序列不占内存只存三个参数适合循环计数。enumerate(iterable, start0)在遍历时同时拿到索引和值返回一个个元组。foridx,valinenumerate([a,b,c],start1):print(idx,val)# 1 a, 2 b, 3 c三、推导式一行代码搞定批量生成推导式是 Python 特有的“语法糖”能把好几行的for循环压缩成一行而且速度更快底层优化过。1. 列表推导式 —— 最常用基本结构[表达式 for 变量 in 可迭代对象 if 条件]squares[x**2forxinrange(10)]# [0,1,4,9,...81]even_squares[x**2forxinrange(10)ifx%20]还可以两层循环相当于嵌套forresult[(x,y)forxin[1,2,3]foryin[3,1,4]ifx!y]初始表达式甚至可以又是一个列表推导式比如转置矩阵——那个有点烧脑但看懂了会觉得很优雅。2. 字典推导式 和 集合推导式把方括号换成花括号写法一样。dic{x:x**2forxinrange(4)}# {0:0, 1:1, 2:4, 3:9}set1{x**2forxinrange(4)}# {0,1,4,9}集合自动去重集合推导式天然去重很适合做过滤。四、综合实战大家可以动手敲一敲下面的这道例题试着做一下用random.randint(0,2)生成电脑出拳。用字典映射数字到“石头/剪刀/布”。判断输赢的逻辑player - computer等于-1或2时玩家赢因为 0石头、1剪刀、2布 是一个循环相克的关系。加了输入校验while循环保证输入在 0~2 之间。三局两胜制用for循环跑三局统计双方胜局数。最后询问是否继续用while确保输入只有q或c。这个例子把条件、循环、推导式虽然没显式用都串起来了是很好的练手项目。五、补充几个边角料random模块除了randint还有random()0~1浮点、choice随机选一个、sample随机选多个不重复、shuffle打乱顺序、seed固定随机种子方便复现。pass占位符什么也不做只用来占位置比如写个空函数或空循环体等以后补代码。chr和ord字符和 Unicode 码位互转PDF 里用在判断输入是否为大写Q或小写q上。收尾条件语句、循环语句、推导式这三块是 Python 里最基础的“动词”——你写的每一段代码都离不开它们。别死记语法多敲几遍石头剪刀布把if、while、for、break、continue的手感练出来后面学函数、类、装饰器就顺了。如果非要说个优先级if和for是基本功列表推导式是进阶亮点。先把前者玩透后者自然水到渠成。下图为本文知识点的思维导图示意有任何疑问随时来聊。编码愉快