打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Python流程控制-if语句
编程序的目的通常是解决问题,现在我们已经可以让计算机按顺序执行(从上至下依次执行)指令了。但实际处理问题时有些需要进行选择性的执行,有些程序还需要反复执行多次。简单说我们前面写的程序如果都是流水账的话,接下来我们掌握流程控制就可以随意控制程序的走向写出任何程序了。
还记得你的《英雄无敌》吗?没有流程控制的《英雄无敌》应该最多就只是个按顺序执行的故事吧?有了流程控制,你的游戏就可以更丰富灵活了,比如你可以让玩家选择行进的方向,也可以让游戏一直运行到“Game Over”或者用户决定退出时才结束。
比如下面这样的运行过程:
-*-welcome to Heroes world!-*-
input your name:milo
HI! milo You Hp is : 100
-*- the world is like this -*-
#######
the '*' is you
contrl your hero:| 'a'for left | 'd' for right |
you are here *######
go or quit:d
you are here #*#####
go or quit:d
you are here ##*####
go or quit:d
you are here ###*###
go or quit:d
you are here ####*##
go or quit:a
you are here ###*###
go or quit:a
you are here ##*####
go or quit:a
you are here #*#####
go or quit:quit
goodbey!!
4.1分支结构:if语句
分支结构的语法其实并不复杂,但是经过精确的设计和组合,可以解决很多看似复杂的问题,比如人工智能领域的决策树算法就是许多的分支结构构成的,你可以让计算机用决策树算法分辨出一个物体是椅子还是狗。
if语句是最基本的条件测试语句,通过条件表达式的结果选择执行指定的语句。判断对错是计算机最擅长的事,因为理论上计算机只认识0和1,而做为选择的判断依据就可以用0(假)和1(真)来表示。比如你的英雄在地图上是否移动就是二选一,当然你可能需要上下左右的移动这种复杂的选择,那就是多个选择,那就只需要通过将简单的选择进行组合就可以了。
if语句执行流程如下图所示:
图 if流程图
这个过程的意思就是,当主程序执行到if语句时就好像到了一个分岔路口,即表示要根据一个条件表达式的结果作出判断,如果这个表达式的返回值是True则选择其中一条分支,相反,如果是False则选择另一条,可以设置多个elif来增加条件,当通过判断后的语句块执行完毕后则回到主程序的其他语句继续执行。
4.1.1 if语法结构
if的语法形式比较灵活,可以根据实际问题灵活运用,主要是有四种形式。
1.条件执行
最简单的条件执行,语法结构为:
if 条件表达式:
语句体
if根据之后的条件表达式返回的布尔值来决定是否执行之后的语句体,布尔值为真则执行语句体,为假则什么都不做。为区别语句体与主程序,if之后的语句体需要缩进4个空格。这种类型的语句成为复合语句。在Python中需要缩进的地方没人都是用四个空格,当然,你也可以使用Tab,但是最好是设置tab的缩进量为四个空格,而且,千万不要空格和Tab混合使用,会造成很多麻烦。
语句体中的代码数量没有要求,有多行语句时需要保持一致的缩进量,但最少要有一行。如果在设计代码遇到一个语句体什么都不做(通常是标记一个我们还没来得及写功能代码的时候)。这时我们用pass语句,pass语句的作用就是什么都不做,我们称之为代码桩,只起到占位的作用。
if age > 18:
pass
2.选择执行
第二种形式是选择执行,这种情况就会产生分支效果,仍然是由条件表达式返回的布尔值来决定被执行的语句体,语法结构为:
if 条件表达式:
语句体
else:
语句体
这里多了一个else,当if的条件表达式为False的时候就会执行else的语句体。比如我们用程序来处理一个申请,申请人需要输入自己的年龄,满18岁才可以通过。代码就像这样:
age = int(input(“please input you age:”))
if age >= 18:
print('Enter')   #此处行首有4个空格
else:
print(”Sorry! Too young!”)
条件表达式20>=18返回值为True,所以屏幕上会打印Enter。
3.条件链
还有的时候,需要判断的条件不止一个这是我们需要更多分支。这时的语法形式叫条件链或者多分支:
if 条件表达式:
语句体
elif 条件表达式:
语句体
else:
语句体
比如我们要做计算器,就需要判断用户输入的运算符;
operator = input()
x = 1
y = 2
if operator == ' ':
print(1 2)
elif operator == '-':
print(1 - 2)
elif operator == '*':
print(1 * 2)
elif operator == '/':
print(1 / 2)
else:
print('opertor: - * /')
多了的elif其实就是“else if”,意思是否则再如果,使用的数量没有限制。所有的条件顺序执行,哪个条件为真则执行哪个语句体,如果所有条件都为真则只执行第一个。如果有else语句,只能放在最后。
4.嵌套
条件判断语句体内可以再嵌套条件语句,实际后面我们再学其他语法,我们都可以灵活嵌套,目的是解决问题。
比如我们做一个三分法,判断两个数字x和y的大小:
if x == y:
print('x and y are equal')
else:
if x < y:
print('x is less then y')
else:
print('x is greater than y')
这个程序中的第一个if产生两个分支,其中的第二个分支中又产生一个分支,区别的方式就是嵌套在内部的if相对于第一层整体进行了缩进。嵌套语句层数不宜超过3层,嵌套层数太多会让代码阅读起来非常困难。应该尽量避免。我们在逻辑运算符中会举些例子。
4.1.2布尔值与if
我们通过上面的小例子可以看到分支流程二选一的过程,而其中的关键因素就是给定的条件表达式,想让程序乖乖听话,这个表达式要准确地反映出你做判断的依据。
在条件表达式中需要理解的就是返回的布尔值,布尔值只有两个值,真和假。但得一提的是,虽然只有真和假,但表现形式可不仅仅是True和False或者1和0。
布尔表达式,会被解释器看作False的值:
1、None;
2、False;
3、任何为0的数字类型,如:0,0.0,0j;
4、任何空序列,如:'',(),[];
5、任何空字典,例如:{};
6、用户定义的类实例,如果类定义了__bool__()或者__len__()方法,并且该方法返回0或者布尔值False。
其它所有值被解释器看作True。
可以用bool来转换其它值为布尔值看一下效果,实际编程时不需要:
>>> bool('')
False
>>> bool('this is a test')
True
>>> bool(42)
True
>>> bool(0)
False
4.1.3逻辑运算符与if
有了布尔值,我们可以完成大多数的判断,但是碰到这样的问题呢?比如报考C1C2驾驶证的条件是满18岁小于70岁,这里有两个条件要同时满足才可以,这种情况我们有两种选择,一种是if语句嵌套实现,但是嵌套对于程序阅读来说不是很友好。另一种就是利用逻辑运算符,第二张中我们简单介绍了一下,逻辑运算符一共有三个:and、or和not。
1. 逻辑与
逻辑与的运算符and起到的作用是,只有左右皆为真时结果为真:
>>> True and True
True
>>> True and False
False
>>> False and False
False
前面提到报考驾驶证验证的例子就可以写成这样:
age = int(input(“please input you age:”))
if age >= 18 and age < 70:
print('Enter')
else:
print('Sorry!')
2. 逻辑或
逻辑或的作用是,or左右有一个为真,则结果为真,跟逻辑与的区别就在:
>>>True and False
True
比如我想判断一个是否是3或者5的倍数,符合条件的如3、5、6、9、15条件语句如下:
x%3 ==0 or x%5 == 0
3. 逻辑非
逻辑非的作用就是给布尔值作否定:
>>> not True
False
>>> not False
True
比如判断一个字符串不为空:
user_input = input('Your name:')
if not user_input:
print('your name is: ',user_input)
最后需要说明一点,and 和 or 运算有一条重要法则:短路计算。
1. 在计算a and b时,如果 a 是 False,则根据与运算法则,整个结果必定为 False,因此返回 a;如果 a 是 True,则整个计算结果必定取决与 b,因此返回 b。
2. 在计算 a or b 时,如果 a 是 True,则根据或运算法则,整个计算结果必定为 True,因此返回 a;如果 a 是 False,则整个计算结果必定取决于 b,因此返回 b。
所以Python解释器在做布尔运算时,只要能提前确定计算结果,它就不会往后算了,直接返回结果。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
条件判断
【Python基础知识】Python中的逻辑运算符
量化投资
Python条件判断
java三元运算符
Java语言程序设计与数据结构(基础篇)第3章 选择笔记
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服