2016-12-19 5 views
0

私はこの質問を、カウンターを使った宿題の前にしました。今、私は決勝で同じ質問をしています。私は辞書を覚えておきたいと思います。代わりに辞書を使ってこの問題を解決しようとしました。repeatCount関数は私に正しい答えを与えません。なぜこれが起こるのですか?

問題は、関数名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

各行にdictを再設定すると、正しい出力が得られます。すなわち、外側のforループの内側にd = {}を移動してください。それはあなたの現在の入力のために働くでしょう。しかし、内側のforループは、既にカウントされた重複単語を無視していないので、まだバグです。もう一度やり直して次の反復を見せてください!

+0

それは助けた!私の上の人の答えは同じことをしましたが、彼は私のコードをもう少し修正しました。私はちょうどあなたが言ったことに続き、それは単に私に正しい答えをくれました! – Jorgan

0

forループ内部辞書を宣言@gipsy

移動によって示唆されるように。また、リストの組み込み関数カウントを使用して、単語の実際の数を取得します。

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

+0

私がしたのは、あなたがしたようにd = {}を入れていましたが、私は 'wc = words.count(word)'をやっていませんでした。ありがとうございました! – Jorgan

関連する問題