我之前使用计数器完成了我的家庭作业。现在,我正在研究同样的问题进行决赛。我想记住词典,而不是计数器。我尝试使用字典来解决这个问题。
所以问题是创建函数名称repeatCount。该函数的目的是读取输入文件的每一行,识别出现多次出现的行数,并将该数字写入输出文件中的一行。
输入文件文本为:
Woke up this morning with an ache in my head
I splashed on my clothes as I spilled out of bed
I opened the window to listen to the news
But all I heard was the Establishment Blues
我的输出文件应如下所示:
0
2
3
2
正确的输出是:
0
1
2
0
现在这是我的代码。我的代码的哪个特定部分导致Python产生错误的答案?:
def repeatCount(inFile, outFile):
inF = open(inFile, 'r')
outF = open(outFile, 'w')
d = {}
for line in inF.readlines():
count = 0
words = line.split()
for word in words:
if word not in d:
d[word] = 1
elif word in d:
d[word] += 1
if d[word] > 1:
count += 1
outF.write(str(count) + "\n")
print(repeatCount('inputFile.txt', 'outputFile.txt'))
答案 0 :(得分:0)
如果您为每一行重新设置dict,程序将开始为您提供正确的输出。即。将d = {}
移动到外部for循环内部。然后它将适用于您当前的输入。但是你的内部for循环仍然是错误的,因为它不会忽略已经计算过的重复单词。再试一次,向我们展示你的下一次迭代!
答案 1 :(得分:0)
根据 @gipsy
的建议在for循环中移动声明字典。还可以使用list inbuilt函数 count 来获取单词的实际计数。
d = {}
修改后的代码版本。
def repeatCount(inFile, outFile):
inF = open(inFile, 'r')
outF = open(outFile, 'w')
for line in inF.readlines():
d = {}
count = 0
words = line.split()
for word in words:
if word not in d:
wc = words.count(word)
d[word] = 1
if wc > 1:
count += 1
outF.write(str(count) + "\n")
print(repeatCount('inputFile.txt', 'outputFile.txt'))
您还可以改进代码。请参阅Python: count frequency of words in a list