вывод среднего процента учащихся из массива

#python #arrays #python-3.x #iteration

#python #массивы #python-3.x #итерация

Вопрос:

Предполагается, что программа вычисляет и распечатывает средний процент данного учащегося.

К сожалению, я могу распечатать только средний процент последнего имени учащегося в массиве. Я хочу знать, где именно я ошибаюсь в своем кодировании. Спасибо. Вот мой код ниже.

 def averagepercentage():

    scores = int(name_marks[1]),int(name_marks[2]),int(name_marks[3])
    ap = sum(scores)/3

    return ap

N = int(input('Number of students: ')) # total number of students
marks = int()
arr = []

for i in range(N):
    name_marks = input('name amp; marks').split() #enter name amp; three different scores 
    name = str(name_marks[0])
    arr.append(name)
    print(arr)

student_name = str(input('student_name'))
for x in arr:
    if student_name in x:

        print (x)

        print("%.2f" %averagepercentage())
  

Комментарии:

1. Вам нужно заменить ‘name = str (name_marks [0])’ на ‘name = averagepercentage (name_marks)’

Ответ №1:

В вашем первом цикле:

 for i in range(N):
    name_marks = input('name amp; marks').split() #enter name amp; three different scores 
    name = str(name_marks[0])
    arr.append(name)
    print(arr)
  

вы не сохраняете оценки предыдущих учащихся, вы заменяете свою переменную name_marks последними метками из вашего ввода

внешний if student_name in x: вид, если student_name включен x , что не совсем то, что вы хотите сделать, подумайте о том, чтобы сделать if student_name == x: вместо этого.

Затем:

 def averagepercentage():

    scores = int(name_marks[1]),int(name_marks[2]),int(name_marks[3])
    ap = sum(scores)/3

    return ap
  

name_marks для вычисления среднего значения используется глобальная переменная, но эта переменная содержит только значение последнего учащегося (из-за моего первого замечания)

что вы можете сделать, чтобы сохранить большую часть своей структуры кода, так это:

 for i in range(N):
    name_marks = input('name amp; marks').split() #enter name amp; three different scores 
    name = str(name_marks[0])
    arr.append((name,averagepercentage()))
    print(arr)

student_name = str(input('student_name'))

for x in arr:
    if student_name in x:
        print ("student :"   x[0])
        print("average :"   x[1])
  

Комментарии:

1. О, вау, спасибо!!! все это время я не осознавал, что поместил свою функцию averagepercentage() не в то место. ваш ответ очень информативен. Спасибо!!!