课时34 丰富的else语句以及简洁的with语句

一、丰富的else语句

  • 要么怎样,要么不怎样

典型的if-else搭配:

if条件:
    条件为真执行
else:
    条件为假执行
  • 干完了能怎样,干不完就别想怎样

else语句可以与for和while语句配合使用,但是else语句在循环完成后执行,但循环中间使用break语句跳出循环,那么else里边的内容就不会执行了。

def showMaxFactor(num):
    count = num // 2
    while count > 1:
        if num % count == 0:
            print('%d最大的约数是%d' % (num,count))
            break
        count -= 1
    else:
        print('%d是素数!' % num)

num = int(input('请输入一个数:'))
showMaxFactor(num)
  • 没有问题,那就干吧

else语句还可以与异常处理进行搭配,实现跟循环语句搭配差不多:只要try语句块里没有出现任何异常,那么就会执行else语句块里的内容

try:
    print(int('123'))
except ValueError as reason:
    print('出错啦:' + str(reason))
else:
    print('没有任何异常!')

二、简介的with语句

当你觉得打开文件又要关闭文件,还要关注异常处理很繁琐,所以Python提供了with语句。with语句抽象除文件操作中频繁使用的try/except/finally相关的细节。对文件操作使用with语句,将大大减少代码量,不用再担心文件打开忘记关闭的问题了(with会自动帮你关闭文件)

try:
    f = open('data.txt','w')
    for each_line in f:
        print(each_line)
except OSError as reason:
    print('出错啦:' + str(reason))
finally:
    f.close()

使用with语句,可以改成这样:

try:
    with open('data.txt','w') as f:
        for each_line in f:
            print(each_line)
except OSError as reason:
    print('出错啦' + str(reason))

三、测试题

0.在Python中,else语句能跟哪些语句进行搭配

答:1)else与if搭配,要么怎样,要么不怎样

2)else与循环语句(for语句或者while语句),干完了能怎样,干不完就别想怎样

3)else与异常处理搭配,没有问题,那就干吧

答:会。当else与循环语句搭配,那么只有循环正常执行后才会执行else语句块的内容。

2.请目测一下代码会打印什么内容

try:
    print('abc')
except:
    print('def')
else:
    print('ghi')
finally:
    print('xyz')

 答:只有except语句中的内容不被打印,因为try语句块里没有异常,则else语句块也会被执行

3.使用什么语句可以使你不必再担心文件打开后却忘记关闭的尴尬

答:with语句

4.使用with语句固然方便,但如果出现异常的话,文件还会自动正常关闭吗?

答:with语句会自动处理文件的打开和关闭,如果中途出现异常,会执行清理代码,然后确保文件自动关闭。

 答:with语句处理多个项目的时候,可以用逗号隔开写成一条语句

with a() as a, b() as b:
    suite

0.使用with语句改写以下代码,让Python去关心文件的打开与关闭吧

def file_compare(file1,file2):
    with open(file1) as file1,open(file2) as file2:
        count = 0
        differ = []

        for line1 in f1:
            line2 = f2.readline()
            count += 1
            if line1 != line2:
                differ.append(count)

    return differ

file1 = input('请输入第一个比较的文件名:')
file2 = input('请输入第二个比较的文件名:')

differ = file_compare(file1,file2)

if len(differ) == 0:
    print('两个文件完全一样!')
else:
    print('两个文件共有%d处不同:'% len(differ))
    for each in differ:
        print('第%d行不一样' % each)

 

1.你可以利用异常原理,修改下面的代码使得更高效率的实现吗?

print('——————欢迎进入通讯录程序——————')
print('——————1:查询联系人资料——————')
print('——————2:插入新的联系人——————')
print('——————3:删除已有联系人——————')
print('——————4:退出通讯录程序——————')

contacts = dict()

while 1:
    instr = int(input('请输入相关的指令代码:'))

    if instr == 1:
        name = input('请输入联系人姓名:')
        try:
            print(name + ':' + contacts[name])
        except KeyError:
            print('您输入的联系人不存在')

    if instr == 2:
        name = input('请输入联系人姓名:')
        try:
            print('您输入的联系人已存在',end = '')
            print(name + ':' + contacts[name])
            if input('是否修改联系人信息(YES/NO):') == 'YES':
                contacts[name] = input('请输入联系人电话:')
        except KeyError:
            contacts[name] = input('请输入联系人电话:')

    if instr == 3:
        name = input('请输入联系人姓名:')
        try:
            del(contacts[name])
        except KeyError:
            print('您输入的用户不存在')

    if instr == 4:
        break

print('——————感谢使用——————')
        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值