【问题描述】
编写程序从标准输入中读入一段英文,统计其中小写字母出现次数,并以柱状图的形式显示其出现次数。
【输入形式】
在标准输入上输入一段英文文章(可能有一行,也可能有多行),在新的一行的开头输入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='')
提交可通过