2016-08-15 4 views
-3

「」から読み込まれ、その後、あなたは書き込みのためにファイルを開いているは、ファイル内の値を入力環境により、平均値を計算すると、コードが

num = 3 
try:  #set an exception in case of a file Error 

    while num >=0: '''read in values and place them in a file''' 
     value = int(input("Enter values: ")) 
     my_file = open('my_data.txt', 'w+') 
     my_file.write(str(value)) 
     numbers = my_file.readlines() 
     num -=1 
    my_file.close() 

except IOError: 
    print('FILE FAILURE') 

'''iterate to find the sum of the values in a file''' 
total = 0 
    for ln in numbers: 
     total += int(ln) 

'''Calculate the average''' 
avg = total/len(numbers) 
    print("The average is %d"%(avg))#FIXME: does not calculate average 
+1

"コードが間違った出力を生成する"どのくらい正確ですか?入力と出力の例を提供する必要があります。それを切り捨てるすべての反復でファイルを開いていることに注意してください。なぜあなたはファイルに書き込んですぐにそれを読むのですか? – DeepSpace

+0

@DeepSpace値を入力すると、たとえば、2,4,7,5となります。出力は常に3番目の数値です。この例では7.ありがとう! – Umubale

+0

私のコメントの残りの部分も参照してください。 – DeepSpace

答えて

0

を「」「この単純なプログラムは、ファイルを使用して平均値を計算します」間違った出力を生成しますそれを変数numbersに代入します。しかし、この変数はリストではありませんが、for ln in numbersを実行するとリストとして扱われます。

さらに、あなたは私はあなたのコードを理解する方法に基づいて\n

のファイルに書かれた行を終了する必要があり、あなたがしたい:

  • は、ユーザー入力を取得し、
  • をファイルに書き込みますファイルから、数字を読む
  • 数値から平均を計算する

statisticsモジュールがあり、計算部分を行う機能はmeanです。残りの部分は、上記の3つの箇条書きのような構造にすることができます。

from statistics import mean 

def inputnumbers(itterations, filename): 
    with open(filename, 'w') as openfile: 
     while itterations > 0: 
      try: 
       value=int(input("value->")) 
      except ValueError: 
       print('Numbers only please') 
       continue 
      openfile.write(str(value) + '\n') 
      itterations -= 1 

def getaveragefromfile(filename): 
    numbers = [] 
    with open(filename, 'r') as openfile: 
     for line in openfile.readlines(): 
      numbers.append(int(line.replace('\n',''))) 
    return mean(numbers) 

def main(): 
    filename = r'c:\testing\my_data.txt' 
    itterations = int(input('how many numbers:')) 
    inputnumbers(itterations, filename) 
    average = getaveragefromfile(filename) 
    print(average) 

if __name__ == '__main__': 
    main() 
関連する問題