SK Networks Family AI bootcamp 강의노트

7일차 [ 파이썬 기초 (상속,표준 라이브러리)]

HyunJung_Jo 2025. 1. 15. 16:59
매번 코딩을 하더라도 다르게, 더 발전된 형태로 해보자.
기술 책은 소설책처럼 보는 것이 아닌, 필요한 것만 가져다 효율적으로 읽자.

1.상속

 1-1. 상속 기본개념

1-2. 마법사 vs 기사 

"""
사람
-(변수)체력=100
-(변수)공격=10

기사
-(변수)체력 *=10 (1000)
-(함수)공격 = 공격 * 남은체력의 배수 (15~250)
-(함수)방어 = 방어 성공시 받은 공격에 50% 감소 / 실패시 100% 적용

마법사
-(변수)체력*=5 (500)
-(변수)마나=500
-(함수)공격 = 공격* 남은마나의 배수 (30~500까지)
            = 공격시 마나 50 소모
-(함수)방어 = 방어 성공시 마나 100 증가 & 공격 80% 감소 
            = 방어 실패시 공격은 20% 감소
"""
            
import random

class Character:
    def __init__(self):
        self.hp = 100
        self.damage = 10
    
class Knight(Character):
    def __init__(self):
        super().__init__()
        self.hp *=10  # Character의 hp(100)의 10배인 1000으로 설정

    def attack(self):
        self.damage *= self.hp
        # 공격력을 30~500 사이로 제한
        self.damage =max(30,min(500,self.damage*self.hp))
        print(f'기사 공격력 {self.damage}')
    
    def defend(self,opponent_damage):
        if random.random()>0.5: # 방어 성공 확률 반반
            self.hp -= 0.5*opponent_damage
            print(f'방어 성공! 마법사 공격력 절반 감소. 기사 남은 체력: {self.hp}')
            return
        self.hp -= opponent_damage
        print(f'방어 실패! 기사 남은 체력: {self.hp} ')


class Wizard(Character):
    def __init__(self):
        super().__init__()
        self.hp *=5
        self.mana =500

    def attack(self):
        self.damage = self.damage * self.mana * random.randint(3,50)
        self.damage =max(15,min(250,self.damage*self.hp))

        self.mana -=50
        print(f'마법사 {self.damage}만큼 공격! 남은 마나:{self.mana}')
    
    def defend(self,opponent_damage):
        if random.random()>0.5: #방어 성공 확률 반반
            self.mana +=100
            self.hp-=opponent_damage*0.2
            print(f'마법사 방어 성공! 남은 마나 :{self.mana},남은 체력: {self.hp}')
            return
        self.hp -= opponent_damage*0.8
        print(f'마법사 방어 실패! 남은 마나 :{self.mana},남은 체력: {self.hp}')
        

def start_game():
    merlin = Wizard()
    arthur = Knight()

    while True:
        print('---마법사 멀린의 공격 시작---')
        merlin.attack()
        arthur.defend(merlin.damage)
        if arthur.hp<=0:
            print('아서왕이 사망하여 게임 종료')
            break
        print('---기사 아서왕의 공격 시작---')
        arthur.attack()
        merlin.defend(arthur.damage)
        if merlin.hp<=0:
            print('멀린 마법사가 사망하여 게임 종료')
            break

if __name__=="__main__":
    start_game()

 

1-3. private, public 개념

  • Private 함수는 클래스의 내부 구현을 숨기고 보호
  • Public 함수는 외부에서 사용할 수 있는 인터페이스 제공
  • 이를 통해 캡슐화와 정보 은닉을 구현

__함수 로 쓰면 private 함수가 되고 외부 접근 불가
내부 public 함수에서 private함수 쓰면 밖에서도 간접적으로 접근 가능

1-4. Magic Method

 

2. 표준 라이브러리

2-1.collections

-Counter: 시퀀스 자료형의 데이터 값 갯수를 딕셔너리 형태로 반환하는 클래스

counter instance 끼리 사칙연산

 

2-2. math

math 모듈 메서드

 

2-3. 시간

 

2-4. strftime (문자열반환)


%Y: 앞의 빈자리를 0으로 채우는 4자리 연도 숫자
%m: 앞의 빈자리를 0으로 채우는 2자리 월 숫자
%d: 앞의 빈자리를 0으로 채우는 2자리 일 숫자
%H: 앞의 빈자리를 0으로 채우는 24시간 형식 2자리 시간 숫자
%M: 앞의 빈자리를 0으로 채우는 2자리 분 숫자
%S: 앞의 빈자리를 0으로 채우는 2자리 초 숫자
%A: 영어로 된 요일 문자열
%B: 영어로 된 월 문자열

 

2-5. timedelta (날짜나 시간에 대한 연산)

2-6. dateutil

  • 월 단위 연산 가능
  • pip install python-dateutil

2-7. encoding