목차
⚙️ 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)
⚙️ 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)