2017-11-11 53 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)