Coding for KidsCoding for Kids
Креативни НиваПредизвикателстваРъководство за Учители
Гласувайте за функции
Курс по усъвършенствано разработване с Python
Глава
>
Ниво

Декоратори
По-сложни декоратори

Цел

Задайте пиците в пещта на правилните температури и подгответе салати, използвайки декоратори с аргументи.

Сега, когато пиците вече са подготвени, е време да ги изпечем в пещите. След като това бъде направено, трябва да подготвим салати, които да сервираме заедно с пиците. Можете да осъществите тези задачи, използвайки декоратори с аргументи; подобно на потребителските функции, можете също да предавате аргументи чрез своите декоратори.

Пиците трябва да се поставят в пещта, но първо трябва да съберете повече "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).

Докато поставяте пиците и "firewood" в пещите, спирайте на златистото петно, маркирано с X, и се обърнете към шкафа, където можете да съберете съставките за приготвянето на салатите. В момента съставките за салата са съхранени във вложен списък, който е очертан в редактора на кода, но този списък е неразпределен и би било във ваша полза да имате артикулите съхранени в правилен списък, за да ги използвате за салатите.

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

Създайте списък с име ingredients и използвайте List Comprehension, за да „изравните“ вложения списък. Това е процесът на премахване на вложените списъци от основния, така че всички елементи да бъдат заедно в един списък, а не в няколко по-малки списъци. След като списъкът бъде изравнен, използвайте функцията speak() с този списък, за да потвърдите съставките, които ще използвате.

След като всички необходими артикли бъдат поставени в пещите и списъкът ingredients бъде обработен, отидете до тъмните петна, маркирани с X, за да създадете салатите. В редактора е зададена функция и декоратор, които този път не са свързани и трябва да бъдат декларирани ръчно, например: salad = add_toppings(toss_salad("ranch","carrot")). Този набор от функции приема два (2) аргумента: dressing и vegetable.

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, е разположено върху цветен килим. На всеки от тях трябва да бъде приготвена различна салата, използвайки събраните от вас съставки от шкафа. На жълтия килим създайте салата с: "cesar" и "cheese"; на зеления килим създайте салата с: "oil" и "tomato"; а на синия килим създайте салата с: "ranch" и "carrot".

След като трите (3) салати бъдат създадени, използвайки декорираната функция toss_salad(dressing, vegetable) в този формат, нивото ще бъде завършено.

Книга с Код