Курс по усъвършенствано разработване с Python
Глава
>
Ниво
Разширени функции
Вложени функции
Цел
Събирайте, преразпределяйте и прибирайте плат, произведен от машините, като използвате вложени функции.
Понякога ще искате да вградите функции в други функции, за да разширите възможностите им. Те се наричат вложени функции или вътрешни функции и имат различни приложения – от създаването на прост, многократно използваем код вътре в една функция до защитата на вашите функции от външни манипулации.
В работилницата има няколко машини за производство на плат, някои имат плат, готов за съхранение, а други изискват нишка, за да завършат производството на плата. Всяка от тях има пред себе си килимче с цвят "red" или "green", което указва как трябва да се използва. В редактора на кода ще бъде написана функция, която ще ни позволи да управляваме машината и да събираме или поставяме материали от нея.
def operate_machine(color):
def collect_cloth():
# Collect Code
player.speak("Cloth is ready for storage")
def place_thread():
# Place Code
player.speak("Machine needed more materials")
if color == "green":
collect_cloth()
if color == "red":
place_thread()
Функцията се нарича operate_machine и приема аргумент, наречен color. В зависимост от това на кое килимче, с цвят "red" или "green", е разположена машината, подаването на този аргумент ще промени работата на машината, позволявайки ви да поставяте или събирате елементи.
Вътре във функцията ще намерите две вложени функции, наречени collect_cloth() и place_thread(), използвани за целите, посочени в имената им. Липсват редове, необходими за изпълнение на действието им; в collect_cloth() добавете реда player.collect("cloth"), който е последван от player.speak("Quilt is ready for storage"), а в place_thread() добавете реда player.place("thread"), който е последван от player.speak("Machine needed more materials").
След като липсващите редове на кода бъдат добавени във вложените функции, отидете до светлата X-емблема пред кутията и вземете "thread", който ще се използва в машината, както следва: player.collect("thread").
Отидете до тъмните X-емблеми вътре в работилницата и използвайте потребителската функция operate_machine, докато сте обърнати към машините. Добавете като аргумент "red" или "green", в зависимост от това на кое килимче се намира X-емблемата, например: operate_machine("red"). Това ще ви позволи да поставите нишката и да съберете плата.
След като съберете целия плат, отидете до златната X-емблема до кутията отзад и използвайте функцията place() за съхранение на плата. Създайте променлива с име cloths, добавете в нея броя на събраните платове и я съхранете в кутията, за да завършите нивото, както следва: player.place(cloths).