오늘은 어제에 이어서 클래스 수업을 이어갔습니다.
강의 시작하기 전에 몇가지 이해도를 높일 수 있는 강의를 해주셨는데
그 부분이 좋았습니다.
함수의 이름도 변수이고, 결국 class 라는 거죠. print
도 마찬가지 입니다.
매번 쓰다보니 뭐가 다르게 구성된것만 같지만 결국 파이썬 코드 안에서 이뤄진다는 것입니다.
(물론 속도가 필요한 부분은 다르게 구성됐겠지요?^^)
def hello(): # function의 인스턴스
pass
print(type(hello)) # 함수도 class 입니다.
hojun = print
hojun('hello world')
a = 10
# a는 무엇이죠?
# a는 int에 인스턴스
print('hello world') # built-in function
print
도 변수처럼 이름도 바꾸고, 다르게 사용할 수 있었습니다. 재밌는 코드였습니다.
그외 lambda 의 응용, map, filter, sorted 등의 사용을 배웠습니다. 다양하게 배웠지만 여기서는
과제를 통해서 만들었던 코드를 올려봅니다.
# 라이캣은 연말 출시할 게임의 게임 난이도를 조절하는 업무를 담당하게 되었습니다.
# 우선 능력치가 비정상적으로 높은 캐릭터들의 리스트를 뽑고자 합니다.
# 캐릭터 이름, 공격력, 방어력, 체력, 마력이 리스트로 ['Licat', 98, 30, 21, 60]와 같이 주어졌을 때
# 모든 능력치의 합이 350 이상이 되는 캐릭터의 이름을 출력하는 solution함수를 완성해주세요.
# 3 ≤ 캐릭터의 수 ≤ 10
# 10 ≤ 능력치 ≤ 100
# 350이 넘는 캐릭터의 이름은 알파벳 순으로 출력합니다.
character_list1 = [['Licat', 98, 92, 85, 97], ['Mura', 95, 32, 51, 30], ['Binky', 98, 98, 51, 32]]
character_list2 = [['Gray', 98, 92, 85, 97], ['Gom', 98, 30, 21, 60], ['Allosa', 98, 90, 99, 98]]
# step2 350이 넘는 캐릭터 이고, 각 능력치 값이 10 이상 100 이하 일때 True
def is_ok_value(character):
if sum(character[1:]) >= 350 and all(list(map(lambda x:True if 10 <= int(x) <= 100 else False, character[1:]))):
return True
else:
return False
def solution(data):
select_character = []
# step1 3 ≤ 캐릭터의 수 ≤ 10
if 3 <= len(data) <= 10:
for character in data:
if is_ok_value(character):
select_character.append(character[0])
return sorted(select_character)
else:
print("캐릭터 수가 3 보다 크고 10 보다 작아야 합니다.")
solution(character_list2)
과제를 온전히 내 힘으로 했으면 좋았겠지만 내장함수 사용하는 부분들은 아직 어렵습니다.
전체적인 그림은 생각한 대로 했지만 부분적으로 계속 오류나는 내장함수 사용은
ChatGPT를 활용했습니다. 그래도 하루종일 걸리네요.
일단 제일 어려웠던 부분을 정리해보겠습니다.
def is_ok_value(character):
if sum(character[1:]) >= 350 and \
all(list(map(lambda x:True if 10 <= int(x) <= 100 else False, character[1:]))):
return True
else:
return False
이 부분이었습니다.sum(character[1:]) >= 350
이건 그래도 쉽게 만들었습니다.character[1:]
로 [98, 92, 85, 97]
형태로 값을 만들어주고, 다 더해서 350 보자 큰 값
이면 True 리턴. False면 뒤에 and는 확인하지 않고, 넘어가겠죠?all(list(map(lambda x:True if 10 <= int(x) <= 100 else False, character[1:])))
여기서 원하는 목표는 능력치 각각의 값들이 10 이상 100 이하인 리스트들을 골라 내는 것이었습니다.
삼항 연산자와 lambda와 map 까지ㅎ
and 앞부분 처럼 character[1:]
로 [98, 92, 85, 97]
형태로 만들어 줍니다.
삼항 연산자로 각각의 값을 10 <= int(x) <= 100
를 통해 비교하고,
조건이 맞으면 True, 틀리면 False 를 반환하게 됩니다.
거기에 map을 씌우고 list로 만들어주면 [True, True, True, True]
와 같은 리스트를
만들 수 있습니다.
그 리스트에 all()
을 사용해서 10 <= int(x) <= 100
조건에 맞지 않는 False 가 하나라도
있으면 False 가 되는 겁니다.
그러면 그 리스트는 append 가 되지 않게 됩니다.
다른 과제들도 쉽지 만은 않았지만 이 부분에서 2시간 이상 헤매면서 이것저것 만들어 봤네요.
다른 수강생들 코드를 봤는데 코드들이 간단하게 잘 했더라고요.
아직도 가야할 길이 멀다고 느껴집니다. 다루는게 쉽지 않아요.
'오름캠프(23.12.28 ~ 24.4.18)' 카테고리의 다른 글
오름캠프 학습일지(2024/01/15) - 4주차 1일 (1) | 2024.01.15 |
---|---|
오름캠프 학습일지(2024/01/12) - 3주차 5일 (1) | 2024.01.12 |
오름캠프 학습일지(2024/01/10) - 3주차 3일 (1) | 2024.01.10 |
오름캠프 학습일지(2024/01/09) - 3주차 2일 (2) | 2024.01.09 |
오름캠프 학습일지(2024/01/08) - 3주차 1일 (1) | 2024.01.08 |