Python流程控制
在流程控制介入之前,代码只能从上到下依次执行,这个状态的代码还处于一个没有灵魂的状态
流程控制是让代码实现 判断分支 和 重复执行 的核心,加入流程控制之后,我们的代码就可以处理复杂的逻辑需求了
而流程控制一般又有条件控制和循环控制
条件控制语句(if-elif-else)
条件控制语句可以让程序根据不同的条件执行不同的代码
基础语法规则如下
# 单分支:满足条件才执行if条件表达式:# 条件表达式返回布尔值(True/False),末尾必须加冒号代码块# 缩进(4个空格/Tab)表示属于if的代码块# 双分支:二选一执行if条件表达式:满足条件的代码块else:不满足条件的代码块# 多分支:多选一执行if条件1:代码块1elif条件2:# 可写多个elif代码块2else:# 可选,所有条件都不满足时执行代码块3使用if语句时需注意以下几点:
- 条件表达式可以是直接的布尔值、比较运算、逻辑运算,甚至是任意能被隐式转为布尔值的对象(空字符串 / 0 / 空列表为 False,其余为 True);
- 代码块必须缩进;
elif和else不能单独使用,必须跟在if后面;- 多分支中只要一个条件满足,后续条件不再判断(执行完对应代码块就跳出分支)
话不多说,直接上代码:
以学生信息为例
age:年龄
score:分数
gender:性别
age=20score=88gender=0# 假设0表示女生,1表示男生# 可以通过以上内容输出这位同学的相关信息# 先判断是否成年print('是否成年:')ifage>=18:print('成年人')else:print('未成年人')# 再判断成绩的等级:A对应90以上,B对应80~89,C对应70~79,D对应60~69,E对应60以下print('该学生的成绩等级:')ifscore>=90:print('A')elifscore>=80:print('B')elifscore>=70:print('C')elifscore>60:print('D')else:print('E')# 最后判断学生性别,可以使用if else,也可以使用2个if判断print('该学生的性别:')ifgender==0:print('女')ifgender==1:print('男')结果如下:
是否成年: 成年人 该学生的成绩等级: B 该学生的性别: 女三元表达式写法:
# 结果1 if 条件 else 结果2# 如果条件为真取结果1,否则取结果2age=12result='成年'ifage>=18else'未成年'print(result)结果如下:
未成年循环控制(for、while)
循环是指:如果指定的条件成立,就会一直执行想要执行部分的代码,直到条件不成立或者在循环体中手动写一个中断,程序才会停止运行
外面想要重复执行的那部分代码称之为:循环体
while循环
while条件表达式:# 条件为True时,重复执行代码块循环体(缩进代码)# 必须有让条件最终变为False的逻辑,否则会陷入死循环注意避免死循环(代码会一直执行,终止条件处于不可到达的状态)
示例代码:
- 实现一个计数代码,输出1~100所有的数
如果不采用循环的,我们就需要一直使用print,从1~100写100条print,显然有点呆了
具体实现如下
a=1whilea<=100:print(a)a+=1# 每次输出完之后,让a+1,否则会一直输出1,并且不会退出- 给定一个数字,我们通过输入的方式,将我们猜的数字反馈给程序,程序根据我们输入的数字给我们反馈,直到猜到指定数字
secret_num=6whileTrue:# 先无限循环# input 用于从控制台接收输入的数据,每次输入数据后回车输入数据guess=int(input("猜1-10的数字:"))ifguess==secret_num:print("猜对了!")break# 猜对后终止循环elifguess<secret_num:print("猜小了")else:print("猜大了")结果如下:
猜1-10的数字:4 猜小了 猜1-10的数字:9 猜大了 猜1-10的数字:5 猜小了 猜1-10的数字:6 猜对了!for
遍历「可迭代对象」(列表、字符串、字典、range 序列等),逐个取出元素执行循环体,是 Python 中最常用的循环。
for变量名in可迭代对象:循环体(每次循环,变量名会被赋值为可迭代对象的下一个元素)示例代码:
# 遍历字符串(逐字符输出)forcharin"Python":print(char)# 输出:P、y、t、h、o、n# 遍历列表(逐个输出元素)fruits=["苹果","香蕉","橙子"]forfruitinfruits:print(f"我喜欢吃{fruit}")# 遍历range序列(生成数字范围,最常用)# range(开始, 结束, 步长):结束值不包含,步长默认1foriinrange(1,6):# 生成1、2、3、4、5print(i)foriinrange(0,10,2):# 生成0、2、4、6、8print(i)# 遍历字典(默认遍历键,可指定遍历值/键值对)student={"name":"小明","age":18,"gender":"男"}# 遍历键forkeyinstudent:print(key,student[key])# 输出:name 小明;age 18;gender 男# 遍历键值对fork,vinstudent.items():print(f"{k}:{v}")具体结果如下:
P y t h o n 我喜欢吃苹果 我喜欢吃香蕉 我喜欢吃橙子1234502468name 小明 age18gender 男 name:小明 age:18 gender:男循环控制辅助语句(break/continue/pass)
这三个语句用于在循环中精准控制执行流程,是循环的 “辅助开关”。
| 语句 | 作用 |
|---|---|
break | 立即终止整个循环,跳出循环体,后续循环不再执行 |
continue | 跳过本次循环的剩余代码,直接进入下一次循环的条件判断 |
pass | 空语句,仅作为 “占位符”(语法上需要代码块但暂时无逻辑时用,不影响执行) |
示例代码:
# :break(终止循环)foriinrange(1,6):ifi==3:break# 当i=3时,终止整个循环print(i)# 输出:1、2(3及之后不执行)# continue(跳过本次循环)foriinrange(1,6):ifi==3:continue# 跳过i=3的打印,直接进入下一次循环print(i)# 输出:1、2、4、5(3被跳过)# pass(占位符)foriinrange(1,6):ifi==3:pass# 暂时无逻辑,先占位,不影响循环执行print(i)# 输出:1、2、3、4、5(无任何影响)# while中使用break/continuei=1whilei<=5:i+=1ifi==3:continue# 跳过i=3的打印ifi==5:break# 终止循环print(i)# 输出:2、4结果如下:
1212451234524流程控制嵌套
分支和循环可以互相嵌套,实现复杂逻辑(比如 “循环里加判断”“判断里加循环”“循环嵌套循环”)
- 筛选一定范围内的偶数
nums=[1,2,3,4,5,6]fornuminnums:ifnum%2==0:print(f"{num}是偶数")else:print(f"{num}是奇数")结果打印如下:
1是奇数2是偶数3是奇数4是偶数5是奇数6是偶数- 实现九九乘法表
# 外层循环控制行数(1-9)foriinrange(1,10):# 内层循环控制每行的列数(1-i)forjinrange(1,i+1):print(f"{j}×{i}={i*j}",end="\t")# end="\t" 不换行,用制表符分隔print()# 每行结束后换行效果如下:
1×1=11×2=22×2=41×3=32×3=63×3=91×4=42×4=83×4=124×4=161×5=52×5=103×5=154×5=205×5=251×6=62×6=123×6=184×6=245×6=306×6=361×7=72×7=143×7=214×7=285×7=356×7=427×7=491×8=82×8=163×8=244×8=325×8=406×8=487×8=568×8=641×9=92×9=183×9=274×9=365×9=456×9=547×9=638×9=729×9=81python绘制爱心
代码实现:
# 定义爱心的数学函数(心形线方程)foryinrange(15,-15,-1):line=""forxinrange(-30,30):# 心形线方程:((x*0.05)^2 + (y*0.1)^2 - 1)^3 - (x*0.05)^2 * (y*0.1)^3 <= 0formula=((x*0.05)**2+(y*0.1)**2-1)**3-(x*0.05)**2*(y*0.1)**3ifformula<=0:# 在爱心内部填充字符line+='*'else:# 爱心外部填充空格line+=' 'print(line)实现效果自行尝试哦