丰富的else语句

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

要么怎样,要么不怎样

干完了能怎样,干不完就别想怎样

没有问题,那就干吧


举例:求素数

def showMaxFactory(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('请输入一个数:'))

showMaxFactory(num)


输出异常举例:

try:

    int('abc')

except ValueError as reason:

    print('出错啦' + str(reason))

else:

    print('没有异常')

>>> 

出错啦invalid literal for int() with base 10: 'abc'


try:

    int('123')

except ValueError as reason:

    print('出错啦' + str(reason))

else:

    print('没有异常')

>>> 

没有异常


try:

    print(int('123'))

except ValueError as reason:

    print('出错啦' + str(reason))

else:

    print('没有异常')

>>> 

123

没有异常


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语句能跟哪些语句进行搭配?

if ...:

...

else:

...


while ...:

...

else:

...


for ...:

...

else:

...


1.请问以下例子中,循环中的break语句会跳过else语句吗?

def showMaxFactory(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('请输入一个数:'))

showMaxFactory(num)

会的,如果将else语句与循环语句(for或while语句)搭配,那么只有在循环正常执行完成后才会执行else语句块的内容


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

try:

    print('ABC')

except:

    print('DEF')

else:

    print('GHI')

finally:

    print('JKL')

打印结果:

ABC

GHI

JKL


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

with语句打开

with open('file.txt','w') as f:


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

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


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

with A() as a:

with B() as b:

suite

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

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

suite


------------------分割线,哈哈哈------------------------

0.使用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,file2):

    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)

        

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

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:

            contacts.pop(name)

            print('联系人%s已删除' %name)

        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:

            contacts.pop(name)

            print('联系人%s已删除' %name)

        except KeyError:

            print('您输入的联系人不存在!')


    if instr == 4:

        break


print('|--- 感谢使用通讯录 ---|')