备考计算机二级Python之Day4中篇

三、程序的循环结构

Python语言的循环结构包括两种:遍历循环和无限循环

遍历循环使用了保留字for依次提取遍历结构各元素进行处理:无限循环使用保留字while根据判断条件执行条件。

1、遍历循环:for

Python通过保留字for实现遍历循环,使用方式如下:

for  <循环变量> in <遍历结构>:
     <语句块>

遍历循环可以理解从遍历结构中逐一提取元素,放在循环变量中,对于每个所提取的元素执行一次语句块。for语句的循环执行次数是根据遍历结构中元素个数确定的。

遍历结构可以是字符串、文件、range()函数或组合数据类型等。

对于字符串,可以逐一遍历字符串的每个字符,基本使用方式如下:

for  <循环变量>  in  <字符串>:
     <语句块>
for c in "Python":
    print(c)

    
P
y
t
h
o
n

使用range()函数,可以指定语句块的循环次数,基本使用方式如下:

for  <循环变量> in  range(<循环次数>):
     <语句块>
for i in range(5):
    print(i)

    
0
1
2
3
4

遍历循环还有一种扩展模式,使用方式如下:

for <循环变量> in <遍历结构>:
    <语句块1>
else:
    <语句块2>

 当for循环正常执行之后,程序会继续执行else语句中内容。else语句只在循环正常执行没有被break打断才执行,因此,可以在<语句2>中放置判断循环执行情况的语句。

提示:else奖励

可以把循环中的else语句想象成一种奖励,当程序辛苦地执行完全部循环,没有中途break终止,则额外给予一段程序执行的奖励。示例如下:

for s in "PY":
    print("循环执行中:"+s)
else:
    s="循环正常结束"
print(s)
循环执行中:P
循环执行中:Y
循环正常结束

2、无限循环:while

Python通过保留字while实现无限循环,基本使用方式如下:

while <条件>:
      <语句块>

其中,<条件>与if语句中的判断条件一样,结果为True或False。

n=0
while n<10:
    print(n)
    n=n+3


0
3
6
9

当程序执行到while语句时,判断条件如果为True,执行循环体语句,循环体语句结束后返回再次判断while语句条件,当条件为False时,循环终止,执行与while同级别缩进的后续语句。

无限循环也有一种使用保留字else的扩展模式,使用方式如下:

while <条件>:
    <语句块1>
else:
    <语句块2>

在这种扩展模式中,当while循环正常执行之后,程序会继续执行else语句中的内容。else语句只在循环正常执行后才执行,因此,可以在语句2中放置判断循环执行情况的语句。while循环的else语句与for循环的else语句一样,都是循环正常执行结束的“奖励”部分。例如:

s,idx="PY",0
while idx<len(s):
    print("循环执行中:"+s[idx])
    idx+=1
else:
    s="循环正常结束"
print(s)

循环执行中:P
循环执行中:Y
循环正常结束

3、循环控制:break和continue

循环结构有两个辅助循环控制的保留字:break和continue

break用来跳出最内层for或while循环,脱离该循环后程序继续执行循环后续代码。

while True:
    s=input("请输入一个名字(按Q退出):")
    if s=="Q":
        break
    print("输入的名字是:",s)
print("程序退出")
请输入一个名字(按Q退出):云朵
输入的名字是: 云朵
请输入一个名字(按Q退出):小草
输入的名字是: 小草
请输入一个名字(按Q退出):Q
程序退出

如果有2层或多层循环,break退出最内层循环。示例如下:

while True:
    s=input("请输入一个名字(按Q退出):")
    if s=="Q":
        break #退出while循环
    for c in s:
        if c=="E":
            break #退出for循环,但不退出while循环
        print(c,end="")
print("程序退出")

continue用来结束当前当次循环,即跳出循环体中下面尚未执行的语句,但不跳出当前循环。示例如下。

for s in "PYTHON":
    if s=="Y"or s=="y":
        continue
    print(s,end="")
PTHON

continue语句和break语句的区别是:continue语句只结束本次循环,不终止整个循环的执行,而break结束当前层次的整个循环。

四、程序的异常处理

1、基本异常处理:try-except

Python程序一般对输入有一定要求,但实际输入不满足程序要求时,可能会产生程序的运行错误。示例如下:

n=eval(input("请输入一个数字:"))

请输入一个数字:Sunday
Traceback (most recent call last):
  File "C:/Users/user/Desktop/234.py", line 1, in <module>
    n=eval(input("请输入一个数字:"))
  File "<string>", line 1, in <module>
NameError: name 'Sunday' is not defined

由于使用了eval()函数,如果用户输入的不是一个数字则可能报错。这类由于输入与预期不匹配而造成的错误有很多种,不能逐一列出所有可能性。为了保证程序运行的稳定性,这类运行错误应该被程序捕获并合理控制。

Python语言使用保留字try和except进行异常处理,基本的语法格式如下:

try:
    <语句块1>
except:
    <语句块2>

 语句块1是正常执行的程序内容,当执行这个语句块发生异常时,则执行except保留字后面的语句块2,如下所示。

try:
    n=eval(input("请输入一个数字;"))
    print("输入数字的3次方值为:",n**3)
except:
    print("输入错误,请输入一个数字!")
请输入一个数字;10
输入数字的3次方值为: 1000


请输入一个数字;pen
输入错误,请输入一个数字!

除了输入之外,异常处理还可以处理程序执行中的运行异常。例如:

for i in range(5):
    print(10/i,end="")

    
Traceback (most recent call last):
  File "<pyshell#16>", line 2, in <module>
    print(10/i,end="")
ZeroDivisionError: division by zero

 这段代码中,由于i的初始值为0,10/i实际上是10/0,产生了除以0的情况,Python语言不支持除数为0的操作,产生了ZeroDivisionError运行错误。采用try-except方式可以处理这样的异常情况。

try:
    for i in range(5):
        print(10/i,end="")
except:
    print("某种原因,出错了!")
某种原因,出错了!

2、异常处理类型

仔细观察Python程序的异常错误信息,最后一行给出了异常提醒,其中包含了对异常处理类型的描述,比如NameError、ZeroDivisionError.这些异常处理类型由Python语言定义。

程序也可以结合特定的错误类型进行异常精准处理,在except后指明错误类型,格式如下:

try:
    <语句块1>
except<异常处理类型>:
    <语句块2>

例如,对于除零错误,可以在except后面增加ZeroDivisionError,仅指定处理此类异常。若希望处理其他异常,可再增加except语句。示例如下:

try:
    for i in range(5):
        print(10/i,end=" ")
except ZeroDivisionError:
    print("除数为零,产生了除零错误!")
except:
    print("某种原因,出错了")
除数为零,产生了除零错误!

提醒:异常类型

只要程序可能异常退出,无论哪种类型,都可以用try-except捕捉这种异常,使程序有更好的用户体验。

Python的异常处理机制能够程序运行的可靠性。编写程序时,建议在输入合规性判断、保证关键代码可靠性等方面广泛使用异常处理机制。

  • 9
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值