class에 대한 문제를 풀어보도록 하자. 오늘은 30 Days of Code 의 한 문제를 가져와봤다. (언제나 영어 해석하는 것부터가 challenge)
문제 해석
Objective
이번 challenge에서는 class와 instance의 차이를 배워볼 것입니다 블라블라
Task
Person
이라는 class를 만들되, instance variable인age
를 지정하라.- 생성자(constructor)의 매개변수(parameter)로
initialAge
라는 정수(integer)를 받아라. initialAge
가 음수가 아니라면age
에 넣어주고, 음수라면age
를0
으로 설정 후'Age is not valid, setting age to 0.'
를 출력하라.- 거기에다가 아래 instance methods들도 정의해줘라.
yearPasses()
는 instance variable인age
를 1 증가시킨다.amIOld()
는 다음의 조건적 작업을 수행한다- age < 13 이면
'You are young.'
출력 - 13<=age<18 이면
'You are a teenager.'
출력 - 다른 모든 경우
'You are old.'
출력
- age < 13 이면
Input Format
- 첫 번째 input은 정수 T를 줄건데, 이것은 앞으로 넣을 테스트 케이스의 숫자이다.
- 그 이후 input들은 Person의
age
에 들어갈 T개의 정수들이다.
문제 풀이
먼저 HackerRank에 기본세팅 되어 이미 주어진 코드는 다음과 같다.
1 | t = int(input()) |
- 위 코드는 우리가 만들어야 할 class를 통해 p라는 객체를 만들고 그 객체에서 일련의 작업을 수행하는 것을 t번 반복하는 코드임을 알 수 있다.
- t와 age는 차례로 input으로 받는다.
- p라는 객체에
amIOld
라는 메소드를 수행한 후yearPasses
라는 메소드를 3번 수행한 후에 다시amIOld
를 수행하여 자기가 늙었는지 확인하는 코드이다.
이제 위 코드가 잘 작동하도록 Person이라는 class를 만들어보자.
Task의 1,2번 age 설정하고 3번 조건문 넣어주기
1
2
3
4
5
6
7
8
9class Person:
def __init__(self, initialAge):
#parameter로 initialAge 쓰라고 했으니까 시키는대로 말을 잘 듣자.
if initialAge<0:
self.age = 0
print('Age is not valid, setting age to 0.')
else:
self.age = initialAge이렇게 하여 음수를 넣으면 0으로 age를 설정하고 메시지 출력, 양수를 넣으면 그대로 age에 지정하는 조건으로 instance variable을 지정하는 class를 만들었다.
Task의 4번 메소드 중
yearPasses
를 만들어주자.1
2
3
4class Person: #초기화 생성자는 위에 있으니 생략
def yearPasses(self): #모든 생성자의 parameter에 self는 필수!
self.age += 1 #작동할때마다 age에 1을 더해주기.Task의 4번 메소드 중
amIOld
를 만들어주자. 조건문이 여러번 들어간다.1
2
3
4
5
6
7
8
9
10class Person: #위의 생성자들은 생략
def amIOld(self):
if self.age<13:
print('You are young.')
elif self.age<18:
print('You are a teenager.')
#이미 위에서 13 이상의 수만 남았으니 18 미만의 수에 대해서만!
else:
print('You are old.')
비교적 간단히 문제들을 해결했다.
이제 위의 모든 코드들을 합쳐주면 된다.
1 | class Person: |
느낀 점
수업을 듣거나 개념공부 할 땐 헷갈리고 아리송하지만 일단 해보니 설명할 순 없지만 뭐라도 이해가 되긴 한다. 말로 표현 못하고 머릿속에서만 이해되는게 답답하니까 말로 표현할 수 있을 정도로 열심히 공부해보자.