1-流程控制语句

前言

流程控制语句在Python中包括三个部分。顺序执行语句、分支执行语句(或称条件语句if/else)和循环语句(for/while),如下图所示:

条件语句

条件语句,即通过一个或多个条件的成立与否(true或false)决定执行哪些代码块。
Python中if语句用于控制程序的执行,基本形式为if/else:

if 判断条件:  
    执行的代码块1  
else:  
    执行的代码块2  

执行的流程是:当表达式的布尔值为真时,执行代码块1,为假时执行代码块2。
注意,冒号的下一行的缩进(四个空格)必须存在,用来标识执行代码的归属,两个代码块只能有一个被执行,这取决于哪个分支的条件成立。
示例:

score = input("enter score:")  
if score > '60':  
    print('成绩合格')  
else:  
    print('成绩不合格')  

注意,if语句,可以单独使用,无论if条件执行与否,程序都会往下继续执行,如果if条件成立,执行其中的代码块,执行完毕,继续往下执行,如果if条件不成立,则程序直接往下执行。
但上例并不完美,如果输入一个超出范围的数字怎么办(如输入1000,-5)?所以,仅靠两个判断肯定不够,我们还要增加其他的条件来限制,使程序更加丰满。
if/elif/else语句完美的解决了这个问题。先来了解该语句的基本形式。

if 表达式1:  
    执行的代码块1  
elif 表达式2:  
    执行的代码块2  
elif 表达式3:  
    执行的代码块3  
......  
else:  
    执行的代码块n  

这种多分支语句的功能,即在多个条件下的不同分支中选择一个分支代码块来执行。
执行流程:若表达式1为真,则执行代码块1,若为假,则继续判断表达式2、判断表达式3,为真则执行其中一个代码块,若都为假,则执行最后的else语句的代码块。
让我们完善上面的成绩的例子:

score = int(input("enter score:"))  
  
if score > 100 or score < 0:  
    print('你可能输入了一个来自火星的成绩 %s'%score)  
elif score >= 90:  
    print('成绩优秀')  
elif score >= 75:  
    print('成绩良好')  
elif score >= 60:  
    print('马马虎虎吧')  
else:  
    print('成绩不合格')  

注意,为什么input函数要放在int函数内,还记得之前讲input的时候,说过input函数返回的是str类型么?因此,这里要转换为int类型,不然无法和int类型的成绩做判断。但这就限制了input的输入类型了,比如你输入你的名字就不行了,因为int函数无法转换。
if语句支持很多运算符来丰富条件语句,如比较运算符、成员运算符、逻辑运算符、算数运算符等。

if 3 + 2 == 5:  
    print('ok')  
if 'a' in 'abc':  
    print('ok')   

if嵌套
再来看if语句的嵌套形式。
有时候,一个条件成立无法满足需求,那么就要用到if 的嵌套语句了,先看基本形式。

if 今天下雨:  # 代码块1,其内部的if语句无论多复杂,都属于代码块1
    if 下小雨:  # 分支条件
        骑车回家  # 如果该分支条件成立,执行的代码块
    else:  
        打车回家  # 分支条件不成立执行的代码块
else:  # 代码块2,当代码块1条件不成立时执行的代码块
    走回家  

执行过程:上述逻辑就是根据今天是否下雨判断,如果今天不下雨,则执行第6行的else。而如果今天下雨这个条件成立,程序就进入代码块1中,此时,程序会再次判断根据子条件作出判断,是否是下小雨,如果是下小雨,则骑车回家,否则无论什么什么情况都是打车回家。执行过程如图2.15所示。

注意:if语句的嵌套不易过多,这样会降低代码的可读性。
我们通过示例来进一步理解if的嵌套形式,首先来看示例1:

num = int(input(">>>"))  
if num < 10:  
    if num == 3:  
        print('输入正确')  
    else:  
        print('再接再厉')  
else:  
    print('输入错误')  

