ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • TIL 2023.03.31
    내일배움캠프 2023. 3. 31. 22:04

    오늘은 어제 알고리즘 세션에서 배운 정렬 알고리즘을 분석해봤는데 새로운 걸 알게 되었다.

    my_string_list[num1], my_string_list[num2] = my_string_list[num2], my_string_list[num1]

    이런식으로 a, b = b, a 하면 서로 바뀌게 된다. 대박

     

    그리고 팀과제 해설 강의에선 알게된 게 정말 많다.

    딕셔너리의 활용이 정말 무궁무진한데,

    class BaseCharacter:
        def __init__(self, name, hp, normal_power):
            self.name = name
            self.max_hp = hp
            self.current_hp = hp
            self.normal_power = normal_power
            self.actions = {
                "1": {
                    "verbose": "일반 공격",
                    "action": self.normal_attack,
                }
            }
            
            
    class Player(BaseCharacter):
        def __init__(self, name, hp, mp, normal_power, magic_power):
            super().__init__(name, hp, normal_power)
            self.max_mp = mp
            self.current_mp = mp
            self.magic_power = magic_power
            self.actions["2"] = {
                "verbose": "마법 공격",
                "action": self.magic_attack,
            }
            self.actions["3"] = {
                "verbose": "특수 공격",
                "action": self.special_attack,
            }

     

    이런 식으로 클래스 이닛 안에 딕셔너리로 공격방식을 만들어 놓고

     

            print("행동을 선택해주세요")
            # actions : {"1": {verbose: 일반공격, action: normal_attack}}
            for k, v in player.actions.items():
                print(f"{k} : {v['verbose']}")
    
            # input("1 : 일반 공격, 2 : 마법 공격 ...")
            action = input("선택 : ")
            
            player.actions[action]["action"](monsters[selected_monster])

     

    이렇게 만든 딕셔너리를 포문으로 돌려 출력하는 기발한 방법이 있었다.

    이렇게 되면 클래스 내의 actions에만 공격 방식을 추가해주면 자동으로 출력되는 것에도 추가되기 때문에 휴먼에러를 방지할 수 있다.

    또 if문 남발하지 않고 인풋으로 숫자를 입력받아

    plyer.actions의 [입력받은 숫자의 키] [의 액션이라는 키를 가진 밸류(메쏘드)]() 로 메쏘드를 바로 호출할 수 있다.

     

     

    Immutable과 Mutable

    Immutable 객체는 수정이 불가능하고 int, float, str, tuple 같은 자료형이 있다.

    Mutable 객체는 수정이 가능하고 list, dict 가 그렇다.

     

    a = "asdf"
    
    a_ = a
    a_ + "123"
    
    print(a)

    하면  asdf123 이 출력될까?

    아니,  asdf 가 출력된다.

    문자열은 Immutable하기 때문에 a_ = a 라고 선언해줘도 다른 주소에 할당 되고. a_ 을 수정한다고 a에 영향을 주지 않는다.

     

    Mutable한 리스트는 어떨까

    a = [1, 2, 3]
    
    a_ = a
    
    a_.append(4)
    
    print(a)

    여기선 [1, 2, 3, 4] 가 출력된다. 리스트는 Mutable하기 때문에 다른 변수로 선언해줘도 같은 주소에 할당된다. a_를 건드리면 a도 영향을 미친다.

    '내일배움캠프' 카테고리의 다른 글

    TIL 2023.04.03  (0) 2023.04.03
    WIL 내일배움캠프 3주차  (0) 2023.03.31
    TIL 2023.03.30  (0) 2023.03.30
    TIL 2023.03.29  (0) 2023.03.29
    TIL 2023.03.28  (0) 2023.03.28
Designed by Tistory.