클래스와 함수를 이용한 과제
과제 내용
- 이름, 성별, 나이를 입력받고, 이를 출력하는 프로그램을 작성해주세요.
처리 조건
- 클래스 정의
- Person이라는 이름의 클래스를 정의한다.
- 멤버 변수
- name, gender, age라는 멤버 변수를 설정한다.
- 각 변수는 객체가 생성될 때 초기화된다.
- name: 이름을 저장하는 변수 (문자열)
- gender: 성별을 저장하는 변수 (문자열, "male" 또는 "female")
- age: 나이를 저장하는 변수 (정수형)
- 생성자
- 생성자 __init__를 통해 객체 생성 시 이름, 성별, 나이를 초기화한다.
- 매개변수로 이름(name), 성별(gender), 나이(age)를 받는다.
- 정보를 출력하는 함수 display()
- name, gender, age 값을 출력하는 기능을 구현한다.
- 이름과 성별은 같은 행에 출력하고, 나이는 다음 행에 출력한다.
- 입력 및 출력
- 사용자로부터 나이, 이름, 성별을 각각 입력받는다.
- 입력된 값을 바탕으로 Person 객체를 생성하고, display() 함수를 통해 객체의 정보를 출력한다.
이전에 WIL이나 함수편 게시물에서 이미 많이 했었던 내용
초기 모습
우선 입력은 받지 않고 class와 내부에 dysplay (오타.. 하지만 p1.dysplay라고 똑같이 오타를 낸 덕분에 동작한다.) 매서드를 만들었다. 그리고 p1이라는 객체를 만들어주었다.
input함수를 만든 직후 모습
한꺼번에 입력받지 않고 그냥 하나씩 입력받았다.
name, gender, age가 이미 input함수의 결과를 저장하는 변수이기 때문에 따옴표 안에 쓰면 안된다..
이제 마지막으로 이름,성별은 한 줄에 출력하고, 나이는 줄바꿈되어 출력하는 작업만 하면 된다.
return 후에 f-string을 사용해 출력하고 있는데, 이 때 줄바꿈은 엔터로 마음대로 띄면 안되고 \n을 입력해야 한다.
(\는 엔터키 위에 w랑 비슷하게 생긴거 누르면 된다.)
최종적으로 맞게 출력된 모습
이 때 주의할것은 p1.display( ) 라고만 쓰면 다음과 같은 결과물이 나온다.
이름:이대훈, 성별:남자 \n 나이:32
이유는 \n이 동작하려면 print라는 출력함수가 있어야 하기 때문이다. 그렇지 않고 단순히 p1.display만 쓰면 써진 f-stirng을 그대로 보여주게 된다.
+추가 과제1
성별을 male 또는 female로만 입력하도록 제한하기
숫자게임에서 썼던 while문을 사용하면 될 것 같았다.
주의할 점은 while gender!='male' or 'female'로 쓰면 안 된다. 위와 같이 쓰면 female은 조건에 안들어가게 되므로 반드시 분리해서 두 번 써줘야 한다.
또한 input으로 다시 받을 때 변수명 gender를 써줘야 한다. 그렇지 않으면 아무리 새로운 input으로 뭔가를 받아도 gender는 계속 '남자'로 입력된 상태가 되기 때문
+추가과제 2
나이에 따라 적절한 인삿말을 출력하는 greet함수를 만드세요
ex) 안녕하세요, 이대훈! 성인입니다. / 안녕하세요, 이예찬! 어린이입니다.
이거는 if문을 사용해서 greet함수만 만들어주면 되는 쉬운 문제