04 流程控制(01)
本章内容
1、布尔逻辑
2、if语句
3、代码块和缩进
4、循环
5、比较for循环和while循环
6、跳出循环和语句块
7、循环中的循环
------------------------------------------------
之前所写的简单代码都是直线式的,前后代码之间并没有逻辑关系;也没有判断,也没有分支,而这一章中,我们需要初步来讨论代码之间的逻辑关系;
1、布尔逻辑
我们使用True和False来对任何参数或者语句进行判断,这个就是布尔逻辑值;
逻辑运算符号有四个:not、and、or、== 分别表示“非、与、或、等于”,所有的决策都可以通过这四个运算符号来做出;
逻辑相等
== 判断左右两边的值是否相等
逻辑与
and 两者同时为真的时候才是真
逻辑或
or 如何一个为真的,就是真,同时为假的时候才是假
逻辑非
not 结果反向即可
通过布尔变量来值来进行if语句的判断;
如果是多个布尔值进行判断,我们则需要通过圆括号来分开进行嵌套;
not (True and True) not (True and (False or True))
默认情况下如果没有使用括号分开,则有优先级指定: == > != > not > and > or
短路求值:例如shell脚本中 a && b || c ; 如果 a && b 为真,则不用再执行 c 也能算出结果为真,如果 a && b 为假,才需要判断 c;
Python下的短路求值是一个道理,False and X 中,X 语句不用再进行判断,则该语句一定为 False;同理,在语句 True or X 语句中,不用查看 X 值,语句结果一定是 True;
【注意:短路求值对我们运行程序很有帮助,但是有时候也会出现我们想象不到的bug】
2、if语句
if语句能够让Python程序具有执行流程,它能让你在程序中做出决策;在程序运行的过程中,选择程序代码块来执行;
if/else语句:
检查密码的程序:
# password1.py pwd = input('What is the password?') #定义变量pwd,输入密码 if pwd == 'apple': # note use of == #进行判断,密码是否等于 apple # instead of print('Logging on ... ') else: print('Incorrect password.') #如果不匹配,输出密码不正确 print('All done!')
【注意:如果是if语句,则后面一定是布尔表达式,则判断结果一定是布尔值类型】
if/else语句的基本格式如下:
语句格式如下:
before_block if cond: true_block else: false_block after_block
if/elif语句
这个语句是if/else的推广;这个语句下面可以进行多个判断;例如:
# airfare.py age = int(input('How old are you?')) if age <= 2: print(' free') elif 2 < age < 13: print(' child fare') else: print(' adult fare')
这个语句下则可以进行多个判断,类似于“选择题”,有四个选项,不仅仅只有两个选项了;
if语句的简写
这种方式并不推荐,因为这样对于查看代码的人来说,非常困难,如下面的代码:
food = input("What's your favorite food? ") reply = 'yuck' if food == 'lamb' else 'yum'
这个代码等于如下代码:
food = input("What's your favorite food? ") #输入food的值 if food == 'lamb': #判断food的值是否等于‘lamb’ relply = 'yuck' else: reply = 'yum'
3、代码块与缩进
Python相对于其他语言而言,我们使用缩进来标识代码块。如下代码:
if pwd == 'apple'": print('Logging on ... ') else: print('Incorrect password.') print('All done!')
这里 print('Logging on ... ') 的代码必须缩进,才能识别;
而,print('All done!')则没有缩进,因为它并不属于if的代码块;
这里注意,缩进可以使用 两个空格的方式,也可以使用 制表符 的方式,但是不要混合使用,建议使用制表符进行缩进;这样的话,会让你的代码变得更加美观;
4、循环(for循环和while循环)
循环用于运行重复的代码;主要有两种循环--for循环和while循环;for循环更加容易,而while循环更加灵活;
for循环:
首先让我们看一段代码:
# count10.py for i in range(10): #in 为关键字【注意:每次循环理论上都是从0开始,在执行到n-1,也就是,从0开始到9】 print(i)
for i in range(5,10): #这里打印5到9 print(i)
如果就要打印1-10,则可以使用如下代码来解决
for i in range(11): print(i) 或者 for i in range(10): print(i+1)
如果想反序打印,则需要使用步长来解决,如下代码:
for in range(10,0,-1): print(i) 或者不使用步长 for i in range(10): #【代表了不同的思维方式】 print(10 - i)
while循环:
我们先看一段代码:
# while.py i = 0 while i < 10: print(i) i = i + 1 # add 1 to i
该代码的流程图如下:
第一行 i = 0 我们叫做初始语句,定义 i 值的初始值;最后一行为 i = i + 1 这段使得 i 值不断变化,否则,容易出现死循环;**几乎所有的while语句都是需要初始值和递增语句的;
基于上面的条件,while语句的基本语法格式就出来了,如下图:
基本代码格式如下:
initializer_block while cond: body_block after_block
while循环要灵活的多,在while循环前面,你可使用任何代码来完成任何必要的初始化。循环条件可以是任何布尔表达式,递增语句可放在while循环体内的任何位置,并让它做任何你喜欢的事情;
while循环会形成无限
while True: print('spam')
这个循环下面,运行起来的话,就只能一直循环,无法停止;
很多情况下,尽量使用for循环来完成对应的工作,而尽量不要使用while循环语句;
while循环也可以包含为else,但是在这里不做讨论了;
循环,例如: