Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Sisäkkäiset Silmukat | Silmukat
Python Ninja

book
Sisäkkäiset Silmukat

Tässä luvussa tutkimme sisäkkäisten silmukoiden käsitettä. Sisäkkäiset silmukat ovat silmukoita silmukoiden sisällä, ja ne ovat tehokas työkalu ohjelmoinnissa, joka mahdollistaa toistuvien toimien suorittamisen jäsennellyllä tavalla. Käyttämällä sisäkkäisiä silmukoita voimme tehokkaasti navigoida ja käsitellä monimutkaisia rakenteita, kuten ruudukoita, mikä on juuri sitä, mitä Ninja tekee tässä luvussa.

Kuvittele Ninja liikkumassa ruudukossa keräämässä sushia. Ruudukko koostuu riveistä ja sarakkeista, ja tavoitteemme on kerätä kaikki ruudukkoon hajallaan oleva sushi. Tämän saavuttamiseksi voimme käyttää sisäkkäisiä silmukoita: yksi silmukka liikkumaan rivien poikki ja toinen silmukka liikkumaan jokaisen sarakkeen läpi.

Katsotaanpa esimerkkiä ymmärtääksemme, miten sisäkkäiset silmukat toimivat Ninja-pelimme yhteydessä:

py

ninja.py

copy
def ninja_controller(ninja):
ninja.go_left()
while ninja.object_right() != "wall":
loot_column(ninja)
ninja.go_right()
loot_column(ninja)

def loot_column(ninja):
steps = 0
while ninja.object_up() == "sushi":
ninja.pick_sushi()
ninja.go_up()
steps += 1
ninja.pick_sushi()
for i in range(steps):
ninja.go_down()

Yllä olevassa esimerkissä meillä on kaksi funktiota: ninja_controller ja loot_column. ninja_controller-funktio käyttää while-silmukkaa liikuttaakseen Ninjaa ruudukon poikki vasemmalta oikealle. Jokaiselle sarakkeelle se kutsuu loot_column-funktion, joka sisältää toisen while-silmukan liikuttaakseen Ninjaa ylöspäin, keräten sushia matkalla. Kun Ninja saavuttaa sarakkeen yläosan, se käyttää for-silmukkaa palatakseen alkuperäiseen asemaansa.

Sisäkkäistämällä while-silmukan loot_column-funktion sisällä while-funktion ninja_controller-silmukassa, voimme tehokkaasti kerätä kaikki sushi jokaisessa sarakkeessa ennen siirtymistä seuraavaan.

Tehtävä

Swipe to start coding

Ratkaisu

def ninja_controller(ninja):
loot_row(ninja)
while ninja.object_up() == "sushi":
ninja.go_up()
loot_row(ninja)

def loot_row(ninja):
moved_right = 0

ninja.pick_sushi()
while ninja.object_right() == "sushi":
ninja.pick_sushi()
ninja.go_right()
moved_right += 1
ninja.pick_sushi()

for i in range(moved_right):
ninja.go_left()

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 4. Luku 4
py

ninja.py

def ninja_controller(ninja):
pass
# Write your code below

def loot_row(ninja):
pass
# Write your code below

Kysy tekoälyä

expand
ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

We use cookies to make your experience better!
some-alt