Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Haaste: Rekursiivinen Tiedostohaku | Rekurssio ja Lambda-Funktiot
Python-Funktioiden Opas

bookHaaste: Rekursiivinen Tiedostohaku

Sisäkkäisten sanakirjojen käsittely

Pythonissa sanakirjat voivat sisältää muita sanakirjoja. Tämä on hyödyllistä hierarkkisten rakenteiden, kuten tiedostojärjestelmän, esittämiseen.

Tässä tapauksessa:

  • Avaimet ovat nimiä (joko tiedostojen tai kansioiden);
  • Jos arvo on merkkijono "file", kyseessä on tiedosto;
  • Jos arvo on toinen sanakirja, kyseessä on kansio.

Käytä items()-metodia käydäksesi läpi kaikki avain-arvo-parit:

123456789101112
file_system = { "home": { "resume.pdf": "file", "notes.txt": "file" }, "etc": { "config.yaml": "file" } } for name, content in file_system.items(): print(name, "->", content)
copy
  • Käytä isinstance(content, dict) tarkistaaksesi, onko arvo itsessään sanakirja (eli kansio, ei tiedosto):
123456789101112
file_system = { "home": { "resume.pdf": "file" }, "config.yaml": "file" } for name, content in file_system.items(): if isinstance(content, dict): print(name, "is a folder") else: print(name, "is a file")
copy
Tehtävä

Swipe to start coding

Kuvittele tilanne, jossa täytyy tarkistaa, löytyykö tietty tiedosto sisäkkäisestä sanakirjarakenteesta, joka esittää tiedostojärjestelmää. Toteuta funktio file_exists, joka etsii rekursiivisesti kansioiden (sanakirjaolioiden) läpi ja etsii tiedostoa (merkkijonona "file"). Palauta True, jos tiedosto löytyy; muussa tapauksessa palauta False.

  1. Käytä for-silmukkaa iteroidaksesi file_system-sanakirjan kaikkien alkioiden läpi käyttäen items()-metodia. Tämä palauttaa avaimen (name) ja arvon (content).
  2. Tarkista, onko content tiedosto (eli merkkijono "file") ja vastaako name haettavaa tiedostonimeä target.
  3. Jos molemmat ehdot täyttyvät, palauta True, mikä osoittaa, että tiedosto on löytynyt.
  4. Jos sisältö ei ole tiedosto, tarkista, onko se kansio. Käytä isinstance()-funktiota, jossa ensimmäisenä argumenttina on content ja toisena dict (tarkistaa, onko alkio sanakirja).
  5. Jos content on kansio, kutsu file_exists-funktiota rekursiivisesti tarvittavilla parametreilla jatkaaksesi etsintää sen sisällä.
  6. Jos rekursiivinen kutsu palauttaa True, tiedosto on löytynyt, joten palauta True.
  7. Jos yhtään osumaa ei löydy kaikkien kansioiden ja tiedostojen tarkistamisen jälkeen, palauta False.

Ratkaisu

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 5. Luku 2
single

single

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

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

close

Awesome!

Completion rate improved to 4.35

bookHaaste: Rekursiivinen Tiedostohaku

Pyyhkäise näyttääksesi valikon

Sisäkkäisten sanakirjojen käsittely

Pythonissa sanakirjat voivat sisältää muita sanakirjoja. Tämä on hyödyllistä hierarkkisten rakenteiden, kuten tiedostojärjestelmän, esittämiseen.

Tässä tapauksessa:

  • Avaimet ovat nimiä (joko tiedostojen tai kansioiden);
  • Jos arvo on merkkijono "file", kyseessä on tiedosto;
  • Jos arvo on toinen sanakirja, kyseessä on kansio.

Käytä items()-metodia käydäksesi läpi kaikki avain-arvo-parit:

123456789101112
file_system = { "home": { "resume.pdf": "file", "notes.txt": "file" }, "etc": { "config.yaml": "file" } } for name, content in file_system.items(): print(name, "->", content)
copy
  • Käytä isinstance(content, dict) tarkistaaksesi, onko arvo itsessään sanakirja (eli kansio, ei tiedosto):
123456789101112
file_system = { "home": { "resume.pdf": "file" }, "config.yaml": "file" } for name, content in file_system.items(): if isinstance(content, dict): print(name, "is a folder") else: print(name, "is a file")
copy
Tehtävä

Swipe to start coding

Kuvittele tilanne, jossa täytyy tarkistaa, löytyykö tietty tiedosto sisäkkäisestä sanakirjarakenteesta, joka esittää tiedostojärjestelmää. Toteuta funktio file_exists, joka etsii rekursiivisesti kansioiden (sanakirjaolioiden) läpi ja etsii tiedostoa (merkkijonona "file"). Palauta True, jos tiedosto löytyy; muussa tapauksessa palauta False.

  1. Käytä for-silmukkaa iteroidaksesi file_system-sanakirjan kaikkien alkioiden läpi käyttäen items()-metodia. Tämä palauttaa avaimen (name) ja arvon (content).
  2. Tarkista, onko content tiedosto (eli merkkijono "file") ja vastaako name haettavaa tiedostonimeä target.
  3. Jos molemmat ehdot täyttyvät, palauta True, mikä osoittaa, että tiedosto on löytynyt.
  4. Jos sisältö ei ole tiedosto, tarkista, onko se kansio. Käytä isinstance()-funktiota, jossa ensimmäisenä argumenttina on content ja toisena dict (tarkistaa, onko alkio sanakirja).
  5. Jos content on kansio, kutsu file_exists-funktiota rekursiivisesti tarvittavilla parametreilla jatkaaksesi etsintää sen sisällä.
  6. Jos rekursiivinen kutsu palauttaa True, tiedosto on löytynyt, joten palauta True.
  7. Jos yhtään osumaa ei löydy kaikkien kansioiden ja tiedostojen tarkistamisen jälkeen, palauta False.

Ratkaisu

Switch to desktopVaihda työpöytään todellista harjoitusta vartenJatka siitä, missä olet käyttämällä jotakin alla olevista vaihtoehdoista
Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 5. Luku 2
single

single

some-alt