这周讲解了组合数据类型,重点介绍表达和处理一组数据的方法,涉及到多种数据类型,包括:集合类型、序列类型(含元组类型和列表类型)和字典类型;讲解2个颇有用处的实例:基本统计值计算和文本词频统计,其中,即有英文Hamlet的词频统计,也有中文《三国演义》的人物出场统计;进一步讲解用于中文分词的jieba库,从此以后,处理中英文文本、做些统计分析将不再是问题!

练习1:基本统计值的计算(也就是课程中的实例9:基本统计值计算)

描述:

获取以逗号分隔的多个数据输入(输入为一行),计算基本统计值(平均值、标准差、中位数)‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬,除中位数外,其他输出保留小数点后两位。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

注意:

多个数据是一行输入,而不是教程中的多行输入

我的代码:

#第6周week6_1.py

#请在...补充一行或多行代码

#CalStatisticsV1.py

#获取以逗号分隔的多个数据输入(输入为一行),

def getNum(): #获取用户不定长度的输入

Nums=[]

iNumStr=input()

Nums = iNumStr.split(',')

for i in range(len(Nums)):

Nums[i]=eval(Nums[i])

return Nums

def mean(numbers): #计算平均值

s=0.0

for num in numbers:

s += num

return s/len(numbers)

def dev(numbers, mean): #计算标准差

sdev = 0.0

for num in numbers:

sdev = sdev + (num - mean)**2

return pow(sdev / (len(numbers)-1), 0.5)

def median(numbers): #计算中位数

nu=sorted(numbers)

num =len(numbers)

if num % 2 == 0:

