这篇文章介绍python中的流程控制与异常处理。
python的if语句与其他编程语言最大的区别解释每个分支后面都需要添加一个说明号,请看下面的实例:
#!/usr/bin/env python3 #coding=utf-8 try: a=input("请输入整数0:") if int(a)==0: print("www.qingsword.com") elif int(a)>0: print("a大于0") else: print("a小于0") except ValueError as err: print(err) #这是一个简单的小程序,try...except语句用于捕获代码运行时的异常,也就是说,如果try中包含的语句执行出错,会跳转到except分支去匹配异常类型,本例仅提供了一种错误类型,即ValueError异常,当用户输入了一个非数字的时候,int(a)转换函数会抛出这个异常,这个异常会被print(err)语句打印在屏幕上,err是自定义的变量名,相当于ValueError异常信息的一个引用 #input()函数会挂起程序,等待用户的输入,根据用户的输入执行if判断,如果等于0则打印出本站网址,如果大于0则匹配elif分支,如果小于0则匹配else分支,if语句块中可以包含多个elif分支用来匹配不同情况,当所有情况都不匹配时匹配else分支,if语句从上往下依次执行每个分支,只要其中一个分支匹配成功,执行完分支下的语句后,立即跳出if语句块,不再匹配后面的分支(就算后面的分支能够匹配,也不执行)
python中有两种循环,while和for,请看下面的实例;
while循环实例:
#!/usr/bin/env python3 #coding=utf-8 #导入python自带的随机数生成器 import random #while后的条件为True就会一直循环 while True: #随机生成1到100中的一个数字 i=random.randint(1,100) #如果这个数字小于50,continue语句会让流程跳转到while开始处继续循环 if i<50: continue #如果大于等于50,打印出这个数字,break语句会终止并跳出循环 print(i) break #另一个while循环实例,num会从5递减,直到0时num大于0为假,终止循环 num=5 while num>0: print(num) num-=1
for循环实例:
#!/usr/bin/env python3 #coding=utf-8 #从元组中依次读取每个元素打印 for i in ("a","b","c"): print(i) #range()方法接受三个参数,分别为range(起始数字,结束数字,公差),当仅设置一个参时,起始数字默认为0,公差默认为1,本例i将从0读取到4,但不会包含4,所以打印出的数字应该是0,1,2,3 for i in range(4): print(i) #设置了起始数字为1,结束数字为4,打印出1,2,3 for i in range(1,4): print(i) #公差为2,打印出0到11之间的所有偶数 for i in range(0,11,2): print(i) #for循环依次读取列表数据的实例,len()计算出a的长度为3,range(3)相当于(0,1,2)这样的元组列表,print函数打印出列表中每个索引位置所对应的元素 a=["www.qingsword.com","晴刃","qingsword"] for i in range(len(a)): print(str(i)+"~"+a[i])
Ps:while循环中的continue和break语句同样适用于for循环。
关于异常处理的语句在if中已经简单演示过,try语句块和if一样,可以包含多个except分支用于捕获异常,在try末尾还能添加一个else分支,当没有捕获到异常时将会运行这个分支下的内容,可能有朋友会问:"我怎么会知道异常名称是什么?什么时候会发生什么异常?",当我们使用解释器运行程序的时候,总会遇见一些错误,发生错误时解释器会返回一个异常信息,其中就包含了异常名称,我们只需要将这些名称记录下来,然后使用except捕获他们即可,请看下面的实例:
#!/usr/bin/env python3 #coding=utf-8 d={1:"banana",2:"apple",3:"orange",4:"durian"} try: i=input("输入你需要的水果编号(1-4):") i=int(i) if i==1: print(d[i]) elif int(i)==2: print(d[i]) elif int(i)==3: print(d[i]) elif int(i)==4: print(d[i]) else: print(d[i]) except ValueError as err: print(err) except KeyError as err: pass else: print("未捕获到异常") #异常处理语句块可以包含多个except用来捕获不同的异常,当不需要对捕获到的异常进行处理时,可以在分支中输入pass,代表不做任何操作,try语句块的末尾可以跟随一个else分支,当没有捕获到异常时会执行这个分支,但一般不需要添加这个分支,当程序执行过程中遇到异常时,如果添加了异常处理语句,会直接跳转到异常分支进行处理,而不继续执行下面的语句,如果没有任何异常处理能够匹配,程序会因为出错而直接终止运行 #执行上面的程序,当输入一个非数字的字符时,会触发ValueError异常(这个ValueError就是异常名),并且打印出异常信息(这个异常是在i=int(i)时发生的,因为要被转换的字符不是数字) 输入你需要的水果编号(1-4):a invalid literal for int() with base 10: 'a' #当输入一个范围不在1-4中的数字时,会触发KeyError异常,这个异常是在if块的else分支下的print(d[i])语句中发生的,假如我输入的是6,d[6]在字典中根本找不到对应的键,所以抛出"键错误",但是这条分支下面使用了pass,这会让程序静默处理,不会在屏幕上产生任何输出 #当程序没有异常时,输出如下 输入你需要的水果编号(1-4):1 banana 未捕获到异常