一个班有若干名学生,每名学生已修读了若干门课程并有考试成绩,把学生姓名(假设没有重名学生)和修读的课程名及考试成绩等信息保存起来,编写程序实现如下功能(可针对每一项编写一个程序)

一个班有若干名学生,每名学生已修读了若干门课程并有考试成绩,把学生姓名(假设没有重名学生)和修读的课程名及考试成绩等信息保存起来,编写程序实现如下功能(可针对每一项编写一个程序)
(1)根据输入的姓名,输出该学生修读的所有课程的课程名及成绩
(2)根据输入的课程名,输出修读了该课程的学生姓名及该门课程的成绩
(3)输出所有有不及格成绩的学生姓名及不及格的门数
(4)输出所有学生已修读课程的课程名,重复的只输出一次
(5)按平均成绩的高低输出学生姓名及平均成绩

def search_courses_by_name(name, course_dict):
    courses = course_dict.get(name)
    if not courses:
        print("该学生不存在")
    else:
        for course_name, score in courses.items():
            print(f"{course_name}: {score}")
def search_students_by_course(course_name, course_dict):
    students = []
    for name, courses in course_dict.items():
        if course_name in courses:
            students.append((name, courses[course_name]))
    if not students:
        print("没有学生修读该课程")
    else:
        for name, score in students:
            print(f"{name}: {score}")
def search_failed_students(course_dict):
    failed_students = {}
    for name, courses in course_dict.items():
        failed_courses = [score < 60 for score in courses.values()].count(True)
        if failed_courses > 0:
            failed_students[name] = failed_courses
    if not failed_students:
        print("没有不及格的学生")
    else:
        for name, count in failed_students.items():
            print(f"{name}: {count}门")
def list_all_courses(course_dict):
    all_courses = set()
    for courses in course_dict.values():
        all_courses |= set(courses.keys())
    print("所有课程名:")
    for course in all_courses:
        print(course)
def sort_students_by_average_score(course_dict):
    students = []
    for name, courses in course_dict.items():
        average_score = sum(courses.values()) / len(courses)
        students.append((name, average_score))
    sorted_students = sorted(students, key=lambda x: x[1], reverse=True)
    print("所有学生的平均成绩:")
    for name, score in sorted_students:
        print(f"{name}: {score}")