FishC筆記—34 講 豐富的else語句及簡的with語句

本期內容詳解:
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)  
發佈了89 篇原創文章 · 獲贊 316 · 訪問量 41萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章