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='')

提交可通过

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值