小甲鱼《零基础学习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('|--- 感谢使用通讯录软件 ---|')    

猜你喜欢

转载自blog.csdn.net/qq_24546137/article/details/82822482