2015-02-25 1 views
0

вот мой код. Я не уверен, что я делаю что-то неправильно в коде, потому что среднее кажется неправильным. пожалуйста помогите. Спасибонайти среднее значение и выше среднего значения с использованием функции def в python

def enter_score(): 
    results = [] 
    scores = int(input("How many results to enter? : ")) 
    for i in range(scores): 
     student_name = input("enter student name: ") 
     student_score = int(input("Please enter score for student " + student_name + " : ")) 
     results.append(student_score) 
     results.append(student_name) 
     print(results) 
    return results 

def calc_average(): 
    total=0 
    total=total+student_score 
    average= total/scores 
    print("the average is ", average) 
    return 
def above_average(): 
    above_average=0 
    for i in range (scores): 
    if results [i] > average: 
     above_average = above_average + 1 
     print(" the above average score is ", above_average) 
    return above_average 

enter_score() 
calc_average() 
above_average() 
+0

Почему вы помещаете имена учеников и их оценки в один список? – Marcin

+0

@Marcin я помещаю имена и оценки учеников в один список, чтобы я мог вернуть значение в пустой список. –

+0

Это из курса или это связано с GCSE, потому что оно повторяется почти ежедневно? –

ответ

1

Вы делаете список results, содержащие результаты и имена чередующихся - очень трудно. Вы возвращаете этот список от enter_score, затем полностью игнорируете - вы его выбросите! Так что две другие функции должны работать над какой-то магией или тонким воздухом ...?

Очевидно, что общий поток в конце должен быть вместо этого:

results = enter_score() 
average = calc_average(results) 
above_average(results_average) 

и calc_average должны заканчиваться return average.

results лучше организованы путем замены двух results.append вызовов ни с одной:

results.append((student_score, student_name)) 

т.е., сделать список кортежей, а не странно сочетание цифр и имен.

Две другие функции, очевидно, должны зацикливаться на этом списке (который они теперь получают в качестве аргумента) для выполнения своих соответствующих заданий.

Итак:

def calc_average(results): 
    total = 0 
    for student_score, student_name in results: 
     total=total+student_score 
    average= total/float(len(results)) 
    print(average) 
    return average 

и:

def above_average(average, results): 
    above_average = 0 
    for student_score, student_name in results: 
     if student_score > average: 
      above_average += 1 
    print(" the number of above average scores is ", above_average) 
    return above_average 
0

Я установил/ammended код так, что он работает:

def enter_score(): 
    results = [] 
    scores = int(input("How many results to enter? : ")) 
    for i in range(scores): 
     student_name = input("enter student name: ") 
     student_score = int(input("Please enter score for student " + student_name + " : "))   
     results.append((student_name, student_score)) 
     print(results) 
    return results 

def calc_average(results): 
    total=0 
    for student_name, student_score in results: 
     total=total+student_score 
    average= total/len(results) 
    print("the average is ", average) 
    return average 

def above_average(results, average_score): 
    above_average_no=0 
    for student_name, student_score in results: 
     if student_score > average_score: 
      above_average_no = above_average_no + 1 
      print(" the above average score is ", above_average_no) 
    return above_average_no 

results = enter_score() 
average_score = calc_average(results) 

above_average_no = above_average(results, average_score) 

Я не буду предоставлять подробное объяснение того, что и почему вещи изменения. Оставьте это вам, чтобы понять это. Обратите внимание, что я пытался внести минимальные изменения в ваш код. Многие вещи могут быть улучшены, например, вычисление sum и т. Д. Надеюсь, это поможет.

Смежные вопросы