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

#python

#питон

Вопрос:

Хорошо, я не понимаю, где я ошибаюсь, потому что мне помогли с этим кодированием, и для человека, который изначально написал его, это работает просто отлично. Однако мой, похоже, работает со сбоями. Он продолжает отображать «наивысшую оценку» несколько раз, а не только один раз, как предполагалось. У меня здесь настоящие проблемы с новичками.

Это и есть код:

 #this program will compute average quiz grade for a group of 5 students
#prompt user for quiz grade using a for loop for each of the 5 students

#assign names to student list
students = ["John", "Jake", "Jane", "Sally", "Susie"]

#grades: 90-100=A, 80-90=B, 70-80=C, 60-70=D, <60=F


#prompt user for student grades
grades = []
for student in students:
    grade = eval(input(f"Enter the grade for {student}: "))
    grades.append(grade)


sum = 0
for i in range(0,5):
    for i in grades:
         sum =i
avg_grade=sum/5


#print average grade of students
if(avg_grade >=90):
    print("Average Grade: A")
elif(avg_grade>=80 and avg_grade<90):
    print("Average Grade: B")
elif(avg_grade>=70 and avg_grade<80):
    print("Average Grade: C")
elif(avg_grade>=60 and avg_grade<70):
    print("Average Grade: D")
else:
    print("Average Grade: F")



#print highest grade
max_grade=max(grades)
for i in grades:
    if(max_grade>=90):
        print("Highest Grade: A")
    elif(max_grade>=80 amp; max_grade<90):
        print("Highest Grade: B")
    elif(max_grade>=70 amp; max_grade<80):
        print("Highest Grade: C")
    elif(max_grade>=60 amp; max_grade<70):
        print("Highest Grade: D")
else:
    print("Highest Grade: F")
 

Ответ №1:

for В конце вы используете цикл, что означает, что для каждой отдельной оценки будет распечатана самая высокая оценка.

Вы можете удалить for и if отменить индентирование операторов , elif , и else . Тогда программа должна работать так, как задумано.

Ответ №2:

Прежде всего, вместо использования такой переменной, как sum , поскольку sum — это специальная функция python, вы должны использовать что-то вроде total .

Во-вторых, вы не должны использовать eval(input()) , потому что eval ничего не делает.

В-третьих, при выполнении цикла for вы еще не знаете количество учащихся, поэтому оно должно быть for i in range(len(students)-1) и -1 частью, потому что индексация списка начинается с 0. Кроме того, во втором цикле for должна использоваться другая переменная, i потому i что она уже используется, поэтому используйте что-то вроде j .

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

1. «Сумма» может использоваться в качестве имени переменной.

2. ну, я имею в виду, что можно использовать переменную sum в верхнем регистре, но люди все равно могут ее перепутать.

Ответ №3:

Используйте just sum, чтобы получить общую оценку и среднее значение. Не нужно запускать дополнительный цикл по 5 раз.

 total = sum(grades)
avg_grade = total/len(grades)
 

Тогда вам не нужно запускать цикл, чтобы получить наивысшую оценку, а также else должно быть с отступом like other if elif . Следуйте коду

 students = ["John", "Jake", "Jane", "Sally", "Susie"]

grades = []
for student in students:
    grade = eval(input(f"Enter the grade for {student}: "))
    grades.append(grade)


total = sum(grades)
avg_grade = total/len(grades)


if(avg_grade >= 90):
    print("Average Grade: A")
elif(avg_grade >= 80 and avg_grade < 90):
    print("Average Grade: B")
elif(avg_grade >= 70 and avg_grade < 80):
    print("Average Grade: C")
elif(avg_grade >= 60 and avg_grade < 70):
    print("Average Grade: D")
else:
    print("Average Grade: F")


max_grade = max(grades)
if(max_grade >= 90):
    print("Highest Grade: A")
elif(max_grade >= 80 amp; max_grade < 90):
    print("Highest Grade: B")
elif(max_grade >= 70 amp; max_grade < 80):
    print("Highest Grade: C")
elif(max_grade >= 60 amp; max_grade < 70):
    print("Highest Grade: D")
else:
    print("Highest Grade: F")
 

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

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

2. Комментарий был взят из пользовательского кода, хорошо, я его изменил

Ответ №4:

 sum = 0 
for i in range(0,5):
    for i in grades:
         sum =i 
avg_grade=sum/5
 

что это делает, так это, по сути, проходит через каждую оценку и прибавку sum каждый раз и делает это 5 раз. Это излишне O (n ^ 2) и будет работать значительно медленнее, если вы добавите много данных.

Помимо этого, в других ответах была указана пара полезных вещей, я думаю, что один из них напрямую поместил туда код, так что я мало что могу сказать.

В основном у вас были логические недостатки в вашем коде, из-за которых он не функционировал должным образом.

отладка:

отладка

как вы можете видеть выше, значения для sum и avg_grade совершенно не соответствуют их назначению, это было обнаружено с помощью операторов печати в нужных местах.

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