개발일기

#5 파이썬 연습 (map, filter, lamda, class) 본문

오늘의 공부일기/파이썬 공부일기

#5 파이썬 연습 (map, filter, lamda, class)

츄98 2023. 3. 21. 12:03

Content

  • 새로 알게된 내용
  • 내맘대로 활용하기
  • 느낀 점

1. map : 리스트의 모든 원소를 조작

people = [
    {'name': 'bob', 'age': 20},
    {'name': 'carry', 'age': 38},
    {'name': 'john', 'age': 7},
    {'name': 'smith', 'age': 17},
    {'name': 'ben', 'age': 27},
    {'name': 'bobby', 'age': 57},
    {'name': 'red', 'age': 32},
    {'name': 'queen', 'age': 25}
]

def check_adult(person):
    return '성인' if person['age']>20 else '청소년'
result = map(check_adult, people)
print(list(result))

출력: ['청소년', '성인', '청소년', '청소년', '성인', '성인', '성인', '성인']

map은 people 리스트를 check_adulft에 하나씩 넣고, 그 값을 리스트로 출력

그런데 lambda를 사용하면 함수를 안 쓰고도 출력할 수 있다!

 

2. lambda

result = map(lambda person: ('성인' if person['age']>20 else '청소년'), people)
print(list(result))

출력:  ['청소년', '성인', '청소년', '청소년', '성인', '성인', '성인', '성인']

people 리스트를 person에 넣고 ()를 실행하라는 의미

 

3. filter : 리스트의 모든 원소 중 특별한 것만 뽑기

result = filter(lambda x :x['age']>20, people)
print(list(result))

출력: [{'name': 'carry', 'age': 38}, {'name': 'ben', 'age': 27}, {'name': 'bobby', 'age': 57}, {'name': 'red', 'age': 32}, {'name': 'queen', 'age': 25}] 20살 넘는 사람만 뽑음..!

 

4. class : 객체지향적, 많은 몬스터들의 hp 관리를 몬스터마다 각자 하도록!

class Monster():
    hp = 100
    alive = True

    def damage(self, attack):
        self.hp = self.hp - attack
        if self.hp <0:
            self.alive = False

    def status_check(self):
        if self.alive:
            print('살았다!')
        else:
            print('죽었다!')

m1 = Monster()
m1.damage(150)
m1.status_check() #죽었다!

m2 = Monster()
m2.damage(90)
m2.status_check() #살았다!

 

내 맘대로 활용하기 : 집순이 테스트를 만들어보았어요!

class JipsooniTest():
    like = 100
    alive = True

    def jip(self, hate):
        self.like = self.like - hate
        if self.like <40:
            self.alive = False

    def status_check(self,name):
        if self.alive:
            if self.like>60:
                print(f'{name}님은 진정한 집순이십니다. 환영해요 :)')
            else:
                print(f'{name}님! 집순이가 적성에 맞을지도 몰라~')
        else:
            print(f'죄송하지만.. {name}님께서는 집순이라 하실 수 없어요...ㅠ (숙연)')

test1 = JipsooniTest()
#질문: 하루종일 집에만 있으라고 하면 너는 어때? 싫은 정도를 0부터 100까지 숫자 중에서 골라줘
test1.jip(80)
#이름을 입력해주세요.
test1.status_check('김지수')

test2 = JipsooniTest()
test2.jip(30)
test2.status_check('김지원')

출력: 

죄송하지만.. 김지수님께서는 집순이라 하실 수 없어요...ㅠ (숙연)
김지원님은 진정한 집순이십니다. 환영해요 :)

 

좀 더 개선해보자!

일일이 test에 숫자랑 이름을 입력하는 게 번거로운 작업인 것 같다. 더 편리하게 할 수 없을까.. 더 짧게 만들 수 없을까.. 

함수를 이용해서 코드를 더 짧게 수정했습니다.

 

def test(number,name):
    test1=JipsooniTest()
    test1.jip(number)
    test1.status_check(name)

hate = input("하루종일 집에만 있으면 어때? 싫은 정도를 0부터 100까지 숫자 중에 표현해줘~")
name = input("이름을 적어줘~")

test(int(hate), str(name))

 

이렇게 숫자랑 이름을 함수에 입력하면 바로 값이 나오는 것으로 코드를 줄여보았습니다.

 

느낀 점:

  • 지금까지 배운 내용들을 가지고, 간단하지만 재밌는 Test들을 만들어보는 경험은 즐겁다.
  • 더 배워보고 싶다~