Coding for KidsCoding for Kids
창의적인 레벨도전 과제교사 가이드
기능 투표
고급 파이썬 개발 과정
챕터
>
레벨

데코레이터
더 복잡한 데코레이터

목표

데코레이터와 인수를 사용하여 오븐에서 피자를 올바른 온도로 굽고 샐러드를 준비하세요.

이제 피자들이 이미 준비되었으니, 오븐에서 굽기 시작할 시간입니다. 피자가 완성된 후에는 함께 먹을 샐러드를 준비해야 합니다. 이 작업은 인수가 포함된 데코레이터를 사용하여 수행할 수 있으며, 사용자 정의 함수처럼 데코레이터를 통해 인수를 전달할 수도 있습니다.

피자는 오븐에 넣어야 하지만, 먼저 지도 왼쪽 하단에서 더 많은 firewood를 수집해야 합니다. 수집한 후 왼쪽 오븐 옆 카운터에 있는 바구니를 모으세요. 이 바구니에는 오븐에서 구워질 pizza가 들어 있습니다.

코드 에디터에는 함수와 해당 데코레이터가 설정되어 있습니다. 이 함수는 오븐에 pizza를 넣어 굽는 데 사용되며, 데코레이터는 오븐의 온도가 적절한지 확인하고, 온도가 적절하지 않으면 대신 firewood를 배치합니다.

def place_oven(func): def check(temp): if temp < 450: player.speak("Oven is not hot enough") player.open() player.place("firewood") player.close() return return func(temp) return check @place_oven def bake_pizza(temp): player.open() player.place("pizza") player.close() player.speak("I am baking Pizza at %d degrees" % (temp))

불이 붙은 X 표시까지 걸어가서 오븐을 바라보며 read() 함수를 사용하여 오븐의 온도를 확인하세요. 그 다음, 데코레이터가 적용된 함수 bake_pizza()를 작성하고 읽은 온도를 인수로 추가합니다. 예를 들어: bake_pizza(450).

피자와 장작을 오븐에 배치하는 도중에, 금색 X 표시에서 멈추고 캐비닛을 바라보세요. 여기서 샐러드 재료를 모을 수 있습니다. 현재 샐러드 재료는 코드 에디터에 개요로 작성된 중첩 리스트에 저장되어 있지만, 이 리스트는 정리가 필요하므로 모든 항목을 하나의 리스트로 정리하는 것이 좋습니다.

cabinet = [["lettuce"], ["carrot" , "tomato"] , ["oil" , "ranch", "cesar"] , ["cheese"]] ingredients = [item for sublist in cabinet for item in sublist]

ingredients라는 이름의 리스트를 생성하고 리스트 컴프리헨션을 사용하여 중첩 리스트를 평탄하게 만드세요. 이는 중첩 리스트에서 하위 리스트들을 제거하여 모든 항목이 여러 개의 작은 리스트가 아닌 하나의 리스트에 함께 모이도록 하는 과정입니다. 리스트가 평탄해진 후, speak() 함수를 사용하여 사용하게 될 재료들을 확인하세요.

필요한 모든 항목이 오븐에 배치되고 ingredients 리스트가 준비되면, 어두운 X 표시 쪽으로 걸어가 샐러드를 만드세요. 에디터에는 함수와 데코레이터가 설정되어 있는데, 이번에는 연결되어 있지 않으므로 수동으로 선언해야 합니다. 예를 들어: salad = add_toppings(toss_salad("ranch","carrot")). 이 함수 셋은 dressingvegetable, 두 개의 인수를 받습니다.

def add_toppings(func): def add(dressing, vegetable): player.place(dressing) player.place(vegetable) func(dressing, vegetable) return add @add_toppings def toss_salad(dressing, vegetable): player.combine("lettuce", dressing, vegetable) player.speak("I am preparing salad with %s dressing and %s" % (dressing, vegetable))

각 어두운 X 표시는 색깔 있는 카펫 위에 위치해 있으며, 각 카펫마다 캐비닛에서 가져온 재료로 만들어야 하는 서로 다른 샐러드가 있습니다. 노란색 카펫에서는 cesarcheese를 사용해 샐러드를 만들고, 초록색 카펫에서는 oiltomato를 사용해 샐러드를, 파란색 카펫에서는 ranchcarrot을 사용해 샐러드를 만드세요.

세 개의 샐러드가 모두 데코레이터가 적용된 함수 toss_salad(dressing, vegetable)를 이 형식으로 완성하면, 레벨이 완료됩니다.

코드북