前言
前两篇文章 python学习——【第一弹】和python学习——【第二弹】中我们了解了python中的基本数据类型以及运算符相关知识,这篇文章我们接着学习python中的流程控制语句。
流程控制指的是代码运行逻辑、分支走向、循环控制,是真正体现我们程序执行顺序的操作。流程控制一般分为顺序执行、条件判断和循环控制。
顺序执行
顺序执行顾名思义就是按照程序的顺序从上到下,从左至右依次执行,
![python学习——【第三弹】_python](https://s2.51cto.com/images/202302/59a635200fa2ace01e0521abc066a5789ddb59.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
顺序执行中我们需要遵循的原则有:
1:普通语句直接执行
2:遇到函数以及方法调用时,需要将函数体载入内存,执行函数内部代码,执行完毕后继续执行原有顺序代码
3:遇到类,需要执行类内部的普通语句,但是类的方法只载入,不执行
4:遇到if、for等控制语句,要按照控制流程执行
5:遇到@,break,continue等,按照规定语法执行
条件判断
在进行条件判断的介绍之前,我们先了解一下对象的布尔值
布尔值,是一个特殊的数据类型,只有True和False两种,用来检测一个条件是否成立;当条件成立则会转换成True,否则为False,从而决定了条件判断结果的真与假。
print('-------------以下对象的布尔值均为false-------------')
print(bool(False)) #结果为false
print(bool(0)) #结果为false
print(bool(0.0)) #结果为false
print(bool(None)) #结果为false
print(bool('')) #结果为false
print(bool("")) #结果为false
print(bool([])) #表示空列表,结果为false
print(bool(list())) #表示空列表,结果为false
print(bool(())) #表示空元组,结果为false
print(bool(tuple())) #表示空元组,结果为false
print(bool({})) #表示空字典,结果为false
print(bool(dict())) #表示空字典,结果为false
print(bool(set())) #表示空集合,结果为false
print('--------------其他对象的布尔值均为true--------------')
里面会有一些这篇文章没有涉及到的元素名称,比如元组,列表,字典等,后面的文章会给大家一 一 介绍~
条件判断有三种结构:单分支结构,多分支结构,if嵌套
1:单分支结构
money=10000
s=int(input('请输入取款余额:'))
# 判断条件是否充足
if money>=s:
money=money-s
print('取款成功'+'余额为:',money)
![python学习——【第三弹】_条件判断_02](https://s2.51cto.com/images/202302/a75eaa5779752b82a8325447221e4097a5a7fd.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
2:多分支结构
双分支结构:
# 键盘录入一个整数 编写程序让计算机判断是奇数还是偶数
num = int(input('请输入一个整数:'))
if num % 2 == 0:
print(num, '是偶数')
else:
print(num, '是奇数')
![python学习——【第三弹】_条件判断_03](https://s2.51cto.com/images/202302/a8c006358d285cb2396845eb89f6e95ea3f694.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
多分支结构
#编写一个成绩判断器
score =int(input('请输入您的成绩'))
if score>=90 and score<=100:
print('A')
elif score>=60 and score<=89:
print('B')
elif score>=0 and score<=59:
print('C')
else:
print('请输入合法成绩')
# 写法二 在python中可以用数学的形式表示成绩范围
score1=int(input('请输入您的成绩'))
if 90<=score<=100:
print("A")
elif 60<=score<=89:
print("B")
elif 0<=score<=59:
print("C")
else:
print("请输入合法成绩")
![python学习——【第三弹】_python_04](https://s2.51cto.com/images/202302/d4b2b61172fa745275f997c44bea3a0ae34541.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
3:if else 嵌套
# 超市会员系统
money=float(input('请输入您的花销:'))
answer=input('请问您是会员吗,是请输入\"y\" ,不是请忽略')
if answer=='y':
if money>=200:
money=money*0.9
print('您的消费为:',int(money))
elif money<=100:
money=money*0.95
print('您的消费为:',int(money))
else:
if money>=200:
money=money*0.95
print('您的消费为:',int(money))
elif money<=100:
print('您的消费为:',int(money))
![python学习——【第三弹】_python_05](https://s2.51cto.com/images/202302/9933b0e03fb6e2ac979208f89b96b3894a5ebf.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
4:补充与注意事项
- 在python中有 pass 占位符,当我们在编写判断语句时,可以使用 pass占位符来保持程序结构的完整性:
![python学习——【第三弹】_python_06](https://s2.51cto.com/images/202302/c8f7d6f56861bc8a7571846c2c25ef433c8b69.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
2.在其他语言中我们可以使用三元运算符来简化 if 判断语句,在python中我们也可以适当使用三元运算符来简化我们的代码:
# 从键盘中录入两个整数 比较两个整数的大小
num1=int(input('请输入第一个整数:'))
num2=int(input('请输入第二个整数:'))
if num1>=num2:
print(num1,'大于等于',num2)
else:
print(num1,'小于',num2)
# 利用三元运算符编写
num3=int(input('请输入第一个整数:'))
num4=int(input('请输入第二个整数:'))
print((str(num3)+'大于等于'+str(num4)) if num3>=num4 else (str(num3)+'小于'+str(num4)))
![python学习——【第三弹】_条件判断_07](https://s2.51cto.com/images/202302/7772d0781a404d3698e029a0957b223d9f560b.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
注意事项
1.在python中对代码的缩进敏感,当我们使用 if....else 语句进行条件判断时,特别要注意相同的缩进代表的是同一个代码块;有时缩进的不同实现的功能也会不相同,甚至抛出错误,因此在编写代码时要特别注意。
缩进导致结果不同:
isPrint = False
if isPrint: #当判断为True时执行下列代码
print('输出:',"A")
print('输出:',"B")
# 程序运行后没有信息输出
# 例2-2:
isPrint = False
if isPrint:
print('输出:',"A") #如果条件是True时执行
print('输出:',"B") #如果条件判断是False时执行
# 程序运行后会输出一个字符 “B”
![python学习——【第三弹】_python_08](https://s2.51cto.com/images/202302/e77d0385596f80a3f482282a55c1f479105b12.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
缩进导致运行出错:
![python学习——【第三弹】_缩进_09](https://s2.51cto.com/images/202302/d6b6d2948d8c7a58d8a995697453d75c0c7baa.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
2.一般来说,if如果为假,则会执行else,不过也可以使用elif,当if为假的时候,会再次去判定elif是否为真,如果elif也为假,则会执行else。
3.再一个就是在编写代码时不要忘记在条件判断体后的英文状态下的 冒号 :
以及分清赋值运算符 = 和比较运算符 ==
循环控制
python中提供了 for循环和 while循环;以及循环控制语句 break语句,continue语句和pass语句
在循环控制代码的编写中同样要注意代码块的缩进!
1:while循环
在给定的判断条件是true时执行循环体,否则退出循环;那么 while 循环和前面提到的 if 判断语句有什么不同呢:条件判断语句 if是判断一次,若条件为True就执行if 包含的代码块;while 循环是判断N+1次,条件为True时执行N次(关于while 循环判断和执行的次数问题,接下来会通过对程序的调试去直观的理解)
在编写循环控制程序时,我们可以按照这四步来:
1.初始化变量
2.条件判断
3.条件执行体
4:改变变量
注意:初始化的变量和条件判断的变量以及改变的变量是同一个
1.实现0--5之间的数的相加
#初始化变量
num1=0
sum1=0 #sum1用于存放变量相加的结果
#条件判断
while num1<=5:
#条件执行体
sum1+=num1
#改变变量
num1+=1
print('0--5之间的数相加和为:',sum1)
![python学习——【第三弹】_python_10](https://s2.51cto.com/images/202302/e733e963879b7f0644f928b49bca842a41370e.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
调试分析
![python学习——【第三弹】_条件判断_11](https://s2.51cto.com/images/202302/39afe4a859c9cd96164862434d06c1c99326a7.gif)
通过调试,我们可以发现 while循环是会先通过判断条件来判断变量是否满足循环,那么此时循环还未开始就已经判断过一次了,直到不再满足循环条件才会跳出循环,这也就是为什么判断次数要比循环次数多一次。
2.计算1--100之间的偶数和
#初始化变量
num2=0
sum2=0
#条件判断
while num2<=100:
#条件执行体
if num2%2==0:
sum2+=num2
#改变变量
num2+=1
print('1--100之间的偶数和:',sum2)
![python学习——【第三弹】_python_12](https://s2.51cto.com/images/202302/3436f15079a3f9a03fd5453b8665bff839b133.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
![python学习——【第三弹】_缩进_13](https://s2.51cto.com/images/202302/897b4a2170c7997d5492187d5279ec93d665c2.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
2:for循环
通常情况下是与in搭配使用,为for -- in 循环。in 表示从字符串、序列等中依次取值,又叫做遍历;
for -- in循环遍历的对象必须是可迭代对象;
其语法结构是:for 自定义变量 in 可迭代对象:循环体
如果在循环体中不需要自定义变量 可以将自定义变量写为“_” 即for _ in 可迭代对象:循环体,如:
![python学习——【第三弹】_python_14](https://s2.51cto.com/images/202302/1208c8b544d058b59ef35276e5eaa549edfa71.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
1.遍历字符串
for item in 'python':#第一次取出来的是p,将p赋给item,依次取并赋给item后打印;该字符串就是可迭代对象
print(item)
2.使用for循环 打印出1--100之间的偶数和
sum=0
for item in range(1,101):
if item%2==0:
sum+=item
print('1--100之间的偶数和是:',sum)
#1--100之间的偶数和是: 2550
这里我们用到了python中的一个内置函数 range()
range() 函数用于生成一个整数序列,返回的是一个迭代器对象;创建range()函数的三种方式:
1.range(stop) 创建一个[0,stop)之间的整数序列,步长默认是1
2.range(start,stop) 创建一个[start,stop)之间的整数序列,步长默认是1
3.range(start,stop,step) 创建一个[start,stop)之间的整数序列,步长是step
range()函数中的start起始元素取得到,但是stop终止元素取不到。
# range()的三种创建方式
num1=range(10) #默认从0开始,相邻两个数之间相差1叫做步长
print(num1,type(num1))#range(0, 10) <class 'range'>
print(list(num1),type(num1))#[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] <class 'range'>
num2=range(1,10)
print(num2)#range(1, 10)
print(list(num2))#[1, 2, 3, 4, 5, 6, 7, 8, 9]
num3=range(1,10,2)
print(num3,list(num3))#range(1, 10, 2) [1, 3, 5, 7, 9]
# in 和 not in 判断元素是否存在于该指定序列
print(10 in num2)#False
print(9 not in num1) #False
使用range()函数的优点:无论range对象表示的整数序列有多长,所有range对象占用的内存空间是相同的。
3.输出100---999之间的水仙花数
# 水仙花数:abc=a*a*a+b*b*b+c*c*c
for num in range(1,1001):
gewei=num%10
shiwei=num//10%10
baiwei=num//100
if gewei**3+shiwei**3+baiwei**3==num:
print('水仙花数为:',num)
![python学习——【第三弹】_python_15](https://s2.51cto.com/images/202302/b2b682a065691a1817264293200f3fddb42483.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
4.输出一个直角三角形
for i in range(1,10):#产生由1--9个数,表示所在行
for j in range(1,i+1):#表示所在列,代表在每一行循环执行i次,并打印出i个‘*’和i个‘-’
print('*',end='-')
print()#换行
![python学习——【第三弹】_python_16](https://s2.51cto.com/images/202302/b148b2668b539a4f7673002393558fd2625a87.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
5.打印九九乘法表
for i in range(1,10):#代表从1--9行,因此出现了下面的i+1列
for j in range(1,i+1):
print(i,'*',j,'=',i*j,end='\t')#打印九九乘法表
print()
![python学习——【第三弹】_缩进_17](https://s2.51cto.com/images/202302/66a49198131dd2f4b471946d8f077aed157dfe.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
3:break 和 continue
在执行 while 循环或者 for 循环时,只要循环条件满足,程序将会一直执行循环体,不停地转圈。但在某些场景,我们可能希望在循环结束前就强制结束循环。python中提供了 2 种强制离开当前循环体的办法:
1.只用 break 语句,可以完全终止当前循环。
2.使用 continue 语句,可以跳过执行本次循环体中剩余的代码,转而执行下一次的循环。
1.从键盘中录入密码 最多录入3次 如果正确就结束循环
#for循环
for item in range(3):
pwd=input('请输入密码')
if pwd=='8888':
print('密码正确')
break #跳出当前循环,结束循环
else:
print('密码不正确')
#while循环
a=0
while a<3:
pwd=input('请输入密码')
if pwd=='8888':
print('密码正确')
break
else:
a+=1
print('密码不正确')
![python学习——【第三弹】_缩进_18](https://s2.51cto.com/images/202302/850593b022eac5b18d672672df757fe7314e95.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
2.输出1--50之间所有5的倍数
for item in range(1,51):
if item%5!=0:
continue
print(item)
![python学习——【第三弹】_条件判断_19](https://s2.51cto.com/images/202302/25e434f06616b09fb7444871d5f7f75479251d.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
4:pass语句
pass语句的用法和在if条件判断中的用法类似,都代表一个占位符,这里就不一 一赘述了。
每篇一语
变聪明的方法就是学习!
如有不足,感谢指正。