前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >学习笔记-小甲鱼Python3学习第三十

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

作者头像
py3study
发布2020-01-03 16:14:58
5700
发布2020-01-03 16:14:58
举报
文章被收录于专栏:python3python3

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-09-23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

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