Edistynyt Python-kehityskurssi
Luku
>
Taso
Edistyneet funktiot
Suljetut funktiot
Tavoite
Säätele vesihuoltoa maatilalla määrittelemällä ja käyttämällä sulkufunktioita.
Maatilalla kastelua varten on suunniteltu neljä vesisäiliötä, ja on korkeaa aika vaihtaa niitä varmistaaksemme, että oikea määrä vettä jaetaan oikeisiin paikkoihin. Tätä tehtävää voidaan helpottaa käyttämällä sulkufunktioita.
Sulkufunktiot ovat sisäkkäisiä funktioita, jotka on suunniteltu kapseloimaan dataa. Tämä vähentää tarvittavien muuttujien määrää ja piilottaa datan funktion sisälle, jolloin sitä ei voida manipuloida ulkopuolelta, toisin sanoen funktio suljetaan.
Säätääksemme säiliöiden vettä luomme sisäkkäisen funktion, joka toimii kerrottimena. Tämä funktio toimii samalla tavoin kuin silmukka: ulompi funktio nimeltä multiplier_of() ottaa argumentin, jota kerrotaan sen sisemmän funktion, multiplier(), argumentilla.
# Nested Function
def multiplier_of(n):
def multiplier(number):
return number*n
return multiplier
Kun funktio on määritelty, meidän täytyy kapseloida se sulkufunktiolla, mikä estää pääsyn sen arvoihin ja vahvistaa sen käyttöä.
# Set up Closure that multiplies any number by 2 multiply_by_2 = multiplier_of(2) # Uses closure to display a number on screen player.speak( multiply_by_2(4) ) # The number displayed is 8, the formula is [2 x 4 = 8]
Yllä oleva sulkufunktio on nimetty multiply_by_2() ja se käyttää luomaamme sisäkkäistä funktiota, johon on asetettu argumentti 2. Tämä tarkoittaa, että mikä tahansa annettu luku kerrotaan kahdella (2) eikä tätä ominaisuutta voida muuttaa kapseloinnin vuoksi.
Jatkaaksesi säiliöiden vesimäärän säätämistä, määritä kolme (3) sulkufunktiota: multiply_by_2, multiply_by_3 ja multiply_by_5. Aseta kukin niistä manuaalisesti samalla muodolla kuin aiemmin esitetty esimerkki, esimerkiksi: multiply_by_2 = multiplier_of(2).
Tällä tasolla on sanakirjakonstanti nimeltä tanks, jonka avaimina ovat kuusi (6) väriä: "red", "blue", "orange", "purple", "yellow" ja "green". Jokainen avain sisältää luvun, joka ilmaisee, kuinka paljon vettä virtaa säiliön sivulta; tätä lukua käytetään säiliön säätämiseen käyttäen aiemmin käsiteltyjä "multiply_by"-sulkufunktioita.
Tämän helpottamiseksi editoriin määritetään funktio nimeltä regulate_water(), joka ottaa kaksi argumenttia: värin, joka vastaa yllä mainittuja avaimia, ja kertoimen, joka edustaa käytettävää sulkufunktiota. Esimerkki funktion käytöstä on seuraava: regulate_water("red", multiply_by_2).
Kävele ylös tummien X-merkkien luo, joiden alla ovat värilliset matot, ja kohtaa säiliöt; käytä funktiota regulate_water() ja aseta maton väri ensimmäiseksi argumentiksi sekä oikea kertojasulkufunktio toiseksi. Kunkin maton kanssa käytettävät kertoimet ovat seuraavat:
multiply_by_2 - "red" and "green" multiply_by_3 - "blue" and "purple" multiply_by_5 - "orange" and "yellow"
Säädä jokaisen säiliön sivulta virtaavan veden määrä, jotta saat tason päätökseen.