СРЕДНЯЯ СТАТИСТИКА ПИТОНА И ВЫСШИЙ СЧЕТ
grade=[]
names=[]
highest=0
#taking number of calues
cases=int(input('Enter number of cases: '))
for case in range(1,cases+1):
print('case',case)
#taking number of students
number=int(input('Enter number of students: '))
for numbers in range (1,number+1):
#getting name and marks
name=str(input('Enter name of student: '))
names.append(name)
mark=float(input('Enter mark of student:'))
grade.append(mark)
print('Case',case,'result')
#printing the results!
average=float(sum(grade)/number)
print('Average is: %.2f '%(average))
print('Highest Score is: %.2f'%(max(grade)))
print('Student with highest score: ',names[grade.index(max(grade))])
output->Enter number of cases: 2
case 1
Enter number of students: 2
Enter name of student: josh
Enter mark of student:98
Enter name of student: sarah
Enter mark of student:87
Case 1 result
Average is: 92.50
Highest Score is: 98.00
Student with highest score: josh
case 2
Enter number of students: 3
Enter name of student: shania
Enter mark of student:78
Enter name of student: arleen
Enter mark of student:89
Enter name of student: zoya
Enter mark of student:89
Case 2 result
Average is: 147.00
Highest Score is: 98.00
Student with highest score: josh
Мой средний в 3 случаях облажался и не показывает самый высокий! Мне было интересно, как я могу получить самый высокий, если есть 2 одинаковых случая. Наивысшим будет только первое вхождение. Ребята, вы понимаете, о чем я?
2 ответа
Проблема в том, что во второй итерации через case
цикл, вы также смотрите на имена и оценки из предыдущего цикла, потому что вы никогда не очищали списки. Вам нужно очистить списки в начале цикла. Создайте пустые списки в верхней части цикла:
for case in range(1,cases+1):
print('case',case)
grade=[]
names=[]
highest=0
Вы можете (и должны) сделать это вместо определения переменных в верхней части файла.
Чтобы увидеть, что пошло не так (перед добавлением моего исправления), сделайте следующее:
average=float(sum(grade)/number)
print(grade)
print(names)
print('Average is: %.2f '%(average))
print('Highest Score is: %.2f'%(max(grade)))
print('Student with highest score: ',names[grade.index(max(grade))])
Вы увидите, что списки имеют значения из предыдущей итерации цикла.
По сути, проблема в том, что список заполняется в начале самого цикла, попробуйте очистить список до итерации цикла. Чтобы сделать это:
for case in range(1,cases+1):
print(`case`,case)
grade=[]
names=[]
highest=0
Вторая итерация через case
цикл делает проблему здесь