在需要统计若干段文字(英文)中的单词数量,并且还需统计每个单词出现的次数。 注1:单词之间以空格(1个或多个空格)为间隔。 注2:忽略空行或者空格行。 要求: 统计前,需要从文字中删除指定标点符号!.,:*?#和0至9的数字。 注意:所谓的删除,就是用1个空格替换掉相应字符。 统计单词时需要忽略单词的大小写。 单词个数为0时。只需显示“0”。 输入格式: 若干行英文,最后以%%%为结束。。 输出格式: 单词数量 出现次数排名前6的单词(次数按照降序排序,如果次数相同,则按照键值的字母升序排序)及出现次数。
时间: 2024-02-15 18:04:03 浏览: 27
不好意思,刚才我给你的程序中有一些小错误。以下是修改后的程序:
```python
import re
from collections import Counter
# 删除指定标点符号和数字
def remove_punctuation(text):
return re.sub('[!.,:*?#\d]', ' ', text)
# 统计单词数量并排序
def count_words(text):
words = text.lower().split()
count = Counter(words)
return count.most_common()
# 读入文本
text = ''
while True:
line = input()
if line == '%%%':
break
text += line + '\n'
# 删除标点符号和数字
text = remove_punctuation(text)
# 统计单词数量
count = count_words(text)
# 输出结果
if len(count) == 0:
print('0')
else:
print(len(count))
for word, word_count in sorted(count, key=lambda x: (-x[1], x[0]))[:6]:
print('{} {}'.format(word, word_count))
```
这个程序与之前的程序基本相同,只是在删除标点符号和数字的时候使用了更简洁的正则表达式,并修改了输出结果的格式。另外,当单词数量为0时,会输出“0”。
需要注意的是,在输出出现次数排名前6的单词时,如果次数相同,则按照键值的字母升序排序。这里使用了 `sorted` 函数,并使用了 `lambda` 表达式来指定排序的方式。
阅读全文