Tudáselmélyítés és gyakorlás kész függvények vagy metódusok leutánzásával.

Ahogy a természetes nyelveknél a készségszintű tudáshoz csak a rendszeres aktív gyakorlás vezet, ugyanez igaz a programozási nyelvek tanulására is. Nem elég csak olvasni a nyelv szabályait és kész kódokat, hanem írni is kell azokat, minél többet. Nyilván, ha valakinek ez a foglalkozása, akkor ez megvalósul, de azoknak, akik a nyelvet tanulják és olyan a napi elfoglaltságuk, hogy nem kell újabb és újabb programot fejleszteni, azoknak ajánlatos, hogy maguk találjanak ki feladatokat és oldják meg előbb elvi szinten, és utána az adott programozási nyelven kódolva.

Először mindig célszerű egyszerű dolgokkal kezdeni, hogy a megoldás sikerélménye az egyre nehezebb feladatokra ösztönözzön. Ha esetleg nincs ötletünk arra, hogy milyen feladatot oldjunk meg, akkor az is jó módszer, ha megpróbáljuk a Python által készen nyújtott függvények, metódusok vagy osztályok saját készítésű változatát létrehozni. A cél tehát az, hogy funkcionálisan ugyanazt valósítsa meg a mi definíciónk, mint a készen rendelkezésre álló.

Ennek a módszernek az egyik előnye, hogy a megoldásunk helyessége könnyen ellenőrizhető. Másrészt, meg fogjuk látni, hogy egy ilyen feladat megoldásához is nem kevés elméleti és nyelvi ismeretet kell, ami ezáltal aktívvá teszi az eddig már megtanultakat. A szinte elkerülhetetlen hibázások, és azok javítása pedig ezt csak tovább mélyítik.

Ennek szellemében gyakorlásképpen utánozzuk le mondjuk a karakterláncokra meghívható find() és count() metódusokat, vagyis írjunk egy-egy függvényt, amelyek ugyanazt tudják, mint ezek a metódusok.

Azt, hogy ezek a metódusok pontosan mit csinálnak, milyen argumentumokat fogadnak és mi a visszatérési értékük a Python hivatalos dokumentációjában, vagy magyarul és kicsit bővebben kifejtve a Python tudásépítés lépésről lépésre az alapoktól az első asztali alkalmazásig című e-könyvben példákkal együtt megtalálható. De röviden összefoglalva, a céljuk és használatuk a következő:

Ha egy text nevű változó egy karakterláncot azonosít, akkor a text.find(sub, start, end) metódus a sub argumentummal megadott karaktersorozat első előfordulásának indexével tér vissza. A keresés a text kezdetétől indul. Ha nem található a szövegben a sub, akkor -1 lesz a visszaadott érték.

A text.count(sub, start, end) metódus a find()-hoz hasonló argumentumokat fogad. Visszatérési értéke a sub karaktersorozat előfordulásainak a száma.

Mindkét metódusnál a start és end opcionális argumentumokkal a keresést korlátozhatjuk a kezdő és vég indexek közé. Ha ezek nincsenek megadva, akkor a teljes text karakterláncban történik a keresés.

Mivel a start és end paramétereknek negatív indexet is meg lehet adni, a saját függvényeink készítéséhez nem árt, ha visszaidézzük, hogy sorozatokra hogyan működik a negatív indexelés. Ebben segít az alábbi ábra.

A következőkben a megvalósított find() és count() függvények definícióit látjuk. A kommentek segítik a működés megértését.

A függvénytörzs kódja egyik esetben sem túl bonyolult, mégis számos dolgot, nyelvi elemet és szerkezetet kell még ilyen esetben is ismerni, hogy megtervezzük és előállítsuk a megfelelő kódot: használtunk feltételes kifejezést, for- és while-ciklust, értékadó kifejezést, feltételes elágazást, szeletképzést, kiterjesztett értékadást és kivételkezelést. De mindezek előtt el kell gondolkodni a feladat megoldási módján, algoritmusán. Valójában ez határozza meg, hogy utána milyen nyelvi eszköztárat vetünk be a probléma megoldásához.

A függvényeink működését úgy teszteljük le, hogy bizonyos kezdő- és végindexet megadva összevetjük a visszatérési értéküket a megfelelő metódus visszatérési értékével. Ha ezek eltérnek, akkor a függvényünk nem megfelelő, és hibajelzést kapunk.

Mivel a tesztesetekre nem kaptunk hibajelzést, ezért úgy tűnik, hogy a függvényeink az elvárások szerint működnek.

Érdekel a Python tudásépítés lépésről lépésre az alapoktól az első asztali alkalmazásig című e-könyv.