代码如下:
import string
def countfeq(word_list):
word_list=word_list.strip('\r\n')
word_list=word_list.split('/')
word_list_dict={}
for i in word_list:
if i in word_list_dict.keys():
word_list_dict[i]+=1
else:
word_list_dict[i]=1
return word_list_dict
if __name__ == "__main__":
file=open('words.txt','r',encoding='utf-8')
word_list=file.read()
result=countfeq(word_list)
word=input()
if word in result.keys():
print(result[word])
else:
print(0)
其中words.txt中内容为:
我/是/一个/测试/句子/,/大家/赶快/来/统计/我/吧/,/大家/赶快/来/统计/我/吧/,/大家/赶快/来/统计/我/吧/,/重要/事情/说/三遍/!/
我/是/一个/测试/句子/,/大家/赶快/来/统计/我/吧/,/大家/赶快/来/统计/我/吧/,/大家/赶快/来/统计/我/吧/,/重要/事情/说/三遍/!/
我/是/一个/测试/句子/,/大家/赶快/来/统计/我/吧/,/大家/赶快/来/统计/我/吧/,/大家/赶快/来/统计/我/吧/,/重要/事情/说/三遍/!/
统计结果“我”应该出现12次,目前我的代码只能出现10次,请问是什么原因。如何解决,谢谢
word_list=word_list.strip('\r\n')只能去掉文本开头和结尾两边的\r\n。
文本中间的\r\n没有去掉。
你输出下word_list_dict字典就知道是什么原因了。
应该用
word_list=word_list.replace('\n',"").replace('\r',"")
或者在循环中对每个元素用i.strip()也可以
def countfeq(word_list):
word_list=word_list.split('/')
word_list_dict={}
for i in word_list:
i = i.strip() #在循环中对每个元素用i.strip()也可以
if i in word_list_dict.keys():
word_list_dict[i]+=1
else:
word_list_dict[i]=1
return word_list_dict
strip只能去掉字符串首尾的空分隔符,中间的空分隔符还会存在,因此,words.txt中第2行、第3行开始的“我”和前一行的换行符被前后两个/分割成一个关键字,“我”字就会少两个。另外,导入string意欲何为?下面是我帮题主修改后的代码。
def countfeq(word_list):
result = dict()
for line in word_list:
for w in line.split('/'):
result.update({w:result.get(w,0) + 1})
return result
if __name__ == "__main__":
with open('words.txt','r',encoding='utf-8') as fp:
word_list = fp.readlines()
result = countfeq(word_list)
word = input('请输入:')
if word in result.keys():
print(result[word])
else:
print(0)