매번 코딩을 하더라도 다르게, 더 발전된 형태로 해보자.
기술 책은 소설책처럼 보는 것이 아닌, 필요한 것만 가져다 효율적으로 읽자.
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 함수는 외부에서 사용할 수 있는 인터페이스 제공
- 이를 통해 캡슐화와 정보 은닉을 구현
1-4. Magic Method
2. 표준 라이브러리
2-1.collections
-Counter: 시퀀스 자료형의 데이터 값 갯수를 딕셔너리 형태로 반환하는 클래스
2-2. 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
'SK Networks Family AI bootcamp 강의노트' 카테고리의 다른 글
9일차 [SQL (DDL,DCL)] (0) | 2025.01.17 |
---|---|
8일차 [ DB(RDB,DDL) ] (0) | 2025.01.16 |
개발 공부 방법 공유 (0) | 2025.01.14 |
6일차 [파이썬기초(iterator,class,상속)] (0) | 2025.01.14 |
5일차 [파이썬기초 (함수)] (0) | 2025.01.13 |