Today I Learned
1. 팀 과제 (터미널 턴 게임 고도화 시키기)
- 어제 팀과제에서 기초적인 틀을 잡고 플레이어 클래스가 가질 속성들을 정하고, 레벨업함수를 작성했다.
- 레벨업 함수에서 필요한 경험치 초기화라던 지, 체력회복 시에도 디폴트 값으로 주는 것이 아닌 고정되어 있는
max_hp를 늘리고 체력회복 시 max_hp값을 current_hp에 넣어주었다.
- exp를 받고 exp_limit이 되면 level_up 함수를 호출하도록 하였고,
level_up함수는 공통부분만 부모클래스에 놔두고, 각 캐릭터의 클래스에선 super()로 메소드 오버라이딩!
특수스킬만 값을 늘려주고 f-strings를 이용한 레벨업 알림과 현재 스텟 상태를 알려주는 출력문 작성
2.
아침에 알고리즘 문제를 풀 때 궁금해서 찾아본 iterator
문제
위 코드에서 그냥 reversed를 적어주면 제대로 된 답이 나오지 않았다. 저번 map함수를 쓸 때도 그냥 쓰지 않고 list로 감싸준 뒤 사용해야했었던 게 생각나서 이터레이터(iterator)에 대해 조금 더 알아보자는 마음이 들었다.
시도
오류메세지를 읽고 이터레이터(iterator)에 대해서 공부했다
해결
이 부분에 대해 여쭤보니 사실 지금의 과정에서는 아직 배우지 않아도 된다고 튜터님이 설명해주셨다. 그래서 간단하게 개념을 잡고 개인적으로 조금 더 찾아본 후 TIL에 정리하는 중
1. 리스트와 이터레이터의 차이점
-둘의 큰 차이점은 인덱스의 유무. 리스트는 인덱스가 있기에 원하는 위치에 빠르게 접근할 수 있고,
리스트의 요소를 추가/삭제/수정 가능하다.
- 이터레이터는 대용량의 데이터 집합을 처리할 때 유용하고, 인덱스가 없기에 for문이나 next()함수를 사용해서 순회함
(enumerate()함수를 사용한다면 인덱스 반환이 가능하긴 함)
- 이터레이터는 반복 순회가 불가능하다. (아래 예시)
=> map함수를 이용해서 a의 모든 요소에 람다식을 적용시킨 값을 nums에 할당했다. map함수는 이터레이터 객체를 반환하므로 nums는 for문으로 순회하면서 출력해야 print가능하다. 또한 for문을 2번 사용하여 출력문을 적었는데,
실제로 실행시켜 보면
1
4
9
16
25
이런 식으로 처음의 for문을 순회하면서 print했던 i값만 출력이 됨을 알 수 있다.
이 값을 출력 해본다면 <map object at 0x0000025C754E5F40> 같은 결과가 나오는데,
유효한 결과값이 아니기에 list나 tuple로 자료형을 변환하던지, 반복문을 사용하여 순회하던지 해야한다.
2. 제너레이터?
제너레이터는 간단히 이터레이터 객체를 생성하는 함수라고 알아두기로 했다.
*이터레이터를 생성하는 함수
range()
파일 입출력 함수 (open()..)
enumerate()
map()
filter()
sorted()
reversed()
'내일배움캠프 > 내일배움캠프 TIL' 카테고리의 다른 글
내일배움캠프 AI 5기 TIL 16일차 (0) | 2023.04.03 |
---|---|
내일배움캠프 AI 5기 TIL 15일차 (0) | 2023.03.31 |
내일배움캠프 AI 5기 TIL 13일차 (0) | 2023.03.29 |
내일배움캠프 AI 5기 TIL 12일차 (4) | 2023.03.28 |
내일배움캠프 AI 5기 TIL 11일차 (2) | 2023.03.27 |