[8일차] ASAC 빅데이터 분석가 4기(Python기초-5)

2023. 12. 11. 17:53· ASAC 빅데이터 분석가 4기/Python기초
목차
  1. ⚙️ Python
  2. 📌 상속
  3. 📌 lambda의 활용
  4. 📌 중첩 함수
  5. 📌 map
  6. 📌 filter
  7. 📌 reduce
  8. ⚙️ 실습
  9. 📝 격투 게임 만들기
  10. 📝 격투 게임 만들기 2
  11. 📝 재귀 함수 만들기
  12. 📝 재귀 함수 만들기 2

⚙️ Python

📌 상속

  • 부모가 가진 속성들을 자식이 물려받는 개념
  • 자식은 자신만의 속성을 추가로 가질 수 있다.
class Parent(object):
    def __init__(self):
        self.money = '$1M'

    def speech(self):
        print('천리길도 한 걸음씩')

class Child(Parent): # 상속받는 클래스
    def __init__(self):
        pass

class Puppy(object): # 상속받지 않는 클래스
    def __init__(self):
        pass

📌 lambda의 활용

  • 두 lambda식을 한 줄로 이용하기
ff = lambda x: lambda y: x+y
print(ff(1)(2))

📌 중첩 함수

  • 두개의 함수를 중첩하여 사용할 수 있다.
def f(x):
    def g(y):
        return x + y
    return g

g = f(1)
print(g(2))
def some_func(f): # 고차 함수
    y = f('chanwoo')
    return y

def input_func(x):
    return "hello world " + x

print(some_func(input_func)) # input 함수를 사용하는 경우

print(some_func(lambda x : "hello world " + x)) # input 함수 대신 lambda식을 이용하는 경우

📌 map

  • 주어진 리스트에 대해 동일한 처리를 수행하여 반환해준다.
list(map(lambda x:x+1, [1,2,3,4]))

📌 filter

  • 주어진 리스트에 대해 조건을 만족하는 결과를 필터링 해준다.
list(filter(lambda x: x>2, [1,2,3,4,5,6,7]))

📌 reduce

  • 주어진 초기값부터 시작하여 리스트의 각 원소에 대한 함수 연산 결과를 누적해준다.
from functools import reduce

# ((((((0 + 1) + 2) + 3) + 3) + 5) + 6) -> 20
reduce(lambda x, y : x + y, [1,2,3,3,5,6], 0)

⚙️ 실습

📝 격투 게임 만들기

💡 클래스를 사용하여 간단한 격투 게임을 만들어보자
class Fighter(object):
    def __init__(self, name, martial_arts, hp, punch_damage, kick_damage):
        self.name = name
        self.martial_arts = martial_arts
        self.hp = hp
        self.punch_damage = punch_damage
        self.kick_damage = kick_damage

    def punch(self, object):
        if object.name == self.name:
            print("Cannot attack yourself!")
        else:
            if self.hp > 0:
                if object.hp > 0:
                    object.hp -= self.punch_damage
                    print(f'HIT!!! {self.name} -> {object.name} - {self.punch_damage}')
                else:
                    print(f'{object.name} has already dead')
            else:
                print("You already dead. You can do nothing")

    def kick(self, object):
        if object.name == self.name:
            print("Cannot attack yourself!")
        else:
            if self.hp > 0:
                if object.hp > 0:
                    object.hp -= self.kick_damage
                    print(f'HIT!!! {self.name} -> {object.name} - {self.kick_damage}')
                else:
                    print(f'{object.name} has already dead')
            else:
                print("You already dead. You can do nothing")

    def get_info(self):
        state = 'alive' if self.hp > 0 else 'dead'

        info = f'''
        name : {self.name}
        martial_arts : {self.martial_arts}
        hp : {self.hp}
        state : {state}
        
        Attacking points
        punch : {self.punch_damage}
        kick : {self.kick_damage}
        '''

        print(info)

📝 격투 게임 만들기 2

💡 상속을 사용하여 더욱 체계화된 격투 게임을 만들어보자
class Character(object):
    def __init__(self, name):
        self.name = name
        self.hp = 100

    def punch(self, object):
        print("you cannot punch")

    def kick(self, object):
        print("you cannot kick")

    def staff(self, object):
        print("you cannot use staff")

    def magic(self, object):
        print("you cannot use magic")

    def get_magician_info(self):
        alive = 'alive' if self.hp > 0 else 'dead'

        info = f'''
        name: {self.name}
        HP: {self.hp}
        State: {alive}

        Attacking points
        Staff: {self.staff_damage}
        Magic: {self.magic_damage}
        '''
        print(info)

    def get_fighter_info(self):
        alive = 'alive' if self.hp > 0 else 'dead'

        info = f'''
        name: {self.name}
        martial arts: {self.martial_arts}
        HP: {self.hp}
        State: {alive}

        Attacking points
        Punch: {self.punch_damage}
        Kick: {self.kick_damage}
        '''
        print(info)

