2016-05-05 9 views
0

pythonの場合は、テキストファイルの単語数を計算し、1文あたりの平均単語数を表示するという課題があります。しかし、平均単語数は常に1になる。テキストファイルの行数をどのように数えますか?

テキストファイルはここ

Hello 
How are you 
I am fine 
Have a good day 
Bye 

では間違っているコード

def main(): 
    num_words = 0 
    total_words = 0 
    total_lines = 0 

    in_file = open("text.txt", "r") 

    line = in_file.readline() 

    while line != "": 
     num_words = 0 
     num_lines = 0 
     line_list = line.split() 

     for word in line_list: 
      num_words = num_words + 1 

     for line in line_list: 
      num_lines = num_lines + 1 

     total_words = total_words + num_words 

     total_lines = total_lines + num_lines 
     average = total_words/total_lines 
     line = in_file.readline() 

    print "Total words: ", total_words 
    print "Average number of words per sentence: ", average 

    in_file.close() 

main() 

答えて

0

Aこれを行うためのより良い方法は、以下のようになります。

f = open('in_file.dat') 

num_lines = 0 
tot_words = 0 

for line in f: 
    num_lines += 1 
    tot_words += len(line.split()) 

average = tot_words/num_lines 

print(average) 
0
for line in line_list: 
     num_lines = num_lines + 1 

^です。 line_listは単語です - 1行に1回だけではなく、すべての単語に1つの "行"を追加します。 whileループ内にはnum_lines = num_lines + 1の1つのみが必要です。

0

これは宿題なので、私はヒントを与えるだけです。

分割は何ですか? 「for x in y:」とは何ですか?

単語と行が正しくカウントされていることを確認してください。

0

あなたの仕事は、あたりの単語の平均数を決定することです。センテンスは完全停止/ピリオド(および疑問符などの)文字で終了し、行にまたがることも、1つの行に複数のセンテンスを含めることもできます。サンプルデータがすべて処理する必要がある場合もあります。この場合、1行に1つの文が存在するという前提が当てはまります。それがなければ'.''?'などを特別に扱う必要があります。

total_linestotal_wordsが常に同じであるため、特定の問題に対処すると、平均値は1になります。これは、行と単語が同等に扱われるためです。

for line in line_list: 
    num_lines = num_lines + 1 

そして、あなたはまた

total_lines = total_lines + num_lines 

total_lines = total_lines + 1 

変更することができ、よう:それは実際には、ない行の単語をカウントしているので、

あなたは、このコードは必要ありません。 Python 2を使用している場合、平均計算では整数除算が使用されます。つまり、結果が切り捨てられます。値の1つを浮動小数点にキャストすることによって強制的に浮動小数点除算を行うことができます:

average = float(total_words)/total_lines 
関連する問題