The problem is that in the second iteration through the case
loop, you are are also looking at the names and grades from the previous loop because you never emptied the lists. You need to empty the lists at the beginning of the loop. Create the empty lists at the top of the loop:
for case in range(1,cases+1):
print('case',case)
grade=[]
names=[]
highest=0
You can (and should) do this instead of defining the variables at the top of the file.
To see what was going wrong (before adding my fix), do this:
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))])
You will see that the lists have the values from the previous iteration through the loop.