Zaawansowany kurs programowania w Pythonie
Rozdział
>
Poziom
Zaawansowane Funkcje
Funkcje zagnieżdżone
Cel
Zbieraj, redystrybuuj i odkładaj tkaninę wyprodukowaną przez maszyny, używając funkcji zagnieżdżonych.
Czasami będziesz chciał umieścić funkcje wewnątrz innych funkcji, aby poszerzyć ich możliwości. Nazywamy je funkcjami zagnieżdżonymi lub funkcjami wewnętrznymi; mają różne zastosowania, od tworzenia prostego, wielokrotnego użytku kodu wewnątrz funkcji, po ochronę funkcji przed zewnętrzną ingerencją.
W warsztacie znajduje się kilka maszyn produkujących tkaninę; niektóre z nich mają tkaninę gotową do przechowania, inne wymagają nici, aby zakończyć produkcję tkaniny. Każda z nich ma przed sobą dywanik o kolorze "red" lub "green" lub zielony dywanik, który wskazuje jej przeznaczenie. W edytorze kodu zostanie napisana funkcja, która pozwoli nam obsługiwać maszynę i zbierać lub umieszczać materiały z maszyny.
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()
Funkcja nazywa się operate_machine i przyjmuje argument o nazwie color. W zależności od koloru dywanika przed maszyną, podanie argumentu "red" lub "green" zmieni działanie maszyny, pozwalając ci na umieszczenie lub zebranie przedmiotów.
Wewnątrz funkcji znajdziesz dwie funkcje zagnieżdżone, o nazwach collect_cloth() i place_thread(), używane do celów określonych przez ich nazwy. Brakuje w nich linii niezbędnych do wykonania ich działania: w collect_cloth() dodaj linię player.collect("cloth"), po której następuje player.speak("Quilt is ready for storage"), a w place_thread() dodaj linię player.place("thread"), po której następuje player.speak("Machine needed more materials").
Gdy brakujące linie kodu zostaną dodane do funkcji zagnieżdżonych, udaj się do jasnego znaku X przed skrzynią i zbierz "thread", aby użyć go w maszynie, na przykład tak: player.collect("thread").
Następnie udaj się do ciemnych znaków X wewnątrz warsztatu i użyj niestandardowej funkcji operate_machine, stając naprzeciw maszyn. Dodaj jako argument "red" lub "green", w zależności od koloru dywanika, na którym znajduje się znak X, na przykład: operate_machine("red"). Pozwoli ci to umieścić nić i zebrać tkaninę.
Gdy zbierzesz całą tkaninę, udaj się do złotego znaku X obok skrzyni z tyłu i użyj funkcji place(), aby przechować tkaninę. Utwórz zmienną o nazwie cloths, dodaj do niej liczbę zebranych tkanin i umieść je w skrzyni, aby ukończyć poziom, na przykład tak: player.place(cloths).