학생 클래스 2
학생별 점수와 생성된 전체 학생 수를 관리하는 Student 클래스를 작성하시오.
이 문제에서는 여러 객체가 각각 저장하는 값과 모든 객체가 공유하는 클래스 변수를 함께 다룬다.
작성할 클래스
다음 형태의 클래스를 작성한다.
class Student:
student_count = 0
def __init__(self, name):
# 코드를 작성하세요.
def get_name(self):
# 코드를 작성하세요.
def add_score(self, score):
# 코드를 작성하세요.
def get_total(self):
# 코드를 작성하세요.
def get_average(self):
# 코드를 작성하세요.
@classmethod
def get_student_count(cls):
# 코드를 작성하세요.
- 클래스 변수
student_count는 지금까지 생성된 학생 객체의 수를 저장하며 처음에는 0이다. - 생성자
__init__(name)은 이름을 저장하고 빈 점수 목록을 만든 뒤student_count를 1 증가시킨다. get_name()은 이름을str로 반환한다.add_score(score)는 해당 학생의 점수 목록에 점수를 추가한다.get_total()은 해당 학생의 점수 합계를int로 반환한다.get_average()는 해당 학생의 점수 평균을float로 반환한다. 점수가 하나 이상 있을 때만 호출된다.- 클래스 메서드
get_student_count()는 생성된 전체 학생 수를int로 반환한다.
클래스를 사용하는 코드
작성한 클래스는 아래 코드와 함께 실행된다.
n = int(input())
students = []
for _ in range(n):
data = input().split()
name = data[0]
scores = list(map(int, data[2:]))
student = Student(name)
for score in scores:
student.add_score(score)
students.append(student)
q = int(input())
for _ in range(q):
command = input().split()
if command[0] == "new":
students.append(Student(command[1]))
elif command[0] == "add":
students[int(command[1]) - 1].add_score(int(command[2]))
elif command[0] == "name":
result = students[int(command[1]) - 1].get_name()
print(result)
print(type(result))
elif command[0] == "total":
result = students[int(command[1]) - 1].get_total()
print(result)
print(type(result))
elif command[0] == "average":
result = students[int(command[1]) - 1].get_average()
print(result)
print(type(result))
else:
result = Student.get_student_count()
print(result)
print(type(result))
위 코드가 정상적으로 동작하도록 클래스를 작성한다. 제출할 때는 작성한 클래스의 정의 전체만 제출한다. 입력을 받거나 객체를 생성하는 코드는 제출하지 않는다.
상태만 변경하는 메서드의 반환값은 출력하지 않는다. 값을 조회하거나 계산 결과를 반환하는 메서드는 반환값과 자료형을 출력한다.
입력
첫째 줄에 처음 생성할 학생 수 \(N\)이 주어진다.
다음 \(N\)개의 줄에는 학생의 이름 name, 초기 점수 수 \(M\), \(M\)개의 점수가 주어진다. \(M=0\)이면 점수는 주어지지 않는다.
다음 줄에 명령 수 \(Q\)가 주어진다. 이어지는 \(Q\)개의 줄에는 다음 명령 중 하나가 주어진다.
new name: 새로운 학생 객체를 만든다.add i score: \(i\)번째 학생에게 점수를 추가한다.name i: \(i\)번째 학생의 이름을 조회한다.total i: \(i\)번째 학생의 점수 합계를 조회한다.average i: \(i\)번째 학생의 점수 평균을 조회한다.count: 생성된 전체 학생 수를 조회한다.\(1 \le N \le 100\)
- \(0 \le M \le 100\)
- \(1 \le Q \le 1,000\)
- 이름은 알파벳 대소문자로 이루어진 길이 1 이상 20 이하의 문자열이다.
- 점수는 0 이상 100 이하이다.
출력
name, total, average, count 명령마다 반환값과 반환값의 자료형을 출력한다. new와 add 명령은 아무것도 출력하지 않는다.
예제 입력 1
2
Alice 2 80 90
Bob 1 70
9
count
name 1
total 1
average 1
new Chris
count
add 3 100
average 3
total 2
예제 출력 1
2
<class 'int'>
Alice
<class 'str'>
170
<class 'int'>
85.0
<class 'float'>
3
<class 'int'>
100.0
<class 'float'>
70
<class 'int'>
예제 설명 1
처음 Alice와 Bob 객체를 만들었으므로 전체 학생 수는 2이다. Alice의 이름은 Alice, 점수 합계는 \(80+90=170\), 평균은 85.0이다.
이후 Chris 객체를 새로 만들면 전체 학생 수는 3이 된다. Chris에게 100점을 추가했으므로 평균은 100.0이다. Bob의 점수 합계는 70이다. new와 add는 상태만 변경하므로 출력하지 않는다.
예제 입력 2
1
A 1 0
6
count
new B
new C
count
add 2 50
total 2
예제 출력 2
1
<class 'int'>
3
<class 'int'>
50
<class 'int'>
코멘트