2016-08-13 12 views
-1

は、ファイル名の入力を求められたプログラムを書いて、選択した行の番号をフロートそれらを追加して計算し、そのファイルを開き、 は、フォームの行を探して、ファイルを介して読み取ります。カウントラインは、平均

X-DSPAM-Confidence: 0.8475

これらのラインをカウントし ラインの各々から浮動小数点値を抽出し、それらの値の平均値を計算し、以下に示すように 出力を生成します。ソリューション内に関数または変数 という名前のsumを使用しないでください。あなたは以下のテストファイル名としてmbox-short.txtを入力している場合

あなたは http://www.pythonlearn.com/code/mbox-short.txt
でサンプルデータをダウンロードすることができます。

これは私のコードであり、動作しません。あなたはそれを修正する方法を知っている場合は、(可能な限りシンプルに)説明してください:

# Use the file name mbox-short.txt as the file name 
fname = raw_input("Enter file name: ") 
fh = open(fname) 
count = 0 
total = 0 
for line in fh: 
    if not float(line.startswith("X-DSPAM-Confidence:")) : continue 
    count = count + 1 
    float(total) = float(total) + float(line) 
float(average = total/count) 
print "Average spam confidence: ", average 

正しい答えは次のようになります。あなたが実際にからfloat値を抽出するために、あなたのコード内で何もしていないAverage spam confidence: 0.750718518519

+0

行の残りの部分から浮動小数点数の文字列を抽出してから変換するか、算術演算を行う必要があります。 「行」にはまだ行全体が含まれています。 – mpez0

+1

まず、コードから構文エラーを取り除くことです。あなたはロジックを修正しようとする前にそれを行います。あなたはここであなたの質問をする前にそれをしておかなければなりません。あなたはそのように良く学びます。 –

答えて

1

この線。 lineを浮動小数点形式にキャストして、それを合計することはできません。lineはファイルの行全体を参照しているためです。浮動小数点値を抽出する簡単な方法は、行を:で分割し、その後すべてを取ることです。これは次のようにすることができます。floatnum = line.split(':')[1][1]は、分割した区切り文字(この場合は:)の後ろのすべてを取ることを意味します。

あなたのコードにはいくつかのエラーがありますので、フロートをどのように抽出して、使用しているメソッドに適用してコードを調整すれば良いでしょうか。

fname = raw_input('Enter file name: ') 
file = open(fname) 

counter = 0 
total = 0.0 

for line in file: 
    if 'X-DSPAM-Confidence:' in line: # checks to see if line pertains to you 
     counter += 1      # if so, increment counter 
     floatnum = line.split(':')[1] # splits line at ':' and takes everything after it 
     total += float(floatnum)   # ... and adjust total 

average = total/counter     # gets average 

print 'Average spam confidence: ' + str(average) 

私は、入力として、このファイルを使用し、含まれています:ここで

は、それはあなたが必要なものを成し遂げるでしょうが、あなたのための作業例です

hello world 
X-DSPAM-Confidence: 0.8475 
hello world 
X-DSPAM-Confidence: 0.8400 
hello world 
X-DSPAM-Confidence: 0.9475 
hello world 

結果: Average spam confidence: 0.878333333333

+0

'floatnum.lstrip()。strip( '\ n')'は何もしませんが、 'float'は先頭と末尾の空白を無視するので、コードには影響しません。 – DSM

+0

@DSMあなたは完全に正しいです、私の悪いです。それを削除しました。 – Harrison

+0

ありがとうございます! –