设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
查看: 3938|回复: 1
打印 上一主题 下一主题

字符频率统计练习,一个遗留问题

[复制链接]

2

主题

0

好友

476

积分

中级会员

Rank: 3Rank: 3

跳转到指定楼层
楼主
发表于 2018-4-2 20:25:24 |只看该作者 |倒序浏览
#从控制台输入或从文件中读入一段文本,统计出其中每个字符出现的次数,并按照出现次数排序输出。
"""
例如:
History is his story.
输出:
s:4
i:3
:3
t:2
o:2
r:2
y:2
h:1
H:1
.:1
"""

class char_freq(): # 自定义类,包括字符和字符出现次数
    def __init__(self, char, freq):
        self.char = char
        self.freq = freq

def char_freq_stat(file):

    freq_list = char_freq_input(file)
    sorted_freq_list = char_freq_sort(freq_list)
    char_freq_print(sorted_freq_list)


def char_freq_input(file):#输入文件,生成字符列表

    freq_list = []

    file_object = open(file, "r", encoding = "gb18030")
    content = file_object.read()
    file_object.close()

    for f in content:
        tmp = char_freq(f, 1)
        found = False
        #处理读到的每个字符,如果已经统计到了,则频率+1,否则加入统计列表
        for i in range (0, len(freq_list) ):
            if tmp.char == freq_list[i].char:
                freq_list[i].freq += 1
                found = True
                break
        if not found:
            freq_list.append(tmp)

    return freq_list

def char_freq_sort(freq_list):#对列表进行按次数从高到低排序

    count = len(freq_list)

    for i in range (0, count):
        for j in range (i + 1, count):
            if freq_list[i].freq < freq_list[j].freq:
                t = freq_list[i]
                freq_list[i] = freq_list[j]
                freq_list[j] = t

    return freq_list

def char_freq_print(freq_list):#打印列表
    for i in range (0, len(freq_list)):
        if freq_list[i].char == "\n" :
            print ("\\n"+":"+str(freq_list[i].freq)) #处理回车符
        else:
            print (freq_list[i].char+":"+str(freq_list[i].freq))

char_freq_stat("L:\\articles\\1.txt")

#遗留问题,一定要用自定义类吗?想不出不用自定义类的方法


运行结果
Python 3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:04:45) [MSC v.1900 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>>
================ RESTART: D:\Python36\code\crossin\字符频率统计.py ================
,:40
中:24
日:16
月:16
。:16
昏:12
之:12
旦:12
在:12
\n:12
孟:4
仲:4
是:4
也:4
季:4
星:3
春:3
夏:3
秋:3
冬:3
奎:2
七:2
牵:2
牛:2
尾:2
毕:2
翼:2
婺:2
女:2
东:2
危:2
至:2
柳:2
夜:2
斗:2
分:2
井:1
亢:1
建:1
长:1
营:1
谓:1
火:1
参:1
室:1
角:1
觜:1
房:1
虚:1
弧:1
壁:1
轸:1
短:1
娄:1
氏:1
:1


回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

沙发
发表于 2018-4-3 13:45:38 |只看该作者
不一定非要用类啊,你这里的代码可以用一般的变量+函数的方式实现
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

QQ|手机版|Archiver|Crossin的编程教室 ( 苏ICP备15063769号  

GMT+8, 2024-6-20 03:25 , Processed in 0.024675 second(s), 24 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部