Почему при запуске программы идет бесконечная загрузка на PyCharm

students = [
    {"name": "John", "surname": "Doe", "grades": [5, 5, 4, 4]},
    {"name": "Jane", "surname": "Doe", "grades": [4, 3, 4, 3, 5]},
    {"name": "Bill", "surname": "Gates", "grades": [5, 5, 5, 3]},
    {"name": "Steve", "surname": "Jobs", "grades": [3, 5, 4, 3, 3, 5]},
    {"name": "Guido", "surname": "Van Rossum", "grades": [5, 3, 5, 4, 5, 5, 3, 5]},
    {"name": "Elon", "surname": "Musk", "grades": None}
]


def get_best_students(studs):
    all_averages = []
    all_students = []
    best_students = []
    for student in studs:
        full_name = student.get("name") + student.get("surname")
        if student.get("grades"):
            average = sum(student.get("grades")) / len(student.get("grades"))
            all_averages.append(round(average, 2))
            all_students.append(full_name)
        else:
            all_averages.append(0)
            all_students.append(full_name)
    while len(best_students) != 3:
        for best_average in all_averages:
            if best_average == max(all_averages):
                ind = all_averages.index(best_average)
                best_students.append(all_students[ind])
    return best_students

Это задание из курса для новичков. Необходимо , чтобы функция возвращала список лучших учеников.(я так и не понял как именно их разделять поэтому решил сделать топ-3 ученика. Когда запускаю программу, просто идет бесконечная загрузка. В чем проблема помогите пж.

Прикрепил фото.

Вот

Думал дело в каком то цикле. Я слышал такое часто происходит из-за циклов while, но ничего не заметил, может я слепой. Кстати еще если отменить выполнение программы выдает это:

Фото

Проблема если что на PyCharm хоть я это и писал уже. Может в нём проблема?


Ответы (1 шт):

Автор решения: Алексей

Что Вам мешает взять и принтануть работу, если не хотите через дебаг: ![введите сюда описание изображения

Лучше убрать

while len(best_students) != 3:

и поставить

if len(best_students) == 3:
    break

А вообще, условие выхода надо ставить внутри цикла, а не после отработки его, чтобы можно было завершить работу, получив нужный результат и не ждать конечной отаботки:

for best_average in all_averages:
    print('max(all_averages):', max(all_averages))
    print('best_average:', best_average)
    if best_average == max(all_averages):
        ind = all_averages.index(best_average)
        best_students.append(all_students[ind])
    if len(best_students) == 3:
        break

И я бы нерекомендовал использовать while везде и всюду

Ну а дальше код меняйте сами (тут не решение, а только показать что у Вас происходит и почему циклится)

→ Ссылка