sort를 사용해 학번을 기준으로 리스트를 정렬 하려는데 오류가 납니다. 어떻게 코드를 수정해야될까요?

조회수 1211회
class Student():

    def __init__(self, name, hakbun, major, kor, eng, math, score, avg, grade):
        self.name = name
        self.hakbun = hakbun
        self.kor = kor
        self.eng = eng
        self.math = math
        self.score = score
        self.avg = avg
        self.grade = grade

    def print_info(self):
        print("이름 : ", self.name)
        print("학번 : ", self.hakbun)
        print("국어 : ", self.kor)
        print("영어 : ", self.eng)
        print("수학 : ", self.math)
        print("총점 : ", self.score)
        print("평균 : ", self.avg)
        print("학점 : ", self.grade)

def Insert_student():
    name = input('이름을 입력하세요 : ')
    hakbun = input('학번을 입력하세요 : ')
    major = input('학과를 입력하세요 : ')
    kor = int(input('국어 성적을 입력하세요 : '))
    eng = int(input('영어 성적을 입력하세요 : '))
    math = int(input('수학 성적을 입력하세요 : '))
    print("학생이 입력되었습니다.\n")

    score = kor + eng + math
    avg = round(score / 3, 3)
    if avg >= 95:
        grade = "A+"
    elif avg >= 90:
        grade = "A0"
    elif avg >= 85:
        grade = "B+"
    elif avg >= 80:
        grade = "B0"
    elif avg >= 75:
        grade = "C+"
    elif avg >= 70:
        grade = "C0"
    elif avg >= 65:
        grade = "D+"
    elif avg >= 60:
        grade = "D0"
    else:
        grade = "F"
    student = Student(name,hakbun, major, kor, eng, math, score, avg, grade)
    return student

def Search_student(student_list, name):
    for i, student in enumerate(student_list):
        if student.name == name:
            print("======================================================================")
            student.print_info()
            print("======================================================================")

        else:
            print('해당 이름이 없습니다.')

    return student

def delete_contact(student_list, name):
    for i, student in enumerate(student_list):
        if student.name == name:
            del student_list[i]

def print_student(student_list):
    for student in student_list:
        student.print_info()

def print_menu():
    print("1. 데이터 추가")
    print("2. 데이터 검색")
    print("3. 데이터 삭제")
    print("4. 데이터 정렬")
    print("0. 종료\n")
    menu = input("메뉴선택: ")
    return int(menu)

def main():

    student_list = []
    print()
    print("                      학생 관리 프로그램      \n")
    print("메뉴 생성\n")
    while 1:
        menu = print_menu()

        # ----- 데이터 추가 -----
        if menu == 1:
            student = Insert_student()
            student_list.append(student)

        # ----- 데이터 검색 -----
        elif menu == 2:
            name = input('검색할 학생의 이름을 입력해주세요 : ')
            Search_student(student_list, name)

        # ----- 데이터 삭제 -----
        elif menu == 3:
            name = input('삭제할 학생의 이름을 입력해주세요 : ')
            delete_contact(student_list, name)

        # ----- 데이터 정렬 -----
        elif menu == 4:
            sorted_list = sorted(sorted_list, key=lambda hakbun:student.hakbun) <-이 부분을 이용해 정렬을 하려는데 오류가 납니다.
            print_student(student_list)

        else:
            print("종료되었습니다.")
            break

if __name__ == "__main__":
    main()

ERROR

Traceback (most recent call last):
  File "C:/Users/test.py", line 119, in <module>
    main()
  File "C:/Users/test.py", line 111, in main
    sorted_list = sorted(sorted_list, key=lambda hakbun:student.hakbun)
UnboundLocalError: local variable 'sorted_list' referenced before assignment
  • (•́ ✖ •̀)
    알 수 없는 사용자
  • error message를 읽어보면 할당되기 전에 참조했다는 뜻입니다. sorted_list가 선언이 안되있네요. ide를 pycharm같은 걸 사용하면 도움이 많이 될 겁니다 알 수 없는 사용자 2020.4.23 07:36

1 답변

  • 댓글에 답이 있지만...

    # ----- 데이터 정렬 -----
    elif menu == 4:
        sorted_list = sorted(student_list, key=lambda hakbun:student.hakbun) # 이 부분을 이용해 정렬을 하려는데 오류가 납니다.
        print_student(sorted_list)
    
    • 한가지 더 여쭤볼께 있어서 문의드립니다. 저도 댓글을 보고 댓글을 달아주신데로 수정해보아서 실행해 보았습니다. 그런데 실행은 되나 정렬이 안되더라구요. 어떻게 해야하는지 한번더 여쭤봅니다. 알 수 없는 사용자 2020.4.23 09:36
    • sorted(student_list, key=lambda student: student.hakbun) 편집요청빌런 2020.4.23 09:47
    • 답변감사드립니다. 흠...알려주신데로 했는데도 정렬이 안되고 입력순대로 나오네요... 왜그런건지.. 알 수 없는 사용자 2020.4.23 09:53
    • 🤔 편집요청빌런 2020.4.23 10:08
    • 편집요청빌런님 일단 감사드립니다. 저도 댓글을 보고 알려주신데로 student: student.hakbun이 다르다는걸 인지하여 두가지 방식 모두 해보앗습니다. 그러나 두가지 방법 모두 순서대로 정렬이 안되서 한번 더 문의드렸습니다. 예를 들면 입력을 학번1, 학번3, 학번2로 하면 학번1, 학번 2, 학번3의 순서로 정렬되게 하고싶은데 입력 순서대로만 나와서 한번 더 문의드린것였는데 질문을 애매하게 하였다면 죄송합니다. 그리고 정말 감사합니다. 알 수 없는 사용자 2020.4.23 14:18

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)