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