前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >小甲鱼《零基础学习Python》课后笔记(三十四):丰富的else语句及简洁的with语句

小甲鱼《零基础学习Python》课后笔记(三十四):丰富的else语句及简洁的with语句

作者头像
小火柴棒
发布2019-01-11 14:28:38
5690
发布2019-01-11 14:28:38
举报
文章被收录于专栏:石开之旅

测试题 0.在Python中,else语句能跟哪些语句进行搭配? a)if…else语句,“要么怎样。要么不怎样” b)while或for…else语句,“干完了能怎样,干不完就别想怎样” c)异常处理搭配,“没有问题,那就干吧” 1.请问以下例子中,循环中的break语句会跳过else语句吗?

代码语言:javascript
复制
def showMaxFactor(num):  
    count = num // 2  
    while count > 2:  
        if num % count == 0:  
            print('%d最大的约数是%d' % (num, count))  
            break  
        count -= 1  
    else:  
        print('%d是素数!' % num)  
          
num = int(input('请输入一个数:'))  
showMaxFactor(num)  

要看输入的数是否是素数,如果是,则执行else语句,如果不是,则跳过else语句。 2.请目测以下代码会打印什么内容?

代码语言:javascript
复制
try:  
    print('ABC')  
except:  
    print('DEF')  
else:  
    print('GHI')  
finally:  
    print('JKL')  

ABCGHIJKL。只有except的内容不会被打印,try语句没有异常,else语句块也会执行。 3.使用什么语句可以使你不必再担心文件打开后却忘了关闭的尴尬?

代码语言:javascript
复制
with f.opem(my_list.txt) as f

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

with语句会自动处理文件的打开和关闭,出现异常会执行清理代码,保证文件的自动关闭。

5.你可以换一种形式写出下边的伪代码吗?

代码语言:javascript
复制
with A() as a:  
    with B() as b:  
        suite  

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

代码语言:javascript
复制
with A() as a,B() as b:  
    suite  

6.使用with语句改写以下代码,让Python去关心文件的打开和保存。

代码语言:javascript
复制
def file_compare(file1, file2):  
    f1 = open(file1)  
    f2 = open(file2)  
    count = 0 #统计行数  
    differ = [] #统计不一样的数量  
  
    for line1 in f1:  
        line2 = f2.readline()  
        count += 1  
        if line1 != line2:  
            differ.append(count)  
  
    f1.close()  
    f2.close()  
    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)  

修改后:

代码语言:javascript
复制
def file_compare(file1, flile2):  
    with open(file1) as f1, open(file2) as f2:  
        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)  

6.你可以利用异常的原理,修改下列代码使之更有效率吗?

代码语言:javascript
复制
print('|--- 欢迎进入通讯录程序 ---|')  
print('|--- 1:查询联系人资料 ---|')  
print('|--- 2:插入新的联系人 ---|')  
print('|--- 3:删除已有联系人 ---|')  
print('|--- 4:退出通讯录程序 ---|')  
  
contacts = dict()  
  
while 1:  
    instr = int(input('\n请输入相关的指令代码:'))  
  
    if instr == 1:  
        name = input('请输入联系人姓名:')  
        if name in contacts:  
            print(name + ':' + contacts[name])  
        else:  
            print('您输入的姓名不在通讯录中!')  
  
    if instr == 2:  
        name = input('请输入联系人姓名:')  
        if name in contacts:  
            print('您输入的姓名在通讯录中已存在 -->>', end='')  
            print(name + ':' + contacts[name])  
            if input('是否修改用户资料(YES/NO):') == 'YES':  
                contacts[name] = input('请输入用户联系电话:')  
        else:
            contacts[name] = input('请输入用户联系电话:')  
  
    if instr == 3:  
        name = input('请输入联系人姓名:')  
        if name in contacts:  
            del(contacts[name])     #也可以使用dict.pop()  
        else:  
            print('您输入的联系人不存在。')  
  
    if instr == 4:  
        break  
  
  
print('|--- 感谢使用通讯录软件 ---|')  

修改后:

代码语言:javascript
复制
print('|--- 欢迎进入通讯录程序 ---|')    
print('|--- 1:查询联系人资料 ---|')    
print('|--- 2:插入新的联系人 ---|')    
print('|--- 3:删除已有联系人 ---|')    
print('|--- 4:退出通讯录程序 ---|')    
    
contacts = dict()    
    
while 1:    
    instr = int(input('\n请输入相关的指令代码:'))    
    
    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])     #也可以使用dict.pop()    
        except KeyError:    
            print('您输入的联系人不存在。')    
    
    if instr == 4:    
        break    
    
    
print('|--- 感谢使用通讯录软件 ---|')    
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018年09月24日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档