class Fighter(Character):
    def __init__(self, name, martial_arts, punch_damage, kick_damage):
        super().__init__(name = name)
        self.martial_arts = martial_arts
        self.punch_damage = punch_damage
        self.kick_damage = kick_damage

    def punch(self, object):
        if object.name == self.name:
            print("Cannot attack yourself!")
        else:
            if self.hp > 0:
                if object.hp > 0:
                    object.hp -= self.punch_damage
                    print(f'HIT!!! {self.name} -> {object.name} - {self.punch_damage}')
                else:
                    print(f'{object.name} has already dead')
            else:
                print("You already dead. You can do nothing")

    def kick(self, object):
        if object.name == self.name:
            print("Cannot attack yourself!")
        else:
            if self.hp > 0:
                if object.hp > 0:
                    object.hp -= self.kick_damage
                    print(f'HIT!!! {self.name} -> {object.name} - {self.kick_damage}')
                else:
                    print(f'{object.name} has already dead')
            else:
                print("You already dead. You can do nothing")

class Magician(Character):
    def __init__(self, name, martial_arts, staff_damage, magic_damage):
        super().__init__(name = name)
        self.martial_arts = martial_arts
        self.staff_damage = staff_damage
        self.magic_damage = magic_damage

    def staff(self, object):
        if object.name == self.name:
            print("Cannot attack yourself!")
        else:
            if self.hp > 0:
                if object.hp > 0:
                    object.hp -= self.staff_damage
                    print(f'HIT! {self.name} -> {object.name} -{self.staff_damage}')
                else:
                    print(f'{object.name} has already dead')
            else:
                print(f'{object.name} has already dead')

    def magic(self, object):
        if object.name == self.name:
            print("Cannot attack yourself!")
        else:
            if self.hp > 0:
                if object.hp > 0:
                    object.hp -= self.magic_damage
                    print(f'MAGIC!! {self.name} -> {object.name} -{self.magic_damage}')
                else:
                    print(f'{object.name} has already dead')
            else:
                print(f'{object.name} has already dead')

📝 재귀 함수 만들기

💡 중첩 함수를 재귀 함수로 만들어보자
def call_something(f, xs):
    new_xs = []
    for x in xs:
        new_xs.append(f(x))
    return new_xs

def call_rec(f, xs):
    if not xs:
        return []
    h, *t = xs
    return [f(h)] + call_rec(f,t)

📝 재귀 함수 만들기 2

💡 filter 연산을 재귀 함수로 만들어보자
def filter_rec(f, xs):
    if not xs:
        return []
    h, *t = xs

    if f(h):
        return [h] + filter_rec(f, t)
    else:
        return filter_rec(f, t)
저작자표시 비영리 변경금지 (새창열림)
  1. ⚙️ Python
  2. 📌 상속
  3. 📌 lambda의 활용
  4. 📌 중첩 함수
  5. 📌 map
  6. 📌 filter
  7. 📌 reduce
  8. ⚙️ 실습
  9. 📝 격투 게임 만들기
  10. 📝 격투 게임 만들기 2
  11. 📝 재귀 함수 만들기
  12. 📝 재귀 함수 만들기 2
'ASAC 빅데이터 분석가 4기/Python기초' 카테고리의 다른 글
  • [12일차] ASAC 빅데이터 분석가 4기(Python기초-6)
  • [7일차] ASAC 빅데이터 분석가 4기(Python기초-4)
  • [6일차] ASAC 빅데이터 분석가 4기(Python기초-3)
  • [4일차] ASAC 빅데이터 분석가 4기(Python기초-2)
zzzini
zzzini
종착지는 어디인지 모르지만
zzzini
나의 표류일지
zzzini
전체
오늘
어제
  • 분류 전체보기 (307)
    • ASAC 빅데이터 분석가 4기 (44)
      • Python기초 (6)
      • SQL (3)
      • Matplotlib & Seaborn (2)
      • Data Handling (6)
      • Web Crawling (3)
      • Machine Learning (9)
      • Deep Learning (10)
      • 데이터 분석 (1)
      • 기타 (2)
      • 수학 (2)
    • 코딩 테스트 준비 (168)
      • 5정한 (132)
      • 카카오 (14)
      • PCCP & PCCE (3)
      • 프로그래머스 (19)
    • 자격증 (35)
      • AWS CLF-C02 (18)
      • AWS SAA-C03 (1)
      • Tableau Desktop Specialist (5)
      • Tableau Certified Data Anal.. (11)
    • 독서 (17)
    • Tech (23)
      • Tableau (10)
      • AI (4)
      • Flask (1)
      • Node.js (2)
      • Cloud Computing (2)
      • Git & GitHub (1)
      • Notion API (1)
      • Linux (2)
    • Projects (2)
    • 알고리즘 공부 (6)
    • 🎵 (11)

블로그 메뉴

  • 글 쓰기
  • 홈
  • 방명록

공지사항

hELLO · Designed By 정상우.v4.2.1
zzzini
[8일차] ASAC 빅데이터 분석가 4기(Python기초-5)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.