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