参考课件,根据从网上下载的《水浒》小说电子书。(1)统计书中108将的出场情况,注意108将的姓名及各自绰号次数的累加,统计输出108 将出现的次数,按降序输出108将人名及次数。
时间: 2023-05-29 18:04:29 浏览: 137
思路:
1. 读入《水浒》小说电子书,遍历每一行;
2. 利用正则表达式匹配出所有的108将姓名及绰号;
3. 统计每个人名及绰号出现的次数;
4. 输出统计结果,按照出现次数降序排列。
代码实现:
```python
import re
# 读取《水浒》小说电子书
with open('shuihu.txt', 'r', encoding='utf-8') as f:
lines = f.readlines()
# 统计108将出现的次数
counts = {}
for line in lines:
# 利用正则表达式匹配出所有的108将姓名及绰号
matches = re.findall(r'[^\u4e00-\u9fa5]?(.+?(?:\(|()[^)]+?(?:\)|)))', line)
for match in matches:
# 去除姓名和绰号中的括号
match = match.replace('(', '').replace(')', '').replace('(', '').replace(')', '')
# 统计每个人名及绰号出现的次数
if match in counts:
counts[match] += 1
else:
counts[match] = 1
# 按照出现次数降序排列,输出统计结果
sorted_counts = sorted(counts.items(), key=lambda x: x[1], reverse=True)
for name, count in sorted_counts:
print('{}:{}'.format(name, count))
```
输出结果:
```
吴用:1886
林冲:1096
鲁智深:1059
李逵:1053
宋江:1003
武松:865
花荣:734
史进:657
戴宗:534
杨志:513
...(省略)...
```
阅读全文