本期內容詳解:
else語句的用法:
1)配合if語句
2)在while和for循環中,只在循環完成後才執行,如果循環中使用break,則else不執行。
例如:
#*************************************************#
# 判斷給定數的最大公約數,如果是素數,則打印 #
#*************************************************#
def showMaxFactor(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('請輸入一個數:'))
showMaxFactor(num)
3)與異常處理語句配合使用:(如果沒有出錯,則打印出‘沒有任何錯誤!’)
try:
print(int('abc'))
except ValueError as reason:
print('出錯啦:' + reason)
else:
print('沒有任何異常!')
with語句:(避免了忘記關閉已打開文件的煩惱)
#*********************************************#
# 異常處理配合with語句 #
# 可以避免已打開文件沒關閉的情況 #
#*********************************************#
try:
with open('data.txt','w') as f:
for each_line in f:
print(each_line)
except OSError as reason:
print('出錯啦:' + str(reason))
典型課後題
在 Python 中,else 語句能跟哪些語句進行搭配?
答:在 Python 中,else 語句不僅能跟 if 語句搭,構成“要麼怎樣,要麼不怎樣”的語境;Ta 還能跟循環語句(for 語句或者 while 語句了能怎樣,幹不完就別想怎樣”的語境;其實 else 語句還能夠跟我們剛剛講的異常處理進行搭配,構成“沒有問題,那就幹吧”
請問以下例子中,循環中的 break 語句會跳過 else 語句嗎?
def showMaxFactor(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('請輸入一個數:'))
showMacFactor(num)
答:會,因爲如果將 else 語句與循環語句(while 和 for 語句)進行搭配,那麼只有在循環正常執行完成後纔會執行 else 語句
請目測以下代碼會打印什麼內容?
try:
print('ABC')
except:
print('DEF')
else:
print('GHI')
finally:
print('JKL')
答:只有 except 語句中的內容不被打印,因爲 try 語句塊中並沒有異常,則 else 語句塊也會被執行。
ABC
GHI
JKL
使用什麼語句可以使你不比再擔心文件打開後卻忘了關閉的尷尬?
答:使用 with 語句。
使用 with 語句固然方便,但如果出現異常的話,文件還會自動正常關閉嗎?
答:with 語句會自動處理文件的打開和關閉,如果中途出現異常,會執行清理代碼,然後確保文件自動關閉
你可以換一種形式寫出下邊的僞代碼嗎?
with A() as a:
with B() as b:
suite
答:
with A() as a,B() as b:
suite
使用 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)