핀아의 저장소 ( •̀ ω •́ )✧

15일차(2020-11-26) 본문

Computer Science/코딩테스트_Python

15일차(2020-11-26)

_핀아_ 2020. 11. 26. 19:39

251 클래스, 객체, 인스턴스

클래스, 객체, 인스턴스에 대해 설명해봅시다.

 

-> 클래스는 제품의 설계도라 생각하면 되고 클래스 타입으로 선언 되었을 때를 객체라 한다. 그리고 객체가 메모리에 올라가 사용될 때 인스턴스라고 한다.

 

252 클래스 정의

비어있는 사람 (Human) 클래스를 "정의" 해보세요.

 

->

class Human():

    pass

 

253 인스턴스 생성

사람 (Human) 클래스의 인스턴스를 "생성" 하고 이를 areum 변수로 바인딩해보세요.

 

->

class Human:

    pass

 

areum = Human()

 

254 클래스 생성자-1

사람 (Human) 클래스에 "응애응애"를 출력하는 생성자를 추가하세요.

>>> areum = Human() 응애응애  

 

->

class Human:

    def __init__(self):

        print("응애응애")

 

areum = Human()

 

255 클래스 생성자-2

사람 (Human) 클래스에 (이름, 나이, 성별)을 받는 생성자를 추가하세요.

>>> areum = Human("아름", 25, "여자")  

 

->

class Human:

    def __init__(self, name, age, gender):

        self.name = name

        self.age = age

        self.gender = gender

        

areum = Human("아름", 25, "여자")

print(areum.name)

 

256 인스턴스 속성에 접근

255에서 생성한 인스턴스의 이름, 나이, 성별을 출력하세요. 인스턴스 변수에 접근하여 값을 출력하면 됩니다.

이름: 조아름, 나이: 25, 성별: 여자

인스턴스 변수에 접근하여 값을 가져오는 예

>>> areum.age 25  

 

->

class Human:

    def __init__(self, name, age, gender):

        self.name = name

        self.age = age

        self.gender = gender

        

areum = Human("아름", 25, "여자")

print("나이:",areum.age)

 

257 클래스 메소드 - 1

사람 (Human) 클래스에서 이름, 나이, 성별을 출력하는 who() 메소드를 추가하세요.

>>> areum.who() 이름: 조아름, 나이: 25, 성별: 여자  

 

->

class Human:

    def __init__(self, name, age, gender):

        self.name = name

        self.age = age

        self.gender = gender

    def who(self):

        print("이름: {0}, 나이: {1}, 성별: {2}".format(self.name, self.age, self.gender))

        

areum = Human("아름", 25, "여자")

areum.who()

 

258 클래스 메소드 - 2

사람 (Human) 클래스에 (이름, 나이, 성별)을 받는 setInfo 메소드를 추가하세요.

>>> areum = Human("모름", 0, "모름") >>> areum.setInfo("아름", 25, "여자")  

 

->

class Human:

    def __init__(self, name, age, gender):

        self.name = name

        self.age = age

        self.gender = gender

    def who(self):

        print("이름: {0}, 나이: {1}, 성별: {2}".format(self.name, self.age, self.gender))

    def setInfo(self, name, age, gender):

        self.name = name

        self.age = age

        self.gender = gender

        

areum = Human("모름", 0, "성별")

areum.who()

 

areum.setInfo("아름", 25, "여자")

areum.who()

 

259 클래스 소멸자

사람 (human) 클래스에 "나의 죽음을 알리지 말라"를 출력하는 소멸자를 추가하세요.

>>> areum = Human("아름", 25, "여자") >>> del areum 나의 죽음을 알리지 말라  

 

->

class Human:

    def __init__(self, name, age, gender):

        self.name = name

        self.age = age

        self.gender = gender

    

    def __del__(self):

        print("나의 죽음을 알리지 말라")

 

    def who(self):

        print("이름: {0}, 나이: {1}, 성별: {2}".format(self.name, self.age, self.gender))

 

    def setInfo(self, name, age, gender):

        self.name = name

        self.age = age

        self.gender = gender

        

areum = Human("아름", 25, "여자")

del areum

 

260 에러의 원인

아래와 같은 에러가 발생한 원인에 대해 설명하세요.

class OMG : def print() : print("Oh my god") >>> >>> myStock = OMG() >>> myStock.print() TypeError Traceback (most recent call last) <ipython-input-233-c85c04535b22> in <module>() ----> myStock.print() TypeError: print() takes 0 positional arguments but 1 was given

 

->

 

261 Stock 클래스 생성

주식 종목에 대한 정보를 저장하는 Stock 클래스를 정의해보세요. 클래스는 속성과 메서드를 갖고 있지 않습니다.

 

->

class Stock():

    pass

 

262 생성자

Stock 클래스의 객체가 생성될 때 종목명과 종목코드를 입력 받을 수 있도록 생성자를 정의해보세요.