上例中,首先在第1行获取用户的输入,为了后续判断,直接将字符串类型的值转换为整数类型。当用户在输入数字后,程序执行第2行的if判断,如果输入的数值小于10,程序执行该if语句中的代码块,进入子条件判断,如果输入的值等于3,打印“输入正确”,否则打印“再接再厉”。如果输入的值大于10,则直接执行第7行的语句,打印“输入错误”。
再来看示例2:

num = int(input('请输入一个数字:'))    
if num < 10:    
    if num < 5:    
        print('你输入的 %s 比 5 小' % num)    
    elif num > 5:    
        print('你输入的是 %s 比 5 大' % num)    
    else:    
        print('good,输入正确 %s' % num)    
else:    
    print('老铁别乱来:%s' % num)  

上例中,在第一个示例的基础上,增加了子条件判断,如果输入的数值小于10,进入第3~8行的子条件判断语句块。如果这个值小于5提示“你输入的值比5小”,至于“%s”会将你输入的值填入到打印的句子中,后续章节会详细讲解。如果输入的值大于5则提示“你输入的值比5大”。只有当输入的值是5的时候,才会提示“good,输入正确”。如果最开始输入的值比10大,程序执行第9行的语句块,提示“老铁别乱来”。
接下来,我们再了解一种不推荐的写法:

num = int(input(">>>"))  
if num == 3: print('输入正确')  

我们不推荐这种写法,因为在一个物理行上写多个逻辑行代码,这样会降低代码的可读性。

循环语句之while循环

循环语句,顾名思义,就是一个语句可以被重复执行多次,Python为循环语句提供两种循环方式:while循环和for循环。先来看while循环,其语法基本形式如下。

while 表达式:  
    循环体  

示例,我们打印oldboy三次:

>>> count = 0  
>>> while count < 3:  
...     print('oldboy')  
...     count += 1  
...  
oldboy  
oldboy  
oldboy  

执行流程:
count的初始值为0,进入while循环,第一次判断表达式成立,执行循环体:

print('oldboy')  
count += 1  

执行完毕,count=1。再次进入循环,条件仍为真(count<3),继续执行,每次count的值都会加1,直到第三次,count=3,进入循环判断,此时表达式条件为假,直接退出循环,程序往下运行(由于后面没代码,所以程序结束)。
接下来我们先试着通过while循环计算1+2+3+……+100的值:

count = 0   # 循环中的变量
sum = 0   # 用于求和
while count < 100:  # 当count小于100的时候,while循环执行
    count = count + 1
    # print(count)  # 每次count值都会加一
    sum = sum + count  # sum都会加上count值
print(sum)
# 或者简写为下面这种方式
count = 0
sum = 0
while count < 100:
    count += 1
    sum += count
print(sum)

上例,首先定义两个变量,初始值都为0,第一次循环,首先执行第4行的count加1操作,然后第5行的sum加上此次循环count值等于1。第二次count值为2,sum值为1,执行第4~5行的赋值操作,此时sum在原来的基础上加上count值为3。在每次循环中,count都加上1,而sum则都加上count值,最后当count等于100的时候,while循环结束。执行第7行的打印,我们就能得出最终的sum值。
循环还有一种形式,我们称为死循环(或无限循环)。例如,while的布尔值不变,程序就会陷入死循环。

while True:  
    print('ok')  

注意:如果运行上例代码,就会发现程序是不是停不下来了?没错,这就是死循环。我们在编写代码的时候后,如无必要,应注意避免死循环的产生。

循环语句之for循环

Python的for循环可以遍历任何序列类型,如下一章我们重点讲的列表、字典、字符串,而不是像while一样通过条件判断实现的循环。

for循环的基本形式为:

for 变量(i) in 可迭代对象:  
    循环体  

执行过程:

将迭代对象的第一个元素赋值给变量i,然后执行一次循环体;执行结束后,再将迭代对象的第二个元素赋值给变量i,再执行一次循环体.....直到取出迭代对象的所有元素。

关键点:循环次数取决于迭代对象内有多少元素。

