κ°œμΈκ³΅λΆ€/Python

50. Python 클래슀, 데이터 μž…μΆœλ ₯ μ—°μŠ΅λ¬Έμ œ

LEE_BOMB 2021. 11. 11. 23:39
λ¬Έ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, w, h) :
        self.width = w
        self.height = h
    
    #멀버 λ©”μ„œλ“œ : 넓이 계산         
    def area_calc(self) :
        area = self.width * self.height
        return area
    
    #멀버 λ©”μ„œλ“œ : λ‘˜λ ˆ 계산     
    def circum_calc(self) :
        circum = (self.width + self.height) * 2
        return circum


ν‚€λ³΄λ“œ μž…λ ₯ 

print("μ‚¬κ°ν˜•μ˜ 넓이와 λ‘˜λ ˆλ₯Ό κ³„μ‚°ν•©λ‹ˆλ‹€.")
w = int(input('μ‚¬κ°ν˜•μ˜ κ°€λ‘œ μž…λ ₯ : ')) #10
h = int(input('μ‚¬κ°ν˜•μ˜ μ„Έλ‘œ μž…λ ₯ : ')) #5


객체 생성 

rec = Rectangle(w, h) #μƒμ„±μž -> 객체 
print('-'*30)
print('μ‚¬κ°ν˜•μ˜ 넓이 :', rec.area_calc())
print('μ‚¬κ°ν˜•μ˜ λ‘˜λ ˆ :', rec.circum_calc())
print('-'*30)

 

 

 

 

 

λ¬Έ2) λ‹€μŒκ³Ό 같은 좜λ ₯ κ²°κ³Όκ°€ λ‚˜νƒ€λ‚˜λ„λ‘ 동적 멀버 λ³€μˆ˜ μƒμ„±μœΌλ‘œ 산포도(Scattering)클래슀λ₯Ό μ™„μ„±ν•˜μ‹œμ˜€.

 << μΆœλ ₯ κ²°κ³Ό >>
λΆ„μ‚° : 7.466666666666666
ν‘œμ€€νŽΈμ°¨ :  2.7325202042558927

 

from statistics import mean
from math import sqrt

x = [5, 9, 1, 7, 4, 6]
class Scattering:

    def __init__(self, x): #μƒμ„±μž 
        self.x = x #동적 멀버 λ³€μˆ˜ 생성 

    #λΆ„μ‚°κ³Ό ν‘œμ€€νŽΈμ°¨ 식 : chap06 > step03 μ°Έκ³  
    def var_func(self): #λΆ„μ‚° λ©”μ„œλ“œ
        # var = sum((x - μ‚°μˆ ν‰κ· )**2) / n-1
        avg = mean(self.x) #μ‚°μˆ ν‰κ·  
        diff = [(i - avg)**2 for i in self.x] #list 내포 
        #동적 λ©€λ²„λ³€μˆ˜ 
        self.var = sum(diff) / (len(self.x)-1)
        return self.var 

    def std_func(self): #ν‘œμ€€νŽΈμ°¨ λ©”μ„œλ“œ
        sd = sqrt(self.var)
        return sd
scatt = Scattering(x)  #μƒμ„±μž -> 객체 생성
var = scatt.var_func()  #λΆ„μ‚° λ°˜ν™˜
st = scatt.std_func()  #ν‘œμ€€νŽΈμ°¨ λ°˜ν™˜

print('λΆ„μ‚° = ', var)
print('ν‘œμ€€νŽΈμ°¨ =', st)

 

 

 

 

 

λ¬Έ3) μ΄λ¦„, μ„±λ³„, λ‚˜μ΄λ₯Ό κ°–λŠ” Person ν΄λž˜μŠ€λ₯Ό λ‹€μŒκ³Ό κ°™μ΄ μž‘μ„±ν•˜μ‹œμ˜€.

<처리쑰건>
1. 멀버 λ³€μˆ˜ : 이름(name), 성별(gender), λ‚˜μ΄(age)
2. μƒμ„±μž :  κ°μ²΄ 생성 + 이름, 성별, λ‚˜μ΄ μ΄ˆκΈ°ν™”
3. 멀버 λ©”μ„œλ“œ : display(이름, 성별, λ‚˜μ΄ 좜λ ₯ κΈ°λŠ₯)
4. 기타 λ‚˜λ¨Έμ§€λŠ” 좜λ ₯ μ˜ˆμ‹œ μ°Έμ‘°
   
<< 좜λ ₯ μ˜ˆμ‹œ >>  
이름 μž…λ ₯ : μœ κ΄€μˆœ        
λ‚˜μ΄ μž…λ ₯ : 35
성별(male/female) μž…λ ₯ : female
=========================
이름 : μœ κ΄€μˆœ, 성별 : μ—¬μž
λ‚˜μ΄ : 35
=========================

 

class Person :

    #μƒμ„±μž λ©”μ„œλ“œ
    def __init__(self, age, name, gender) : 
        #동적 λ©€λ²„λ³€μˆ˜ : μ „μ—­λ³€μˆ˜ 
        self.age = age 
        self.name = name 
        self.gender = gender

    #멀버 λ©”μ„œλ“œ 
    def display(self) :
        print('='*30)
        #ν•œ 쀄 ifλ¬Έ 
        self.gender = 'μ—¬μž' if self.gender == 'female' else 'λ‚¨μž'
        print('이름 : %s, 성별 : %s'%(self.name, self.gender))
        print('λ‚˜μ΄ : %d'%self.age)
        print('='*30)

    
ν‚€λ³΄λ“œ μž…λ ₯ 

name = input('이름 : ')
age = int(input('λ‚˜μ΄ : '))
gender = input('성별(male/female) : ')


객체 생성과 λ©”μ„œλ“œ 호좜 

p = Person(age, name, gender) #μƒμ„±μž 이용 μ „μ—­λ³€μˆ˜ μ΄ˆκΈ°ν™” 
p.display()

 

 

 

 

 

<κΈ‰μ—¬ 계산 문제>
λ¬Έ4) Employee ν΄λž˜μŠ€λ₯Ό μƒμ†ν•˜μ—¬ Permanent와 Temporary ν΄λž˜μŠ€λ₯Ό μ™„μ„±ν•˜μ‹œμ˜€. 


λΆ€λͺ¨ν΄λž˜μŠ€ : 사원(μ •κ·œμ§, μž„μ‹œμ§) 

class Employee : 
    name = None #사원이름 
    pay = 0 #κΈ‰μ—¬ 
    
    def __init__(self,name):
        self.name = name

 

μžμ‹ν΄λž˜μŠ€ - μ •κ·œμ§ : pay = κΈ°λ³ΈκΈ‰ + μƒμ—¬κΈˆ 

class Permanent(Employee):
    def __init__(self, name, gi, bonus) :
        self.name = name
        self.pay = gi + bonus #급여계산


μžμ‹ν΄λž˜μŠ€ - μž„μ‹œμ§ : pay = μž‘μ—…μ‹œκ°„ * μ‹œκΈ‰ 

class Temporary(Employee):
    def __init__(self, name, time, tpay):
        self.name = name 
        self.pay = time * tpay #급여계산


객체 생성     

p = Permanent('μ •κ·œμ§', 2500000, 800000) 
print('μ •κ·œμ§ κΈ‰μ—¬ : {0:3,d}'.format(p.pay))    

t = Temporary('μž„μ‹œμ§', 55, 20000) 
print('μž„μ‹œμ§ κΈ‰μ—¬ : {0:3,d}'.format(t.pay))