2017-12-08 4 views
0

だから私はすべてを把握しました。しかし今はif文を使ってループに22 mpg以下の平均音圧(.txtファイルから)を取り出し、それを平均化してIDLEに出力するようにしています。ループの前にifステートメントを実行する必要があるような気がします。私は本当に何を変える必要があるか分かりません。私は、テキストファイルのデータを保持する変数をスライスすることができるはずです。とにかくここに私のコードです。誰かが私が何を正しくしていないのか理解できるように助けることができますか?ただ、明確にするif文Python 3の平均値を取得

def cityGasGuzzler(): 
# Input:that assigns a text file to a value and provides other definition 
values 
cityGuzz = open("carModelData_city.","r") 
# Process: For loop to get average of gas guzzling city street driving 
    vehicles 
for line in cityGuzz: 
# Process: Uses if statement to get the average of lower mpg or gas guzzlers 
    if cityGuzz[0:-1] < 22: 
     sum = sum + eval(line) 
     count = count + 1 
     avrg = sum/count 
# Output: using the round function to get average to the 2nd decimal place 
#   and prints string and rounded variable to IDLE. 
print("The average city MPG is,", round(avrg, 2)) 



cityGasGuzzler() 

は、次のように私の主な目的は、22未満のテキストファイルから数値をとり、平均はIDLEにそれらのアップと出力を平均化。

+0

* "私はフロート値を付加して返すと信じています" * - これは正しくなく、それ以外は何故考えていたのかは不明です。 '私はlen(text1)のために.readline' - ...何? – jonrsharpe

+0

@jonrsharpeテキストファイルの値は浮動小数点です。ループが進行する限り、私は予想通りの結果が得られるように、これを理解できるようにしようとしています。 – Woop

+0

*は*浮動小数点数を表しますが、自分自身で 'float()'が何をすると思ったのかは分かりません。構造化された学習を強くお勧めします。 https://sopython.com/wiki/What_tutorial_should_I_read%3F – jonrsharpe

答えて

0

私が正しく質問を理解していれば、あなたの問題は、この行である:cityGuzzはファイルオブジェクトではなく、現在の行であるので、いくつかの理由ではなく、少なくともために働いていない

if cityGuzz[0:-1] < 22: 

22のような数字と比較する前に、現在の行を数値に変換する必要があります。 sumは組み込み関数の名前であるので、私はtotalsumと改名

total = 0 # renamed to avoid masking the builtin sum function 
count = 0 

for line in cityGuzz: 
    mpg = float(line) 
    if mpg < 22: 
     total += mpg 
     count += 1 

average = total/count 

はこのような何かを試してみてください。実際には、明示的なループを置き換えてファイルから値を加算すると便利な場合があります。

guzzlers = [mpg for mpg in map(float, cityGuzz) if mpg < 22] 
average = sum(guzzlers)/len(guzzlers) 
+0

ありがとうございます!トップはうまくいって、私はボトムも試してみます。 – Woop

1

問題は、ループの各繰り返しで数量に分割しようとしていることです。また、コードにいくつか間違いがあります。これを試してみてください。

sum = 0.0 
quantity = 0 
with open('file.txt', 'r') as f: 
    for line in f.readline(): 
     if line.isdigit(): 
      sum += float(line) 
      quantity += 1 
average = sum/quantity 
print average 
+0

これはうまくいったが、私はIDLEに少数の出力を得た。これをコード化するより基本的な方法がありますか? – Woop

+0

@Woop、これはかなり基本的なコードです。あなたは一般的にプログラミングでもっと練習しなければなりません。 PythonドキュメントとAPIを読んでみてください。明らかでない場合は、おそらくどの言語でもプログラミングに関する基本的なコースが必要です。 –

+0

はいローガーです。私はCSクラスとPythonを学んでいますが、私も化学を勉強しています。化学ははるかに難しく、ほとんどの時間を取っています。私は休憩中にCSクラスの多くを見直すつもりです。プラス私はそれをプログラムを構築しています。だから、助けを求める投稿を見る準備ができている。あなたの助けをもう一度ありがとう! – Woop