学习笔记-小甲鱼Python3学习第三十

发布时间:2019-09-23 17:10:00编辑:auto阅读(1970)

    丰富的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('|--- 感谢使用通讯录 ---|')


关键字