삼성 = Stock("삼성전자", "005930")  

 

->

class Stock:

    def __init__(self, name, code):

        self.name = name

        self.code = code

 

삼성 = Stock("삼성전자", "005930")

print(삼성.name)

print(삼성.code)

 

263 메서드

객체에 종목명을 입력할 수 있는 set_name 메서드를 추가해보세요.

a = Stock(None, None) a.set_name("삼성전자"

 

->

class Stock:

    def __init__(self, name, code):

        self.name = name

        self.code = code

    def set_name(self, name):

        self.name = name

 

a = Stock(None, None)

a.set_name("삼성전자")

print(a.name)

 

264 메서드

객체에 종목코드를 입력할 수 있는 set_code 메서드를 추가해보세요.

a = Stock(None, None) a.set_code("005930")  

 

->

class Stock:

    def __init__(self, name, code):

        self.name = name

        self.code = code

 

    def set_name(self, name):

        self.name = name

 

    def set_code(self, code):

        self.code = code

 

a = Stock(None, None)

a.set_code("005930")

print(a.code)

 

265 메서드

종목명과 종목코드를 리턴하는 get_name, get_code 메서드를 추가하세요. 해당 메서드를 사용하여 종목명과 종목코드를 얻고 이를 출력해보세요.

삼성 = Stock("삼성전자", "005930")  

 

->

class Stock:

    def __init__(self, name, code):

        self.name = name

        self.code = code

 

    def set_name(self, name):

        self.name = name

 

    def set_code(self, code):

        self.code = code

 

    def get_name(self):

        return self.name

 

    def get_code(self):

        return self.code

 

a = Stock("삼성전자", "005930")

print(a.name)

print(a.code)

print(a.get_name())

print(a.get_code())

 

a.name과 a.get_name() 둘 다 값이 나오는건 return을 해줬기 때문이다.

266 객체의 속성값 업데이트

생성자에서 종목명, 종목코드, PER, PBR, 배당수익률을 입력 받을 수 있도록 생성자를 수정하세요. PER, PBR, 배당수익률은 float 타입입니다.

 

->

class Stock:

    def __init__(self, name, code, per, pbr, rate):

        self.name = name

        self.code = code

        self.per = per

        self.pbr = pbr

        self.rate = rate

 

    def set_name(self, name):

        self.name = name

 

    def set_code(self, code):

        self.code = code

 

    def get_name(self):

        return self.name

 

    def get_code(self):

        return self.code

 

267 객체 생성

266번에서 정의한 생성자를 통해 다음 정보를 갖는 객체를 생성해보세요.

항목정보

종목명 삼성전자
종목코드 005930
PER 15.79
PBR 1.33
배당수익률 2.83

 

->a = Stock("삼성전자", "005930", 15.79, 1.33, 2.83)

 

268 객체의 속성 수정

PER, PBR, 배당수익률은 변경될 수 있는 값입니다. 이 값을 변경할 때 사용하는 set_per, set_pbr, set_dividend 메서드를 추가하세요.

 

->

class Stock:

    def __init__(self, name, code, per, pbr, rate):

        self.name = name

        self.code = code

        self.per = per

        self.pbr = pbr

        self.rate = rate

 

    def set_name(self, name):

        self.name = name

 

    def set_code(self, code):

        self.code = code

 

    def get_name(self):

        return self.name

 

    def get_code(self):

        return self.code

    

    def set_per(self, per):

        self.per = per

 

    def set_pdr(self, pdr):

        self.pdr = pdr

 

    def set_dividend(self, dividend):

        self.dividend = dividend

 

269 객체의 속성 수정

267번에서 생성한 객체에 set_per 메서드를 호출하여 per 값을 12.75로 수정해보세요.

 

->

a = Stock("삼성전자", "005930", 15.79, 1.33, 2.83)

a.set_per(12.75)

print(a.per)

 

270 여러 종목의 객체 생성

아래의 표를 참조하여 3종목에 대해 객체를 생성하고 이를 파이썬 리스트에 저장하세요. 파이썬 리스트에 저장된 각 종목에 대해 for 루프를 통해 종목코드와 PER을 출력해보세요.

종목명종목코드PERPBR배당수익률

삼성전자 005930 15.79 1.33 2.83
현대차 005380 8.70 0.35 4.27
LG전자 066570 317.34 0.69 1.37

 

->

ff = []

a = Stock("삼성전자", "005930", 15.79, 1.33, 2.83)

b = Stock("현대차", "005380", 8.70, 0.35, 4.27)

c = Stock("LG전자", "066570", 317.34, 0.69, 1.37)

 

ff.append(a)

ff.append(b)

ff.append(c)

 

for i in ff:

    print(i.code, i.per)

 

271 Account 클래스

은행에 가서 계좌를 개설하면 은행이름, 예금주, 계좌번호, 잔액이 설정됩니다. Account 클래스를 생성한 후 생성자를 구현해보세요. 생성자에서는 예금주와 초기 잔액만 입력 받습니다. 은행이름은 SC은행으로 계좌번호는 3자리-2자리-6자리 형태로 랜덤하게 생성됩니다.

은행이름: SC은행 계좌번호: 111-11-111111  

 

->

import random

 

class Account:

    def __init__(self, name, don):

        self.name = name

        self.don = don

        self.bank = "SC은행"

        num1 = random.randint(0,999)

        num2 = random.randint(0,99)

        num3 = random.randint(0,999999)

 

        num1 = str(num1).zfill(3)

        num2 = str(num2).zfill(2)

        num3 = str(num3).zfill(6)

        self.account_num = num1 + "-" + num2 + "-" + num3

 

hong = Account("홍길동", 2000)

print(hong.name)

print(hong.don)

print(hong.bank)

print(hong.account_num)

 

272 클래스 변수

클래스 변수를 사용해서 Account 클래스로부터 생성된 계좌 객체의 개수를 저장하세요.

 

->

import random

 

class Account:

    cnt = 0

 

    def __init__(self, name, don):

        self.name = name

        self.don = don

        self.bank = "SC은행"

        num1 = random.randint(0,999)

        num2 = random.randint(0,99)

        num3 = random.randint(0,999999)

 

        num1 = str(num1).zfill(3)

        num2 = str(num2).zfill(2)

        num3 = str(num3).zfill(6)

        self.account_num = num1 + "-" + num2 + "-" + num3

 

    Account.cnt += 1

 

273 클래스 변수 출력

Account 클래스로부터 생성된 계좌의 개수를 출력하는 get_account_num() 메서드를 추가하세요.

 

->

import random

 

class Account:

    cnt = 0

 

    def __init__(self, name, don):

        self.name = name

        self.don = don

        self.bank = "SC은행"

        num1 = random.randint(0,999)

        num2 = random.randint(0,99)

        num3 = random.randint(0,999999)

 

        num1 = str(num1).zfill(3)

        num2 = str(num2).zfill(2)

        num3 = str(num3).zfill(6)

        self.account_num = num1 + "-" + num2 + "-" + num3

        Account.cnt += 1

 

    def get_account_num(self):

        print(self.cnt)

 

hong = Account("홍길동", 2000)

kim = Account("김하나", 5000)

kim.get_account_num()

 

274 입금 메서드

Account 클래스에 입금을 위한 deposit 메서드를 추가하세요. 입금은 최소 1원 이상만 가능합니다.

 

->

import random

 

class Account:

    cnt = 0

 

    def __init__(self, name, don):

        self.name = name

        self.don = don

        self.bank = "SC은행"

        num1 = random.randint(0,999)

        num2 = random.randint(0,99)

        num3 = random.randint(0,999999)

 

        num1 = str(num1).zfill(3)

        num2 = str(num2).zfill(2)

        num3 = str(num3).zfill(6)

        self.account_num = num1 + "-" + num2 + "-" + num3

        Account.cnt += 1

 

    def get_account_num(self):

        print(self.cnt)

 

    def deposit(self, inmoney):

        if inmoney>=1:

            self.don += inmoney

 

hong = Account("홍길동", 2000)

kim = Account("김하나", 5000)

kim.get_account_num()

kim.deposit(3333)

print(kim.don)

 

275 출금 메서드

Account 클래스에 출금을 위한 withdraw 메서드를 추가하세요. 출금은 계좌의 잔고 이상으로 출금할 수는 없습니다.

 

->

import random

 

class Account:

    cnt = 0

 

    def __init__(self, name, don):

        self.name = name

        self.don = don

        self.bank = "SC은행"

        num1 = random.randint(0,999)

        num2 = random.randint(0,99)

        num3 = random.randint(0,999999)

 

        num1 = str(num1).zfill(3)

        num2 = str(num2).zfill(2)

        num3 = str(num3).zfill(6)

        self.account_num = num1 + "-" + num2 + "-" + num3

        Account.cnt += 1

 

    def get_account_num(self):

        print(self.cnt)

 

    def deposit(self, inmoney):

        if inmoney>=1:

            self.don += inmoney

 

    def withdraw(self, outmoney):

        if self.don>outmoney:

            self.don -= outmoney

 

kim = Account("김하나", 5000)

kim.deposit(3333)

kim.withdraw(1000)

print(kim.don)

'Computer Science > 코딩테스트_Python' 카테고리의 다른 글

17일차(2020-11-30)  (0) 2020.11.30
16일차(2020-11-27)  (0) 2020.11.27
14일차(2020-11-25)  (0) 2020.11.25
13일차(2020-11-24)  (0) 2020.11.24
12일차(2020-11-23)  (0) 2020.11.21
Comments