[데이터사이언스12기-스터디노트] 파이썬(23.02.16)

도윤수·2023년 2월 18일
0

Python스터디노트

목록 보기
15/16
post-thumbnail

📝스터디노트 15일차 범위

중급4 복습 (자주 사용하는 모듈 ~ 객체 속성 변경)

📖 자주 사용하는 모듈

‣ 파이썬에서 기본 제공해주는 math, random, time 모듈을 자주 사용한다.
‣ 수학, 난수, 시간 모듈은 잘 활용하면 편하다.


#math, random, time 을 자주 사용한다.

#math -> sum, max, min, pow(제곱), round(반올림)

listVar = [2, 5, 3.14, 58, 10, 3]
print(f'pow(13,2): {pow(13, 2)}')   #제곱할수, 제곱 수
print(f'pow(13,3): {pow(13, 3)}')
print(f'pow(13,4): {pow(13, 4)}')

print(f'{round(3.141592, 1)}')  #반올림할 수, 소수점 단위
print(f'{round(3.141592, 2)}')
print(f'{round(3.141592, 3)}')
print(f'{round(3.141592, 4)}')
print(f'{round(3.141592, 5)}')


import math

#절대값
print(f'math.fabs(-10): {math.fabs(-10)}')
print(f'math.fabs(-0.12895): {math.fabs(-0.12895)}')

#내림
print(f'math.floor(5.21): {math.floor(5.21)}')
print(f'math.floor(-5.21): {math.fabs(-5.21)}')

#버림
print(f'math.trunc(5.21): {math.trunc(5.21)}')
print(f'math.trunc(-5.21): {math.trunc(-5.21)}')

#팩토리얼
print(f'math.factorial(10): {math.factorial(10)}')

#제곱근
print(f'math.sqrt(4): {math.sqrt(4)}')
print(f'math.sqrt(18): {math.sqrt(18)}')


import time

lt = time.localtime()
print(f'time.localtime(): {lt}')

print(f'lt.tm_year: {lt.tm_year}')
print(f'lt.tm_mon: {lt.tm_mon}')
print(f'lt.tm_mday: {lt.tm_mday}')
print(f'lt.tm_hour: {lt.tm_hour}')
print(f'lt.tm_min: {lt.tm_min}')
print(f'lt.tm_sec: {lt.tm_sec}')
print(f'lt.tm_wday: {lt.tm_wday}')  #요일을 나타낸다.

Random은 워낙 많이 사용하고 쉽기 때문에 넘기고, 다양한 연산과 math, time에 대해 정리했다.

📖 객체지향 프로그래밍

‣ 객체를 이용한 프로그램으로 객체는 속성과 기능으로 구성된다.
‣ 만약 자동차(Car)라면 속성(길이, 색상, 가격 등)과 기능(전진, 후진, 정지 등)으로 나눌 수 있다.
‣ 객체(Object) = 속성(Attribute) + 기능(Function) 으로 볼 수 있다.
‣ 객체는 클래스에 생성된다.
‣ 코드 재사용, 모듈화에 좋다.

📖 클래스와 객체 생성

‣ 객체를 생성하기 위해 클래스 만들기
‣ 클래스명은 함수와 다르게 첫글자를 대문자로 만든다. (Ex. class Car)
‣ 속성은 init메소드를 넣어야한다.
‣ init 뒤에 (나 자신이라는 의미의 self, 속성, 속성들)을 선언하고,
‣ 선언한 속성들을 초기화한다.


class Car:

    def __init__(self, col, len): #self는 나 자신. Car를 지목한다.
        self.color = col    #객체가 생성될 때 객체의 속성을 초기화.
        self.length = len

    def doStop(self):   #정지하는 기능, 클래스 안의 특정한 기능은 매개변수로 self로 받아야한다.
        print('STOP!!')

    def doStart(self):
        print('STRART!!')   #여기까지 만들고 실행하면 결과값이 나오지 않는다.

    def printCarInfo(self):
        print(f'self.color: {self.color}')
        print(f'self.length: {self.length}')
#클래스는 객체를 만들기 위한 녀석일뿐 객체를 만들고 실행하야한다.

#객체 생성
car1 = Car('red', 200)   #class명과 동일
car2 = Car('blue', 300) #레퍼런스 변수들.

car1.printCarInfo()
car2.printCarInfo()

car1.doStop()
car1.doStart()

클래스의 기본 예제이다.
1. 클래스명의 첫글자는 대문자! Car
2. class 자신을 의미하므로 self, 속성인 color 와 length를 매개변수로 받고 초기화.
3. 각 기능들을 함수처럼 선언해준다.
4. 실행할 땐 클래스명과 동일하게 호출해서 인순허고 돌린다.


class Flight:
    def __init__(self, color, length, arrival): #속성들
        self.color = color
        self.length = length
        self.arrival = arrival

    def doTakeOff(self):    #기능들
        print('Take-Off!!')

    def doLanding(self):
        print('Landing~~')

    def doAutoPilot(self):
        print('Auto-Pilot Mode.')

    def printFlightInfo(self):
        print(f'self.color: {self.color}')
        print(f'self.length: {self.length}')
        print(f'self.arrival: {self.arrival}')

