- 帖子
- 37
- 精华
- 0
- 积分
- 476
- 阅读权限
- 30
- 注册时间
- 2018-3-31
- 最后登录
- 2019-10-26
|
#从控制台输入或从文件中读入一段文本,统计出其中每个字符出现的次数,并按照出现次数排序输出。
"""
例如:
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
|
|