有了for循环,我们在处理序列类型的数据就方便多了,比如循环打印一串字符串的每个字符。

str1 = 'oldboyisstrongman'  
for i in str1:  
    print(i)  

执行流程:

在for循环的时候,先将可迭代对象,即字符串中的第一个字符o赋值给变量i,然后执行循环体,打印这个字符,然后进入第二次循环,将字符串中的第二个字符l再次赋值给变量i,再执行打印,以此类推,循环打印整个字符串。

关于for循环的更多细节,我们会在后续的章节中展开讲解。我们暂时会用即可。

循环嵌套

在Python中,我们可以在while循环中嵌套while循环,也可嵌套for循环。反之,我们也可以在for循环中嵌套for循环,也可以嵌套while循环。

count = 0
while count < 3:
    num = 0
    while num <= 3:
        print('*' * num)
        num += 1
    count += 1

break语句

break语句用来终止循环语句,即使循环条件依然成立,碰到break语句也会终止循环。

break语句用在for和while循环中,如果当前的循环是嵌套类型的循环,break语句将停止执行包含break语句的循环。

示例,打印字符串,遇到h时终止循环。

for i in 'python':
    if i == 'h':
        print(i)
        break
    print(i)

执行流程:

for循环字符串,拿到第一个字符赋值给i拿去和if做判断,条件为假,不执行if内的代码块,而是往下执行,输出这个字符,程序进入第二次循环,依次作比较,当拿到的字符符合if的条件时,执行if内的代码块,打印这个字符,然后遇到break语句,结束循环,程序也随之结束,不执行后面的代码。

来看break在嵌套循环中的应用:

count = 0
while count < 3:
    for i in 'python':
        if i == 'h':
            print(i)
            break
        print(i)
    if count == 2:
        break
    count += 1

"""
p
y
t
h
p
y
t
h
p
y
t
h
"""

正如上例所示,在while循环中的for循环内,每次打印到h的时候,for循环都会结束,但此时的while循环不会结束,也就是说,当执行打印到h的时候,break结束的是包含它的for循环,而不会结束最外层循环的while循环。而在while循环中,当count等于2的时候,break结束的是while循环,而不是for循环。

所以说,在嵌套循环中break结束的是包含break语句的循环。说白了,break结束的是它所属的上一层代码块。

continue语句

break语句结束所在循环,而continue语句则是结束当前循环执行的剩下的代码,继续执行下次循环。continue语句在for和while循环中都适用。

for i in 'python':
    if i == 'h':
        continue
    print(i)

执行流程:

for循环字符串,拿到第一个字符赋值给i拿去和if做判断,条件为假,不执行if内的代码块,而是往下执行,输出这个字符,程序进入第二次循环,依次作比较,当拿到的字符符合if的条件时,执行if内的代码块,continue跳出本次循环,结束了本次循环,程序继续往下执行,循环打印剩下的字符。

小结:通过两个例子,对比学习break语句和continue语句的区别,一句话总结两个语句,break语句跳出整个循环,程序结束执行后续的代码,跳出循环;而continue语句只结束当前循环执行的代码,但程序会继续往下执行,并不会结束。

pass语句

pass语句意为正在等待完成的任务或功能。就是说pass是空的语句,不执行具体的功能,只是为了保持程序的完整性,比如我们要实现一个登录登出的功能,是不是先定义有这两个功能的程序,我们着手写登录的功能,把登出的功能先放那,不完善具体的登出细节,就用到了pass语句了,后面我们在程序中会用到pass语句。记住一句话,pass是空语句,保证程序的完整性,我们有这个功能,但这个功能的细节,我们先不做描述。

i = 0  
while i < 10:  
    if i == 3:  
        pass  
    print(i)  
    i += 1  

上面的代码示例中,pass语句这个代码块,意思就是我还没想好要干啥,但什么都不写程序不完整,无法执行,所以用到了pass空语句。


欢迎斧正,that's all
posted @ 2019-07-18 00:16  听雨危楼  阅读(592)  评论(0编辑  收藏  举报