고급 파이썬 개발 과정
챕터
>
레벨
고급 리스트
맵, 필터, 리듀스
목표
Map, Filter, Reduce를 사용하여 아이스크림 혼합과 생산을 완료하세요.
일부 아이스크림 맛은 재료가 부족하거나 비어 있지만, 보충할 충분한 재료가 있어 더 많은 아이스크림을 만들 수 있습니다. 이를 위해 반복문과 조건문을 압축하여 작성해야 하는 코드를 최소화할 수 있는 강력한 도구인 Map을 사용해야 합니다. Filter와 Reduce 함수는 Map 함수와 보완적으로 작동하며, 여러분의 코딩에 필요한 다양한 기능을 제공합니다.
먼저 프로그램 시작 부분에 다음 코드를 추가하여, 함수 사용을 위해 functools 라이브러리에서 Reduce를 가져옵니다: from functools import reduce . Map과 Filter 함수는 Python에 내장되어 있으므로 별도로 가져올 필요가 없습니다.
먼저, 냉동 창고에서 재료를 가져온 후 금색 X 마크로 걸어가세요. 문을 향해 서서 open() 함수를 사용하여 문을 여세요. 냉동 창고에서 모든 "cream" 항아리를 가져온 다음, 녹색 카펫 위의 빛나는 X 마크로 걸어가세요.
필드에는 vanilla, strawberry, chocolate라는 세(3)의 리스트 상수가 있습니다. 각 상수는 아이스크림 맛을 구성하는 재료들의 조합을 가지고 있습니다. 녹색 X 마크에서 strawberry 리스트 상수의 내용을 확인하세요. 먼저, place() 함수를 사용하여 이전에 가져온 "cream"을 내려놓고, speak() 함수를 사용하여 strawberry 리스트 상수의 내용을 확인하세요.
확인이 완료되면, 모든 요소가 소수점인 strawberry 리스트 상수를 대상으로 Map 함수를 사용하세요. map() 함수를 사용하면 각 요소를 반복문으로 하나하나 반올림할 필요 없이, 리스트의 모든 요소를 반올림할 수 있습니다. 이를 위해 map1이라는 리스트를 생성하고, strawberry 리스트와 round() 함수를 결합하여 map() 함수를 사용하세요. 예: map1 = list(map(round, strawberry)) . 완료되면 speak() 함수를 사용하여 map1의 결과를 확인하세요.
이제 Filter로 넘어갑니다. Filter는 Map과 유사하게 작동하지만, 대신 함께 사용할 함수를 필요로 합니다. 에디터 상단에 미리 제공된 main_ingredients 함수는 숫자가 25보다 큰지 여부를 판단하는 함수입니다.
def main_ingredients(value):
return value > 25
루프를 사용하지 않고 이 함수를 filter() 함수와 함께 사용하여, 값이 25를 초과하는 항목들, 즉 주 재료들만으로 구성된 새 리스트를 만들 수 있습니다. filter1이라는 새 리스트를 생성하고, main_ingredients와 map1을 사용하여 filter() 함수를 적용하세요. 예: filter1 = list(filter(main_ingredients, value)) . 완료되면 speak() 함수를 사용하여 filter1의 결과를 확인하세요.
이제 Reduce로 넘어갑니다. 이는 Filter와 유사하게 작동하지만, 리스트를 하나의 단일 값으로 축소하거나 결합하는 역할을 합니다. 마찬가지로 사용자 정의 함수인 custom_sum을 사용합니다. 이 함수는 두 숫자를 동적으로 더합니다.
def custom_sum(first, second):
return first + second
reduce1이라는 변수를 생성하고, custom_sum 함수와 filter1을 함께 사용하여 reduce() 함수를 적용해 리스트의 모든 항목을 단일 값으로 통합하세요. 예: reduce1 = reduce(custom_sum, filter1) . 완료되면 speak() 함수를 사용하여 reduce1의 결과를 확인하세요.
Map, Filter, Reduce 사이클을 완료했으면, 빨간색과 파란색 카펫 위의 빛나는 X 마크에서도 동일한 사이클을 반복하세요. 빨간색 카펫에서는 vanilla 리스트 상수를 사용하여 map2, filter2, reduce2를 생성하고, 파란색 카펫에서는 chocolate 리스트 상수를 사용하여 map3, filter3, reduce3을 생성하세요.
마지막으로 보라색 카펫 위에 있는 마지막 빛나는 X 마크로 이동하여, vanilla, strawberry, chocolate의 주 재료를 결합합니다. reduce1, reduce2, reduce3를 모두 더하여 neapolitan이라는 변수를 생성하세요. 예: neapolitan = reduce1+reduce2+reduce3 . 결합된 결과를 speak() 함수로 확인한 후, place() 함수를 사용하여 네아폴리탄 아이스크림을 만들어 레벨을 완료하세요.