repeatCount函数没有给我正确的答案。为什么会这样?

时间:2016-12-19 04:14:58

标签: python dictionary text python-3.4

我之前使用计数器完成了我的家庭作业。现在,我正在研究同样的问题进行决赛。我想记住词典,而不是计数器。我尝试使用字典来解决这个问题。

所以问题是创建函数名称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'))

2 个答案:

答案 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