객체지향프로그래밍 연습문제

2023. 3. 15. 16:08Python/실전 예제로 배우는 파이썬 프로그래밍

[문제 1] 다음과 같은 <처리조건>에 맞게 Rectangle 클래스를 작성하시오.

<처리조건>

1. 멤버변수: 가로(width), 세로(height)
2. 생성자: 가로(width), 세로(height) 멤버 변수 초기화
3. 메서드(area_calc): 사각형의 넓이를 구하는 함수
         사각형 넓이 = 가로 * 세로
4. 메서드(circum_calc): 사각형의 둘레를 구하는 함수
         사각형 둘레 = (가로 + 세로) * 2
5. 기타 세부내용은 <출력 결과 예시> 참조
<출력 결과 예시>

사각형의 넓이와 둘레를 계산합니다.
사각형의 가로 입력: 10
사각형의 세로 입력: 5
---------------------------------
사각형의 넓이: 50
사각형의 둘레: 30
---------------------------------
class Rectangle:
	# 클래스 변수
    width = height = 0
    
    # [생성자]
    def __init__(self, width, height):
    	self.width = width	# 전역변수
        self.height = height
    
    # 넓이 계산
    def area_calc(self):
    	area = self.width	* self.height
        return area
    
    # 둘레 계산
    def circum_calc(self):
    	circum = (self.width + self.height) * 2
        return circum

# class object 생성
print('-'*30)
rec = Rectangle(w, h)	# x 초기화
area = rec.area_cals()	# 분산 함수 호출
print('사각형의 넓이:', area)

circum = rec.circum_calsc()
print('사각형의 둘레:', circum)
print('-'*30)

 

[문제 2] 동적 멤버 변수를 생성하여 다음과 같은 산포도를 구하는 클래스를 정의하시오.

<출력 결과 예시>

분산: 7.466666666666666
표준편차: 2.7325202042558927
class Scattering:
	#생성자
  def __init__(self, x):
  	self.x = x	# x변수: 동적 전역변수
  
  #메서드: 분산(var_func)  
  def var_func(self):
  	avg = mean(self.x)	# 평균
    diff = [ (i-avg)**2	for i in self.x]
    # 분산: 동적 전역변수
    self.var = sum(diff) / (len(self.x) - 1)
    return self.var
    
  #메서드: 표준편차(std_func)  
  def std_func(self):
  	st = sqrt(self.var)	# 표준편차 계산
    return st

[문제 3] 다음과 같은 <처리조건>에 맞게 Person 클래스를 작성하시오.

<처리조건>

1. 멤버 변수: 이름(name), 성별(gender), 나이(age)
2. 생성자: 이름, 성별, 나이 초기화
3. 메서드: display(이름, 성별, 나이 출력 기능)
4. 기타 세부내용은 <출력 결과 예시> 참조
<출력 결과 예시>

이름 입력: 유관순
나이 입력: 35
성별(male/female) 입력: female
======================
이름: 유관순, 성별: 여자
나이: 35
======================
class Person:
	#생성자
    def __init__(self, age, name, gender):	# 인수 1개 이상 필요
    	self.age = age
        self.name = name
        self.gender = gender
    #메서드(display)
    def display(self):
    	print("="*30)
        if self.gender == 'female':
        	print("이름: {}, 성별: {}\n나이: {}"
            	  .format(self.name, "여자", self.age))
        else:
        	print("이름: {}, 성별: {}\n나이: {}"
            	  .format(self.name, "남자", self.age))
        
        print("="*30)

[문제 4] 다음과 같은 <처리조건>에 맞게 Employee 클래스를 상속받아서 Permanent와 Temporary 클래스를 구현하시오.

<처리 조건>

1. 키보드로 정규직과 임시직을 구분한다.
2. 정규직인 경우에는 기본급과 상여금을 입력받아서 급여를 계산한다.
3. 임시직인 경우에는 작업시간과 시급을 입력받아서 급여를 계산한다.
4. 기타 세부내용은 <출력 결과 예시> 참고
<출력 결과 예시>

고용형태 선택(정규직<P>, 임시직<T>): >? P
이름: >? 홍길동
기본급: >? 2000000
상여금: >? 500000
=============================
고용형태: 정규직
이름: 홍길동
급여: 2,500,000

고용형태 선택(정규직<P>, 임시직<T>): >?T
이름: >? 김길동
작업시간: >? 200
시급: >? 12000
=============================
고용형태: 임시직
이름: 김길동
급여: 2,400,000
# 자식클래스 - 정규직
class Permanent(Employee):

class Permanent(Employee):
	def __init__(self, name, gi, bonus):
    	super().__init__(name)	# 부모 생성자 호출
        self.pay = gi + bonus	# 급여 = 기본급+상여금

# 자식클래스 - 임시직
class Temporary(Employee):

class Temporary(Employee):
	def __init__(self, name, time, tpay):
    	super().__init__(name)	# 부모 생성자 호출
        self.pay = time * tpay	# 급여 = 작업시간*시급

empType = input("고용형태 선택(정규직<P>, 임시직<T>) : ")
if empType == 'P' or empType == 'p':
	name = input('이름: ')
    gi = int(input('기본급: '))
    bonus = int(input('상여금: '))
    p = Permanent(name, gi, bonus)
    print('='*30)
    print('고용형태: 정규직')
    print('이름: ', p.name)
    print('급여: ', format(p.pay, '3,d'))
    
if empType == 'T' or empType == 't':
	name = input('이름: ')
    time = int(input('작업시간: '))
    tpay = int(input('시급: '))
    t = Temporary(name, time, tpay)
    print('='*30)
    print('고용형태: 임시직')
    print('이름: ', t.name)
    print('급여: ', format(t.pay, '3,d'))

else:
	print('='*30)
    print('입력 오류')

 

'Python > 실전 예제로 배우는 파이썬 프로그래밍' 카테고리의 다른 글

문자열 처리  (0) 2023.03.17
정규 표현식(Regular Expression)  (0) 2023.03.16
패키지와 모듈  (0) 2023.03.14
내장클래스  (0) 2023.03.13
객체지향 기법  (0) 2023.03.12