#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
совершенно не соответствуют их назначению, это было обнаружено с помощью операторов печати в нужных местах.
Ваша логика в реализации была ошибочной и для следующей части, но этот пост уже слишком многословен для его цели.