med = (nu[num//2-1] +nu[num//2])/2

else:

med = nu[num//2]

return med

n = getNum() #主体函数

m = mean(n)

print("平均值:{:.2f},标准差:{:.2f},中位数:{}".format(m,dev(n,m),median(n)))

练习2:文本词频统计(英文版哈姆雷特)----教程中的实例10

描述:

这是"实例"题,与课上讲解实例相同,请作答检验学习效果。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

文本词频统计::一篇文章,出现了哪些词?哪些词出现的最多?

英文文本:hamlet‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬.txt,参考附件‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

请统计hamlet.txt文件中出现的英文单词情况,统计并输出出现最多的10个单词,注意:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

(1) 单词不区分大小写,即单词的大小写或组合形式一样;‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

(2) 请在文本中剔除如下特殊符号:!"#$%&()*+,-./:;<=>?@[\\]^_‘{|}~‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

(3) 输出10个单词,每个单词一行;‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

(4) 输出单词为小写形式。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

输出样例:

‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬以下仅是输出样例(仅列出3个,需要列出10个),不是最终结果:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

the‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

hamlet‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

be

我的代码:

#week6_2.py

#请在...处补充代码

def getText():

txt = open("hamlet.txt", "r").read() #这是需要先记住的

txt = txt.lower()

for chr in '!"#$%&()*+,-./:;<=>?@[\\]^_‘{|}~':

txt = txt.replace(chr,"")

return txt

hamletTxt = getText() #获取文本,文章形式

words = hamletTxt.split() #分割文章中单词,以列表形式表示

nums={} #定义一个字典,用以存单词及其个数

for word in words: #对于列表形式文章中的每个单词

nums[word] =nums.get(word,0)+1 #如果这个单词(键)在字典中,其值+1,不在则赋以0

items = list(nums.items()) #将字典变换为列表

items.sort(key=lambda x:x[1],reverse=True) #按多元数据的第二项(值)对列表进行排序,记!

for i in range(10):

word,num = items[i] #将列表中的二元数据分别赋值给word、num

# print("{0:<10}{1:>5}".format(word,num))

print(word) #练习只要求打印出单词,不需要打印对应的次数

练习3:人名独特性统计

描述:

编程模板中给出了一个字符串,其中包含了含有重复的人名,请去重后给出独特性人名的统计。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

输出模板中字符串共有多少个独特人名。

我的代码:

#week6_3.py

#人名去重

#思路:利用集合元素的不重复

s = '''双儿 洪七公 赵敏 赵敏 逍遥子 鳌拜 殷天正 金轮法王 乔峰 杨过 洪七公 郭靖

杨逍 鳌拜 殷天正 段誉 杨逍 慕容复 阿紫 慕容复 郭芙 乔峰 令狐冲 郭芙

金轮法王 小龙女 杨过 慕容复 梅超风 李莫愁 洪七公 张无忌 梅超风 杨逍

鳌拜 岳不群 黄药师 黄蓉 段誉 金轮法王 忽必烈 忽必烈 张三丰 乔峰 乔峰

阿紫 乔峰 金轮法王 袁冠南 张无忌 郭襄 黄蓉 李莫愁 赵敏 赵敏 郭芙 张三丰

乔峰 赵敏 梅超风 双儿 鳌拜 陈家洛 袁冠南 郭芙 郭芙 杨逍 赵敏 金轮法王

忽必烈 慕容复 张三丰 杨逍 令狐冲 黄药师 袁冠南 杨逍 完颜洪烈 殷天正

李莫愁 阿紫 逍遥子 乔峰 逍遥子 完颜洪烈 郭芙 杨逍 张无忌 杨过 慕容复

逍遥子 虚竹 双儿 乔峰 郭芙 黄蓉 李莫愁 陈家洛 杨过 忽必烈 鳌拜 王语嫣

洪七公 韦小宝 阿朱 梅超风 段誉 岳灵珊 完颜洪烈 乔峰 段誉 杨过 杨过 慕容复

黄蓉 杨过 阿紫 杨逍 张三丰 张三丰 赵敏 张三丰 杨逍 黄蓉 金轮法王 郭襄

张三丰 令狐冲 郭芙 韦小宝 黄药师 阿紫 韦小宝 金轮法王 杨逍 令狐冲 阿紫

洪七公 袁冠南 双儿 郭靖 鳌拜 谢逊 阿紫 郭襄 梅超风 张无忌 段誉 忽必烈

完颜洪烈 双儿 逍遥子 谢逊 完颜洪烈 殷天正 金轮法王 张三丰 双儿 郭襄 阿朱

郭襄 双儿 李莫愁 郭襄 忽必烈 金轮法王 张无忌 鳌拜 忽必烈 郭襄 令狐冲

谢逊 梅超风 殷天正 段誉 袁冠南 张三丰 王语嫣 阿紫 谢逊 杨过 郭靖 黄蓉

双儿 灭绝师太 段誉 张无忌 陈家洛 黄蓉 鳌拜 黄药师 逍遥子 忽必烈 赵敏

逍遥子 完颜洪烈 金轮法王 双儿 鳌拜 洪七公 郭芙 郭襄'''

s1=s.split()

st1=set(s1)

print(len(st1))

练习4:字典翻转输出

描述:

读入一个字典类型的字符串,反转其中键值对输出。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

即,读入字典key:value模式,输出value:key模式。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

输入格式:

用户输入的字典格式的字符串,如果输入不正确,提示:输入错误。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

输出格式‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬:

给定字典d,按照print(d)方式输出‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

输入输出示例:

输入

输出

示例 1

{"a": 1, "b": 2}

{1: 'a', 2: 'b'}

参考代码:

#week6_4.py

#反转输入字典的键与值

s = input()

try:

d = eval(s) #d是字典,可以用 for in 遍历

e = {} #一个空字典

for k in d: #遍历d

e[d[k]] = k #注意d[k]的用法,相当于自定义索引!,键值互换

print(e)

except:

print("输入错误")

练习5:《沉默的羔羊》之最多单词

描述:

附件是《沉默的羔羊》中文版内容,请读入内容,分词后输出长度大于2且最多的单词。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

如果存在多个单词出现频率一致,请输出按照Unicode排序后最大的单词。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

输入格式:

文件‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

输出格式:

字符串

我的代码:

#week6_5.py

#附件是《沉默的羔羊》中文版内容,请读入内容,分词后输出长度大于2且最多的单词。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

#如果存在多个单词出现频率一致,请输出按照Unicode排序后最大的单词。

import jieba

txt = open("沉默的羔羊.txt","r",encoding='utf-8').read()

words = jieba.lcut(txt)

nums = {}

for word in words:

if len(word)<=2:

continue

else:

nums[word] =nums.get(word,0) + 1

items = list(nums.items())

items.sort(key=lambda x:x[0],reverse=True)

items.sort(key=lambda x:x[1],reverse=True)

print(items[0][0])

我不能确定两次排序的方法能否一定满足描述的第2条:“如果存在多个单词出现频率一致,请输出按照Unicode排序后最大的单词。”,但是通过的程序检测。

参考代码:

import jieba

f = open("沉默的羔羊.txt")

ls = jieba.lcut(f.read())

#ls = f.read().split()

d = {}

for w in ls:

d[w] = d.get(w, 0) + 1

maxc = 0

maxw = ""

for k in d:

if d[k] > maxc and len(k) > 2:

maxc = d[k]

maxw = k

if d[k] == maxc and len(k) > 2 and k > maxw:

maxw = k

print(maxw)

f.close()

说明:参考代码在电脑上不能正确运行,不知在平台上能否正确运行。

------------------------------------------------没有啦--------------------------------------------------------------

python哈姆雷特英文词频统计_MOOC《Python语言程序设计》第6周练习题相关推荐

  1. Python 《Hamlet》哈姆雷特英文词频统计

    英文词频统计 关键问题: 1.词语 -- 键 2.相同词语的累加 -- 值 讨论:定义什么数据类型 -- 字典类型 问题描述: I:文件的输入 P:采用字典类型的结构统计词语出现的频率 O:每个单词及 ...

  2. python哈姆雷特知识分析

    哈姆雷特英文词频分析 def getText(): txt=open("hamlet.txt","r").read()#打开文本,输入具体的文本路径 r为文件打 ...

  3. Python英文词频统计(哈姆雷特)程序示例

    今天继续给大家介绍Python相关知识,本文主要内容是Python英文词频统计程序示例,主要是对英文文本--<哈姆雷特>进行分词. 一.英文文本词频统计思路 想要对<哈姆雷特> ...

  4. python哈姆雷特词频统计_《哈姆雷特与三国演义》词频统计,Hamlet,和

    利用python实现对中英文文本的词频统计 英文文本<Hamlet> code1: #CalHamlet.py def getText(): txt = open("hamlet ...

  5. Hadoop的改进实验(中文分词词频统计及英文词频统计)(1/4)

    声明: 1)本文由我bitpeach原创撰写,转载时请注明出处,侵权必究. 2)本小实验工作环境为Windows系统下的百度云(联网),和Ubuntu系统的hadoop1-2-1(自己提前配好).如不 ...

  6. 组合数据类型练习,英文词频统计实例上(2017.9.22)

    字典实例:建立学生学号成绩字典,做增删改查遍历操作. sno=['33号','34号','35号','36号'] grade=[100,90,80,120] d={'33号':100,'34号':90 ...

  7. Hadoop的改进实验(中文分词词频统计及英文词频统计)(4/4)

    声明: 1)本文由我bitpeach原创撰写,转载时请注明出处,侵权必究. 2)本小实验工作环境为Windows系统下的百度云(联网),和Ubuntu系统的hadoop1-2-1(自己提前配好).如不 ...

  8. 组合数据类型练习,英文词频统计实例上

    1.name=['陈楠芸','陈文琪','刘书签','杨必须'] scores=[7,6,6,5] d={'陈楠芸':7,'陈文琪':6,'刘书签':6,'杨必须':5} print(d) #增加 d ...

  9. Hadoop的改进实验(中文分词词频统计及英文词频统计)(2/4)

    声明: 1)本文由我bitpeach原创撰写,转载时请注明出处,侵权必究. 2)本小实验工作环境为Windows系统下的百度云(联网),和Ubuntu系统的hadoop1-2-1(自己提前配好).如不 ...

  10. 字符串操作、文件操作,英文词频统计预处理

    1.字符串操作: 解析身份证号:生日.性别.出生地等 凯撒密码编码与解码 网址观察与批量生成 (1)解析身份证: 编译结果: (2)凯撒密码编码与解码 编译结果: 2.英文词频统计预处理 下载一首英文 ...

