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
-
(•́ ✖ •̀)
알 수 없는 사용자
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
댓글 입력