编写一个模块,含char_freq_table()函数。传入文件名,统计文件中的所有英文字符的出现次数,忽略大小写的区别,并根据次数的高低打印字符以及频率到屏幕

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_38970783/article/details/84786572

编写一个模块,包含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)

   
   

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值