Language
Lt :: En

Programavimo kalba Python (2005)

Programavimo kalba Python

2005 m. ruduo

Laisvai pasirenkamas dalykas, 4 kreditai.

Paskaitos vykdavo antradieniais, 18:00, 301 auditorijoje.

Pratybos vykdavo antradieniais 16:00 val. 4-oje ir 5-oje kompiuterių klasėse, bei trečiadieniais 14:00 val. 13-oje o kompiuterių klasėje.

Per paskaitas dėsčiau teoriją (žr. skaidres), per pratybas priiminėdavau atsiskaitymus.

Visa svarbi informacija turėtų būti surašyta šiame puslapyje

http://gedmin.as/python

Atsiskaitymai

Per pratybas reikės atsiskaityti tris mažas programėles (arba vieną didelę). Sąlygas reikia susigalvoti patiems -- aš tik pateiksiu bendrus reikalavimus, tematiką, bei sąlygų pavyzdžius. Prieš pradėdami jas daryti, sąlygą parodykite man (el. paštu -- marius@gedmin.as -- arba per pratybas asmeniškai), kad aš ją patvirtinčiau. Visos sąlygos turi būti pakankamai skirtingos (kad du žmonės nedarytų tos pačios užduoties). Jei sąlygą nusiuntėte man pašu, o aš per pakankamai greitą laiką (porą dienų) neatsiliepiau, galite pakartotinai mane krutinti emailu arba tiesiog pradėti ją daryti. Jei iškyla problemų su paštu (jūsų siųstas laiškas grįžta), bandykite mano darbo adresą -- marius@pov.lt.

Deadlainai: viską reikia atsiskaityti iki semestro galo. Atsižvelkite į tai, kad jūsų daug (85), aš vienas, ir atsiskaitymas užima laiko (bent 5 minutes).

Pirmoji užduotis. Parašyti programą, kuri apdoroja tekstinį failą (ar kelis failus).

Mano tikslai šiai užduotėlei: noriu, kad būtų proga susipažinti su ciklais, duomenų įvedimu ir išvedimu, sąrašais ir/arba žodynais.

Sąlygų pavyzdžiai (kai kurie iš praėjusių metų, kiti šiaip į galvą atėję):

Antroji užduotis. Praeitais metais tai buvo programėlė, kuri iš internetinio puslapio (HTML/XML) krapšto informaciją ir ją apdoroja.

Šiais metais siūlau įdomesnę temą: mažas tekstinis nuotykinis žaidimukas (interactive fiction/MUD). Komandų eilutėje įvedate veiksmus ("go north" arba "paimti akmenį"), nedidukas pasaulio modelis jos vykdo.

Arba dar viena mintis: geometrija/grafika. Pvz., tekstiniame faile aprašytos geometrinės figūros, kurias reikia pavaizduoti ekrane grafiškai. Arba išspręsti kokią geometrinę užduotėlę.

Mano tikslai šiai užduotėlei: noriu, kad apsirašytumėte porą klasių, modeliuojančių kažkokius pasaulio objektus.

Trečioji užduotis. Visų reikalavimų dar nesugalvojau (tai reiškia, kad galite sąlygą susigalvoti patys), bet norėsiu unit testų.

Mano tikslai šiai užduotėlei: noriu, kad pasitreniruotumėte rašyti testus; stipriai rekomenduoju Test-Driven Developmentą.

Galima (bet nebūtina) atiskaitinėti tą pačią pirmąją ar antrąją užduotėlę, pridėjus jai testus. Tokiu atveju lengviau bus, jei kodą rašysite iš naujo, naudodami testai pirma metodiką, egzistuojantį kodą naudodami tik kaip prototipą. Bus įdomu palyginti kodo, rašyto be testų, ir kodo, rašyto testai pirma būdu, kokybę.

Projektas. Vietoje trijų mažų programėlių galima rašyti vieną didelę. Reikalavimai:

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.

Pavyzdys: MagicPoint -> PDF konverteris. MagicPoint yra įrankis, kuriuo aš rengiu skaidres paskaitoms. MagicPoint skaidrės aprašomos tekstiniame faile labai paprastu formatu. PDFų generacijai apsimoka naudoti Reportlab biblioteką. Nei GUI nei tinklo čia nėra -- bet PDFą galima laikyti kaip ir GUI... programa tikrai bus pakankamai sudėtinga.

Literatūra

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, Pytohn 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

Šių metų skaidrės (PDFai bei MagicPoint pradiniai failai).

Taip pat galite pasižvalgyti į praėjusių metų paskaitų konspektus HTMLu.

Istorija


Valid XHTML 1.1! Valid CSS! Paskutiniai pakeitimai: 2012-01-08