2017-11-11 51 views
0

每當我運行函數來計算高於平均值的分數的百分比,我會得到輸出56.301。正確答案應該是34.平均值是54.8415588235294。分數高於平均值的百分比。這個函數應該接受兩個參數:分數列表和平均值

#This function calls on the data file 
def get_meet_scores_from_file(): 
     input_file = open('state_meet.txt','r') 
     all_around_points = [] 
     aline = input_file.readline() 

     while aline: 
      values = aline.split(',') 
      all_around_points.append(float(values[2])) 
      aline = input_file.readline() 
     input_file.close() 
     return all_around_points 

    #This function calculates the average. 
    def average_scores(score_list): 
     average_of_scores = 0 
     list_length = len(score_list) 
     for index in range (list_length): 
      list_item = score_list[index] 
      average_of_scores = average_of_scores + (list_item/list_length) 
     return average_of_scores 

    # This is the function that is causing the problem. 
    #I am trying to get the code to count the number of scores above the average [enter link description here][1]so I can continue and with the code to determine the percentage. 
    def percentage_above_average(score_list,average): 
     above_average = score_list[0] 
     for i in range(int(above_average)): 
      if above_average > average: 
       above_average = above_average + 1 
      return above_average 
+0

迄今爲止唯一的事情我正在嘗試在函數percentage_above_average中計算高於平均值的分數。我知道它不會計算出百分比。 –

回答

0

你的邏輯percentage_above_average是沒有意義的。你所做的只是在score_list中取得第一個分數,如果它高於平均分數則加1,並返回該數字。這只是給你一個特定的分數,在這個例子中增加了1;這不是任何比例或數量。

你需要做的是循環通過score_list,計數得分高於平均值,並將該計數除以len(score_list)。該守則將是這個樣子:

def percentage_above_average(score_list,average): 
    above_average = 0 
    list_length = len(score_list) 
    for index in range (list_length): 
     if score_list[index] > average: 
      above_average = above_average + 1 
    return above_average/list_length 
0

得分高於平均水平的百分比將得分高於平均水平的得分的總數除以人數。

這裏的計算在滿足一定條件下可迭代的一些數一個可愛的小方法

sum(1 for i in iterable if some_condition(i)) 

當然,我們可以通過獲取列表包含它們

長度得到的分數總數
len(score_list) 

因此,我們可以把這些在一起,使我們的函數

def percentage_above_average(score_list,average): 
    above_count = sum(1 for score in score_list if score > average) 
    return above_count/len(score_list)