1. 程式人生 > >Python入門習題----小寫字母頻率柱狀圖

Python入門習題----小寫字母頻率柱狀圖

【問題描述】

編寫程式從標準輸入中讀入一段英文,統計其中小寫字母出現次數,並以柱狀圖的形式顯示其出現次數。

【輸入形式】

在標準輸入上輸入一段英文文章(可能有一行,也可能有多行),在新的一行的開頭輸入ctrl+z鍵或者Ctr+D鍵表示結束。

【輸出形式】

在螢幕上依次輸出表示每個小寫字母出現次數的柱狀圖(以*字元表示柱狀圖,空白處用空格字元表示,某個小寫字母出現多少次,就顯示多少*字元;柱狀圖的高度以出現最多的字母次數為準),在最後一行依次輸出26個小寫字母。

【樣例輸入】

The computing world has undergone a revolution since the publication of The C Programming Language in 1978.

【樣例輸出】

【樣例說明】

在輸入的英文短文中,小寫字母a出現了6次,所以其上輸出了6個字元"*"。出現次數最多的是字母n,所以柱狀圖的高度為9個字元。字母j沒有出現,所以其上都為空格字元。

參考程式碼:

"""
Created on Wed Oct 23 16:08:26 2018

@author: Dina
"""
d={
   'a':0,
   'b':0,
   'c':0,
   'd':0,
   'e':0,
   'f':0,
   'g':0,
   'h':0,
   'i':0,
   'j':0,
   'k':0,
   'l':0,
   'm':0,
   'n':0,
   'o':0,
   'p':0,
   'q':0,
   'r':0,
   's':0,
   't':0,
   'u':0,
   'v':0,
   'w':0,
   'x':0,
   'y':0,
   'z':0 
 }

# --- 把輸入的一段英文儲存在列表 section 中
section =[]
flg = 1
while(flg == 1):    
    sentence = input()
    section.append(sentence)
    # 一段英文都是以 . 結束的
    if sentence.find('.')==len(sentence)-1 :        
        flg=0       
   

#--- 把該段英文裡的小寫字母儲存在 character 中
character =''
for temp in section:
    for i in range(len(temp)):       
        if temp[i].islower():
            character +=temp[i]     
            
#--- 把該段英文裡的小寫字母出現的次數儲存在字典 character_dict 中
character_dict={}
for i in range(len(character)):
    if character[i] in character_dict:
        character_dict[character[i]] += 1
    else:
        character_dict[character[i]] = 1

#--- 對 character_dict 裡的字母進行排序
a = sorted(character_dict.items(),key = lambda x:x[0])

#--- 把字母出現的次數賦值給 字典 d
for i in range(len(a)):
    d[a[i][0]] =  a[i][1]

#----找出出現次數的最大值
occurCounts_list=[]
for v in d.values():
    occurCounts_list.append(v)
occur_max=max(occurCounts_list)

#--- 建立一個26 x occur_max 的二維矩陣,(不必要建立 26 x 26 的矩陣)
result_list=[[0] * 26 for i in range(occur_max)]

#---每個字元出現了多少次,對應的那一列就有多少個 *
for i in range(len(occurCounts_list)):    
     for k in range(occurCounts_list[i]):
         result_list[k][i] ='*'
                  
#------ 用空格代替 result_list 中的 0,且輸出 result_list  
for i in range(len(result_list)-1,-1,-1):
   for j in range(len(result_list[i])):
       if(result_list[i][j]==0):
           result_list[i][j] = ' '
       print(result_list[i][j],end='')
   print()

#---- 列印 26 個字母
for i in d.keys():
    print(i,end='')

提交可通過