1. 程式人生 > >編寫一個模組,含char_freq_table()函式。傳入檔名,統計檔案中的所有英文字元的出現次數,忽略大小寫的區別,並根據次數的高低列印字元以及頻率到螢幕

編寫一個模組,含char_freq_table()函式。傳入檔名,統計檔案中的所有英文字元的出現次數,忽略大小寫的區別,並根據次數的高低列印字元以及頻率到螢幕

編寫一個模組,包含char_freq_table()函式。傳入一個檔名,統計檔案中的所有
英文字元的出現次數,忽略大小寫的區別,並根據次數的高低列印字元以及頻率到
螢幕

如果有更好的思路,歡迎交流

因為時間問題就直接寫在一個檔案裡了,主要實現了統計檔案中的所出現的各個字元以及他的次數,文字如下:
在這裡插入圖片描述
在這期間使用了多個列表,基本思路如下:

開啟檔案,然後對檔案進行遍歷,將檔案內容儲存到temp1中,
然後使用迴圈對齊進行遍歷,如果遇到的為大寫字母用ascII碼將其轉化為小寫存入temp2中,
之後將temp1中出現的字元依次存入a中,並在b中存入此字元在temp1和temp2中總共出現的次數即為大寫和小寫的次數
使用zip函式將a以及b兩個列表整合成一個帶鍵值以及權值的字典,之後依次輸出字典中的資料。

'''
測試版1:略有缺點,如果檔案中有空格以及其他字元也會輸出
'''
def char_freq_table(name):
    file=open(name,'r')
    temp1=list(file.read())
    temp2=list()
    a=[]
    b=[]
    for i in temp1:
        if i in a:
            continue
        else:
            if  'A'<=i<='Z' :
                i=chr(ord(i)+32)
                temp2.append(i)
            a.append(i)
            b.append(temp1.count(i)+temp2.count(i))
            c=dict(zip(a,b))
    d=sorted(c.items(),key=lambda item:item[1],reverse=True)
    for j in d:
        print (j)

x=input('請輸入檔名:')
char_freq_table(x)

執行結果如下
在這裡插入圖片描述

之後對此進行了改進,只輸出字元,其他東西不會輸出,在迴圈中,多加了個if判斷語句,程式碼如下:

def char_freq_table(name):
    file=open(name,'r')
    temp1=list(file.read())
    temp2=list()
    a=[]
    b=[]
    c={}
    for i in temp1:
        if i in a:
            continue
        else:
            if ((i<'A'or i>'Z') and (i<'a' or i>'z')):
                continue
            else:
                if 'A'<=i<='Z' :
                    i=chr(ord(i)+32)
                    temp2.append(i)
            a.append(i)
            b.append(temp1.count(i)+temp2.count(i))
            c=dict(zip(a,b))
    d=sorted(c.items(),key=lambda item:item[1],reverse=True)
    for j in d:
        print (j)

x=input('請輸入檔名:')
char_freq_table(x)

在這裡插入圖片描述