PTA_浙大版《Python 程序设计》题目集第7章-1 词频统计分数 30

第7章-1 词频统计

分数 30

全屏浏览题目

切换布局

作者 DS课程组

单位 浙江大学

请编写程序,对一段英文文本,统计其中所有不同单词的个数,以及词频最大的前10%的单词。

所谓“单词”,是指由不超过80个单词字符组成的连续字符串,但长度超过15的单词将只截取保留前15个单词字符。而合法的“单词字符”为大小写字母、数字和下划线,其它字符均认为是单词分隔符。

输入格式:

输入给出一段非空文本,最后以符号#结尾。输入保证存在至少10个不同的单词。

输出格式:

在第一行中输出文本中所有不同单词的个数。注意“单词”不区分英文大小写,例如“PAT”和“pat”被认为是同一个单词。

随后按照词频递减的顺序,按照词频:单词的格式输出词频最大的前10%的单词。若有并列,则按递增字典序输出。

输入样例:

This is a test.

The word "this" is the word with the highest frequency.

Longlonglonglongword should be cut off, so is considered as the same as longlonglonglonee.  But this_8 is different than this, and this, and this...#
this line should be ignored.

输出样例:(注意:虽然单词the也出现了4次,但因为我们只要输出前10%(即23个单词中的前2个)单词,而按照字母序,the排第3位,所以不输出。)

23
5:this
4:is

感谢武汉理工大学的郭小兵老师修正测试数据!

代码长度限制

16 KB

时间限制

2000 ms

内存限制

64 MB

感想:由于我当时学Python是买的北理工嵩天老师的书,没有买浙大版Python,没有读者验证码,无法在PTA系统中提交代码运行,所以只能自己在VScode 中跑了几个例子,代码可能有所欠缺,但基本思路都对了

参考代码:

def readInput():
    res=""
    word=input()
    while word.count('#')==0:
        res+=word
        word=input()
    res+=(word.split('#'))[0]
    return res

read=readInput()
# print("打印输入:",read)
specialChar='!"#$%&()*+,-./:;<=>?@[\\]^`{|}~'
for ch in specialChar:
    read=read.replace(ch,' ')
read=read.lower()
words=read.split(' ')
# for word in words:
#     print(word,end=" ")

counts={}   #字典counts
for word in words:
    counts[word]=counts.get(word,0)+1

items=list(counts.items())
items.sort(key=lambda x:x[1],reverse=True)
uniqueSum=len(items)
span=int(0.1*uniqueSum)
print(uniqueSum)
for i in range(span):
    word,count=items[i]
    print(str(count)+":"+word)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值