专栏首页石开之旅小甲鱼《零基础学习Python》课后笔记(三十四):丰富的else语句及简洁的with语句

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

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

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.请目测以下代码会打印什么内容?

try:  
    print('ABC')  
except:  
    print('DEF')  
else:  
    print('GHI')  
finally:  
    print('JKL')  

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

with f.opem(my_list.txt) as f

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

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

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

with A() as a:  
    with B() as b:  
        suite  

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

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

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

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)  

修改后:

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.你可以利用异常的原理,修改下列代码使之更有效率吗?

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('|--- 感谢使用通讯录软件 ---|')  

修改后:

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('|--- 感谢使用通讯录软件 ---|')    

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 小甲鱼《零基础学习Python》课后笔记(十八):函数——灵活即强大

    关键字参数是在调用函数时,带上函数参数的名字去指定调用哪个参数,从而不用按照参数的顺序调用参数。

    小火柴棒
  • 图像处理笔记(2)----OpenCV imread函数详解

    imread()读取图片文件,imread函数有两个参数,第一个参数是图片路径,第二个参数表示读取图片的形式,有三种:

    小火柴棒
  • 小甲鱼《零基础学习Python》课后笔记(四):改进我们的小游戏

    会一直打印直到电脑内存被占用完。字符串‘C’是一个非0值,所以while语句判断为真,就会一直打印。

    小火柴棒
  • 学习笔记-小甲鱼Python3学习第三十

    python中else不仅可以与if搭配组成控制流,还可以与while或for搭配使用

    py3study
  • python之路-基础篇5

    py3study
  • python3——print使用

    py3study
  • python 实战 登录注册

    py3study
  • 让Python输出更漂亮---Print

    #print("学生的年龄为:"),print(student_age)中间不换行

    py3study
  • python笔记之2.x上兼容3.x版本

    在前文《python笔记之3.x与2.x的使用区别》谈及了不同版本的区别问题。长远看软件新版本肯定会取代低版本的,除非你有成熟的老版本代码必须考虑兼容性问题,一...

    py3study
  • Python基础

    Python,是龟叔在1989年为了打发无聊的圣诞节而编写的一门编程语言,特点是优雅、明确、简单,现今拥有丰富的标准库和第三方库。 Python适合开发Web网...

    py3study

扫码关注云+社区

领取腾讯云代金券