오늘 배운 부분은 전보다 더 어려운거 같다.
함수에서의 재귀호출이나 람다 표현식은 옛날에 학교에서 배웠던 확률이 떠올랐다.
확률에서 나오는 !(팩토리얼)이 나와서 이해가 금방 되는 편이였다.
이 부분에서 기억에 남는 부분 역시
def factorial(n):
if n == 1:
return 1
return n * factorial(n - 1)
print(factorial(5))
팩토리얼을 사용해서 값이 나오게하는 로직이며 위의 값은 5!인 120이 나온다.
여기서 한가지 궁금한게 return 값을 음수로 바꿨을 때 -2면 -240 -3이면 -360이 나온다.
왜 음수는 팩토리얼에 포함되지 않을까?
오늘의 궁금증 하나.
그 다음 배운 클래스와 매서드.
솔직히 처음에 클래스 부분에서 게임 직업처럼 나와서 게임처럼 이해하면되나 싶어서 기대를 했었지만 정말 어려웠다.
class Person:
bag = []
def put_bag(self, stuff):
self.bag.append(stuff)
james = Person()
james.put_bag('책')
maria = Person()
maria.put_bag('열쇠')
print(james.bag)
print(maria.bag)
하면 결과는
['책', '열쇠']['책', '열쇠']
이런 식으로 한사람에 하나만 넣어줬는데 2개다 가지는 결과를 도출한다.
그래서 밑의 방식으로 개선을 하면 줍는 것만 나오게 표시 할 수 있다.
class Person:
def __init__(self):
self.bag = []
def put_bag(self, stuff):
self.bag.append(stuff)
james = Person()
james.put_bag('책')
maria = Person()
maria.put_bag('열쇠')
print(james.bag)
print(maria.bag)
결과는
['책']['열쇠']
여기서의 차이점 하나는 bag를 인스턴트 시켰다는 것이다. 인스턴트 시킴으로써 독립이 되어 서로 영향을 주지 않게 만들면 밑의 값처럼 나오는 것이다.
마지막으로 비공개 클래스 속성인데 이건 밑줄 2개 __속성 이런식으로 해야한다.
class Person:
def __init__(self, name, age, address, wallet):
self.name = name
self.age = age
self.address = address
self.__wallet = wallet # 변수 앞에 __를 붙여서 비공개 속성으로 만듦
def pay(self, amount):
self.__wallet -= amount # 비공개 속성은 클래스 안의 메서드에서만 접근할 수 있음
print('이제 {0}원 남았네요.'.format(self.__wallet))
maria = Person('마리아', 20, '서울시 서초구 반포동', 10000)
maria.pay(3000)
이런 식으로 사용하는데 게임을 생각해 보면 케릭터 이름은 모든 사람들이 볼 수 있지만, 개인이 가지고 있는 돈은 자기 자신만 확인할 수 있는 것 처럼 남에게는 안보여주고 나만 볼 수 있게 만들 때 사용한다.
왠지 이부분을 좀 더 깊게 파면 게임분야로 나갈 수도 있지 않을까 싶은데 너무 어렵다.