import jieba txt=open("战争与和平.txt",'r',encoding='utf-8').read() words=jieba.lcut(txt) counts={} for word in words: if len(word)==1: continue elif len(word)==2: continue elif word=="公爵": rword="安德烈" elif word=="小姐": rword="娜塔莎" elif word=="伯爵": rword="皮埃尔" else: rword=word counts[rword]=counts.get(rword,0)+1 items=list(counts.items()) items.sort(key=lambda x:x[1],reverse=True) for i in range(10): word,count=items[i] print("{:<10}{:>5}".format(word,count)) import matplotlib.pyplot as plt word=[] count=[] plt.bar(word,count) plt.title('《战争与和平》中出现最多的10个人') plt.xlabel('人名') plt.ylabel('出现次数') plt.show这个代码的错误在哪里怎么改正
时间: 2024-03-21 12:37:46 浏览: 115
这段代码中出现了两个问题。第一个问题是 `word` 和 `count` 列表没有被正确赋值,第二个问题是没有将出现次数 `count` 添加到 `count` 列表中。
以下是修改后的代码:
```
import jieba
import matplotlib.pyplot as plt
txt = open("战争与和平.txt", 'r', encoding='utf-8').read()
words = jieba.lcut(txt)
counts = {}
for word in words:
if len(word) == 1:
continue
elif len(word) == 2:
continue
elif word == "公爵":
rword = "安德烈"
elif word == "小姐":
rword = "娜塔莎"
elif word == "伯爵":
rword = "皮埃尔"
else:
rword = word
counts[rword] = counts.get(rword, 0) + 1
items = list(counts.items())
items.sort(key=lambda x: x[1], reverse=True)
# 取出前 10 个人名及对应的出现次数
for i in range(10):
word, count = items[i]
print("{:<10}{:>5}".format(word, count))
word.append(word)
count.append(count)
# 绘制柱状图
plt.bar(word, count)
plt.title('《战争与和平》中出现最多的10个人')
plt.xlabel('人名')
plt.ylabel('出现次数')
plt.show()
```
在修改后的代码中,我们将 `word` 和 `count` 定义为空列表,并在循环中分别向它们添加数据。在绘制柱状图时,我们使用 `word` 和 `count` 列表中的数据来绘制柱状图。
阅读全文