This page is only available in Lithuanian
Programavimo kalba Python (2004)
2004 m. ruduo
Laisvai pasirenkamas dalykas, 4 kreditai, įskaita.
Paskaitos vyko pirmadieniais, 18:45 -- 20:15, 102 auditorijoje.
Pratybos vyko antradieniais, 17:00 -- 18:30 ir 18:45 -- 20:15, 2 ir 3 kompiuterių klasėse.
Per paskaitas dėsčiau teoriją, per pratybas priiminėjau atsiskaitymus bei užsiimdavau konsultacijomis. (Pirmosios pratybos, per kurias šnekėjau apie teoriją, buvo išimtis.)
Sausio 11 d., 11 val. buvo papildomas atsiskaitymas bei įskaitų pasirašymas.
Visa svarbi informacija turėtų būti surašyta šiame puslapyje
Atsiskaitymai
Per pratybas reikės atsiskaityti tris mažas programėles (arba vieną didelę). Galite siųsti man (marius@gedmin.as) savo sugalvotas užduočių sąlygas -- aš jas gal kiek pakoreguosiu ir galėsite daryti tai, kas jums įdomu.
Per pirmąsias pratybas pasiūliau mini-užduotėlę apšilimui: parašyti
supaprastintą Unix komandos grep
versiją. Programa turi skaityti
iš pradinio failo eilutes ir visas jas, kuriose yra tam tikras žodis,
spausdinti ekrane (arba rašyti į kitą failą).
Pirmoji užduotis. Parašyti programą, kuri apdoroja tekstinį failą (ar kelis failus). Pavyzdžiui, programa galėtų skaičiuoti raidžių dažnumus, išrinkti dažniausiai pasitaikančius žodžius, palyginti du failus pažodžiui (kaip GNU wdiff), atlikti kokius skaičiavimus su duomenimis, perskaitytais iš CSV formato failų. Tikslią sąlygą reikia susigalvoti ir pasiųsti man paštu.
Antroji užduotis. Parašyti programą, kuri iš internetinio puslapio (HTMLo arba XMLo) iškrapštytų informaciją ir ką nors su ja padarytų. Pavyzdžiui, programa galėtų atlikti paiešką Google pagal komandų eilutėje nurodytus žodžius ir išspausdinti sąrašą nuorodų iš pirmų dviejų puslapių. Arba programa galėtų pasižiūrėti, koks Vilniuje yra oras iš weather.com duomenų. Arba surasti, kas ir kada paskutinis pasiuntė laišką į mailing listą pagal webe esančius archyvus. Tikslią sąlygą reikia susigalvoti ir pasiųsti man paštu. Norėčiau, kad programa būtų objektinė, t.y. kad joje būtų aprašyta pora klasių.
Trečioji užduotis. Visų reikalavimų dar nesugalvojau (tai reiškia, kad galite sąlygą susigalvoti patys), bet norėsiu unit testų.
Alternatyva: įskaitai galima atsiskaityti dvi užduotis ir sausio 11 d. išlaikyti testuką (~10-20 klausimų, demonstruojančių principines Python žinias; žr. temų sąrašą).
Projektas. Vietoje trijų mažų programėlių galima rašyti vieną didelę. Reikalavimai:
- Programa turi turėti grafinę vartotojo sąsają (GUI) arba būti tinklo serveris, leidžiantis prisijungti keliems vartotojams lygiagrečiai.
- Ji turėtų daryti ką nors naudingo.
- Ji turėtų turėti unit testus.
Pavyzdys: mp3 serveris -- galima prisijungti prie jo per telnetą (arba per webinį interfeisą), ieškoti dainų pagal failo pavadinimą ir/arba ID3 atributus, peržiūrinėti dainų sąrašą, pridėdinėti dainas į playlistą ir jas groti (galima paleisti mpg123 su os.system).
Pavyzdys: grafinė programa laiko žymėjimui -- vartotojas pasižymi, kada pradeda, ir kada baigia daryti tam tikrą užduotį ir gali pasiųsti dienos ar savaitės darbų ataskaitą emailu.
Literatūra
- Python Tutorial -- įžanga.
- Dive into Python -- knyga patyrusiems programuotojams. Galima skaityti online, galima parsisiųsti, galima nusipirkti popierinį variantą.
- Learning Python O'Reilly knyga. Skaityti online nepavyks.
Python kalbos interpretatorių įvairioms operacinėms sistemoms galite rasti www.python.org. Daugelyje Linux distribucijų bei naujesnėse Mac OS X versijose Python interpretatorius ateina su operacine sistema ir jo atskirai siųstis nereikia.
Įžanga
Python -- dinaminė aukšto lygio programavimo kalba. Python yra griežtai tipizuota (neturi typecastų), bet nėra statiškai tipizuota (tipus turi ne kintamieji, o reikšmės). Python leidžia naudoti struktūrinio, objektinio, bendro (generic) bei, šiek tiek, funkcinio programavimo paradigmas). Python yra interpretuojama kalba, panašiai kaip Java (programa pirma kompiliuojama į baitinį kodą, o paskui virtuali mašina tą kodą interpretuoja). Skirtingai nuo Java, Pytohne kompiliavimas atliekamas automatiškai, paleidus interpretatorių.
Štai kaip atrodo trumpa tradicinė Hello, World programėlė:
print "Hello, world!"
Štai kaip atrodo daug rimtesnė tos pačios programėlės versija:
#!/usr/bin/env python # -*- coding: UTF-8 -*- """ Labas, pasauli. Demonstracinė programėlė Python kursui. Autorius -- Marius Gedminas """ def main(): """Spausdina ekrane žodžius "Hello, world!".""" print "Hello, world!" if __name__ == "__main__": main()
Pirmoji eilutė -- specialus komentaras, nurodantis, jog tai yra Python kalbos skriptas. Unix šeimos operacinės sistemos pagal šią eilutę nustato, kokį interpretatorių reikia paleisti.
Antroje eilutėje -- dar vienas specialus komentaras, nurodantis failo koduotę (jo reikia, jei faile pasitaiko raidžių, nepatenkančių į US-ASCII).
Trigubomis kabutėmis Pythone apibrėžiamos ilgos simbolių eilutės (multiline strings). Tradiciškai tokios eilutės naudojamos dokumentacijai, analogiškai Javos dokumentaciniams komentarams. Kiekvieno failo, klasės, funkcijos pradžioje verta įrašyti dokumentacinę eilutę. Egzistuoja programų (pvz., pydoc), kurios iš Pythono programų ištraukia ir gražiai suformatuoja tokiu pavidalu pateiktą dokumentaciją.
Toliau matome funkcijos main
apibrėžimą. Funkcijos
kūną sudaro visos eilutės, kurios yra pastumtos į dešinę (keturiais
tarpais). Ši funkcija nieko negražina.
Programos pabaigoje -- idiomatiškas patikrinimas, ar programa yra vykdoma, ar tik importuojama. Apie tai detaliau parašysiu vėliau.
Paskaitos
- Trumpa sintaksės apžvalga.
- Viskas yra objektai.
- Išskirtinės situacijos. Automatizuotas testavimas.
- Standartinės bibliotekos apžvalga.
- HTML bei XML apdorojimas.
- Gijos. Iteratoriai bei generatoriai.
- Debuginimas bei optimizavimas.
- Apžvalga.
- Python sprendimai: Zope web aplikacijų serveris
Dar kalbėjau apie duomenų bazes, ZODB, PyGame, wxPython.
Visa medžiagą galima naudoti pagal
Creative Commons Attribution-Share Alike 3.0 licenziją.