版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
编写一个模块,包含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)