最新文章

  1. outlook2010 打开总是提示“正在加载配置文件”
  2. 保护模式 对CPL,RPL,DPL 的总结
  3. 离线轻量级大数据平台Spark之MLib机器学习库Word2Vec实例
  4. 最优的cuda线程配置
  5. php如何解决并发问题,PHP如何解决并发问题
  6. python3如何连接mysql数据库
  7. LeetCode 1796. 字符串中第二大的数字
  8. [译] Node.js 流: 你需要知道的一切
  9. gpg: verify signatures failed: 文件打开错误
  10. GBDT算法参数详解
  11. 在NI TestStand中使用回调
  12. STM32教程(库函数版):STM32库函数开发实例教程
  13. linux 该文件的owner,Linux修改文件/目录的owner/group方法(转载)
  14. Express框架概述
  15. candence测量尺寸
  16. 商汤科技推出SenseCore AI大装置,打造物理世界的搜索引擎
  17. random randint randn
  18. ArcGIS栅格裁剪
  19. Rasa课程、Rasa培训、Rasa面试、Rasa实战系列之 Model Confidence v2
  20. jkd8新特性 StreamAPi流

热门文章

  1. 【剑指offer】出现次数超过一半的数字
  2. .net 根据银行卡获取银行信息
  3. 专访飞康新任CEO:云时代下,我们更懂数据保护
  4. 2010年安全主题展望
  5. 再暴BBSxp 7.0 Beta 2漏洞
  6. 关于10月16日数据迁移致网友的致歉信
  7. 17.软件架构设计:大型网站技术架构与业务架构融合之道 --- 团队能力的提升
  8. 9.template -- basic concepts
  9. 23. 变量、作用域和内存问题
  10. 28. Element nodeValue 属性