flight1 = Flight('white', 150, 'seoul')
flight2 = Flight('blue', 200, 'dokdo')
flight3 = Flight('green', 3000, 'USA')

flight1.printFlightInfo()
flight1.doTakeOff()
flight1.doAutoPilot()
flight1.doLanding()

flight2.printFlightInfo()
flight2.doTakeOff()
flight2.doAutoPilot()
flight2.doLanding()

flight3.printFlightInfo()
flight3.doTakeOff()
flight3.doAutoPilot()
flight3.doLanding()

비슷하게 비행기로 짠 예제.
1. 색상과 길이, 목적지를 속성을 받았고,
2. 초기화 한 후 동작들(이륙, 오토파일럿모드, 착륙)을 객체로 선언.
3. 비행기의 속성들을 한눈에 보여주는 flightInfo도 추가

📖 객체 속성 변경

‣ 객체 속성은 변경할 수 있다. like) PC사양 업그레이드 하듯이.


class NewGenerationPC:

    def __init__(self, name, cpu, memory, ssd):
        self.name = name    #앞의 name은 객체에 속해있는 속성, 뒤의 name은 매개변수
        self.cpu = cpu
        self.memory = memory
        self.ssd = ssd

    def doExcel(self):
        print('Excel Run!!')

    def doPhotochop(self):
        print('Photoshop Run!!')

    def printPCInfo(self):
        print(f'self.name: {self.name}')
        print(f'self.cpu: {self.cpu}')
        print(f'self.memory: {self.memory}')
        print(f'self.ssd: {self.ssd}')

myPC = NewGenerationPC('myPC', 'i5', '16G', '256G')
myPC.printPCInfo()

friendPC = NewGenerationPC('friendPC', 'i9', '32G', '1T')
friendPC.printPCInfo()

#myPC 객체 속성 변경 부분.
myPC.cpu = 'i9'
myPC.memory = '64G'
myPC.ssd = '8T'
myPC.printPCInfo()

Car, Flight 하듯이 똑같이 선언 실행해주니 내PC와 친구PC가 나온다.
1. 내PC를 업그레이드 하기 위해 속성을 변경한다.
2. 쉽게 생각해서 각 속성을 하나씩 바꿔주면 된다.
3. myPC.cpu = 'i9', myPC.ssd = '8T' 같이
4. 그리고 다시 Info를 출력해보면 기존 내PC와 함꼐 변경된 속성의 내PC가 나온다.

Calculator로 만든 예제


class Calculator:

    def __init__(self):
        self.number1 = 0
        self.number2 = 0
        self.result = 0

    def add(self):
        self.result = self.number1 + self.number2
        return self.result

    def sub(self):
        self.result = self.number1 - self.number2
        return self.result

    def mul(self):
        self.result = self.number1 * self.number2
        return self.result

    def div(self):
        self.result = self.number1 / self.number2
        return self.result

calculator = Calculator()
calculator.number1 = 10
calculator.number2 = 20

print(f'calculator.add(): {calculator.add()}')
print(f'calculator.sub(): {calculator.sub()}')
print(f'calculator.mul(): {calculator.mul()}')
print(f'calculator.div(): {calculator.div()}')

calculator.number1 = 4
calculator.number2 = 6

print(f'calculator.add(): {calculator.add()}')
print(f'calculator.sub(): {calculator.sub()}')
print(f'calculator.mul(): {calculator.mul()}')
print(f'calculator.div(): {calculator.div()}')

강의 마지막에 강사님이 내주신 예제
1. class의 매개변수가 없다... 답을 보기 전까지 어떻게 해야할지 몰랐다.
2. 매 기능마다 result 값을 return하는 식으로 짠다.
3. 실행단에서 그냥 클래스를 호출한 후,
4. 매개변수를 따로 입력해야한다.

★ 어려웠던 점 ★
1. init이 정확히 무슨 역할을 하는지 이해하지 못했다.
⇨ 이렇게 함수부분, 실행부분을 잘 나눌줄 알아야 효율적인 코드를 짤 수 있다는 얘기를 보았는데 아직 머릿솔에서는 한화면에 코드를 짜내야 한다는 강박(?) 같은게 있어서 구분이 안되는 것 같다. 이런 형태의 코드를 많이 보다보면 지금까지 해온것 처럼 익숙해져야할 것 같다...

  1. 매개변수가 없는 클래스의 실행 과정이 어떻게 되는지 모르겠다.(calculator)
    ⇨ 실행단에서 각 매개변수의 인수를 선언해주어야한다.

  2. 그 와중에 속성 변경도 가능하다.

🔥🔥바쁜시간 쪼개서 매일매일 성장해 나가는 모습을 기록하자🔥🔥

profile
DataScience를 하고 싶은 DoIT

0개의 댓글