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
MOJE śr. w 3 przypadkach jest zepsuty i nie pokazuje najwyższego !. Zastanawiałem się, jak mogę uzyskać najwyższą, jeśli są 2 takie same wystąpienia. Najwyższy będzie tylko pierwszym wystąpieniem.
Odpowiedzi:
2 dla odpowiedzi № 1Problem polega na tym, że w drugiej iteracji poprzez case
w pętli, patrzysz też na nazwiska ioceny z poprzedniej pętli, ponieważ nigdy nie opróżniłeś list. Musisz opróżnić listy na początku pętli. Utwórz puste listy u góry pętli:
for case in range(1,cases+1):
print("case",case)
grade=[]
names=[]
highest=0
Możesz (i powinieneś) to zrobić zamiast definiowania zmiennych u góry pliku.
Aby zobaczyć, co poszło nie tak (przed dodaniem mojej poprawki), wykonaj następujące czynności:
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))])
Zobaczysz, że listy mają wartości z poprzedniej iteracji przez pętlę.
0 dla odpowiedzi nr 2
Zasadniczo problem polega na tym, że lista jest wypełniana na samym początku pętli, spróbuj wyczyścić listę przed iteracją pętli. W tym celu należy wykonać następujące czynności:
for case in range(1,cases+1):
print(`case`,case)
grade=[]
names=[]
highest=0
Druga iteracja przez case
Pętla stanowi tutaj problem