
CÍMLAP
Gérard Swinnen
Tanuljunk meg programozni Python nyelven
TARTALOM, BEVEZETÉS
Tartalom
Bevezetés
Az első programozási nyelv kiválasztása
A Python nyelv - bemutatja Stéfane Fermigier
Több különböző verzió?
A Python terjesztése - Bibliográfia
A tanárnak, aki oktatási segédletként akarja használni a könyvet
A könyv példái
Köszönetnyilvánítás
A fordító előszava
1. Fejezet: Programozóként gondolkodni
1.1 A programozás
1.2 Gépi nyelv, programozási nyelv
1.3 Compilálás és interpretálás
1.4 Programfejlesztés Hibakeresés ("debug")
1.5 Hibakeresés és kísérletezés
1.6 Természetes és formális nyelvek
2. Fejezet: Az első lépések
2.1 Számolás a Pythonnal
2.2 Adatok és változók
2.3 Változónevek és foglalt szavak
2.4 Hozzárendelés (vagy értékadás)
2.5 Változó értékének a kiírása
2.6 A változók típusadása
2.7 Többszörös értékadás
2.8 Operátorok és kifejezések
2.9 A műveletek prioritása
2.10 Kompozíció
3. Fejezet: Az utasításfolyam vezérlése
3.1 Utasítás szekvencia
3.2 Kiválasztás vagy feltételes végrehajtás
3.3 Relációs operátorok
3.4 Összetett utasítások - Utasításblokkok
3.5 Egymásba ágyazott utasítások
3.6 A Python néhány szintaktikai szabálya
4. Fejezet: Ismétlődő utasítások
4.1 Ismételt értékadás
4.2 Ciklikus ismétlődések - a while utasítás
4.3 Táblázatkészítés
4.4 Egy matematikai sor megalkotása
4.5 Az első scriptek, avagy: Hogyan őrizzük meg programjainkat?
4.6 Ékezetes és speciális karakterekre vonatkozó megjegyzés
5. Fejezet: A fő adattípusok
5.2 Az alfanumerikus adatok
5.3 A listák (első megközelítés)
6. Fejezet: Előre definiált függvények
6.1 Interakció a felhasználóval: az input() függvény
6.2 Függvénymodul importálása
6.3 Egy kis pihenő a turtle (teknős) modullal
6.4 Egy kifejezés igaz/hamis értéke
6.5 Ismétlés
7. Fejezet: Saját függvények
7.1 Függvény definiálása
7.2 Lokális változók, globális változók
7.3 "Igazi" függvények és eljárások
7.4 Függvények használata scriptben
7.5 Függvénymodulok
7.6 Paraméterek típusadása
7.7 Alapértelmezett értékek adása a paramétereknek
7.8 Argumentumok címkével
8. Fejezet: Az ablakok és a grafika használata
8.1 Grafikus interface-ek (GUI)
8.2 Első lépések a Tkinter-rel
8.3 Eseményvezérelt programok
8.4 A Tkinter widget-osztályai
8.5 A grid() metódus alkalmazása widgetek pozícionálására
8.6 Utasítások komponálása a tömörebb kód érdekében
8.7 Objektum tulajdonságainak módosítása - Animáció
8.8 Automatikus animáció - Rekurzivitás
9. Fejezet: A file-ok
9.1 A file-ok haszna
9.2 Munkavégzés file-okkal
9.3 File-nevek - Aktuális könyvtár
9.4 A két import forma
9.5 Szekvenciális írás file-ba
9.6 File szekvenciális olvasása
9.7 A ciklusból való kilépésre szolgáló break utasítás
9.8 Szövegfile-ok
9.9 Különböző változók mentése és visszaállítása
9.10 Kivételkezelés. A try - except - else utasítások
10. Fejezet: Az adatstruktúrák mélyebb tárgyalása
10.1 A karakterláncok lényege
10.2 A listák lényege
10.3 A tuplek
10.4 A szótárak
11. Fejezet: Osztályok, objektumok, attributumok
11.1 Az osztályok haszna
11.2 Egy elemi osztály (class) definíciója
11.3 Példányattribútumok vagy -változók
11.4 Objektumok argumentumként történő átadása függvényhíváskor
11.5 Hasonlóság és egyediség
11.6 Objektumokból alkotott objektumok
11.7 Az objektumok mint függvények visszatérési értékei
11.8 Az objektumok módosíthatók
12. Fejezet: Osztályok, metódusok, öröklés
12.1 A metódus definíciója
12.2 A "constructor" metódus
12.3 Osztályok és objektumok névterei
12.4 Öröklés
12.5 Öröklés és polimorfizmus
12.6 Osztálykönyvtárakat tartalmazó modulok
13. Fejezet: Osztályok és grafikus interface-ek
13.1 "Színkódok": egy egységbe zárt project
13.2 "Kisvasút": öröklés, osztályok közötti információcsere
13.3 "OscilloGraphe": egy testre szabott widget
13.4 "Kurzorok": egy kompozit widget
13.5 A kompozit widgetek beépítése egy összetett alkalmazásba
14. Fejezet: És még néhány widget
14.1 A rádiógombok
14.2 Ablak összeállítása keretekből (frame-ekből)
14.3 Hogyan mozgassunk az egérrel rajzokat
14.4 Python Mega Widgetek
14.5 Ablakok menükkel
15. Fejezet: Konkrét programok elemzése
15.1 Ágyúpárbaj
15.2 A Ping játék
16. Fejezet: Adatbázis kezelés
16.1 Adatbázisok
16.2 Egyszerű adatbázis készítése Gadfly-val
16.3 Egy MySQL kliensprogram váza
17. Fejezet: Webalkalmazások
17.1 Interaktív weblapok
17.2 A CGI interface
17.3 Egy webserver Pythonban!
18. Fejezet: Kommunikáció a hálózaton keresztül
18.1 A socketek
18.2 Egy elemi server készítése
18.3 Egy elemi kliens konstruálása
18.4 Több párhuzamos task kezelése threadek (szálak) segítségével
18.5 Egyidejű küldést és fogadást kezelő kliens
18.6 Több klienskapcsolatot párhuzamosan kezelő server
18.7 Ágyúpárbaj hálózati változat
18.8 Threadek (szálak) alkalmazása az animációk optimalizálására.
19. Fejezet: Függelék
19.1 A Python telepítése
19.2 Telepítés Windows alatt
19.3 A SciTE (Scintilla Text Editor) telepítése
19.4 A Python mega-widgetek telepítése
19.5 A Gadfly telepítése (adatbázisrendszer)
19.6 A gyakorlatok megoldásai
19.7 A "How to think like a computer scientist" függelékének kivonatai
Bevezetés
Ez a jegyzet eredetileg a belga középfokú oktatásban résztvevő, Tudomány
és informatika fakultáción "Programozás és programnyelvek" tantárgyat tanuló
3. osztályosok számára készült. Egy kísérleti szöveg, amit az interneten
szabad licenc alatt publikált számos más dokumentum nagymértékben inspirált.
A jegyzetben egy nem lineáris tanítási eljárást javaslunk, ami biztos hogy
kritizálható. Tudatában vagyunk annak, hogy ez egy kicsit kaotikusnak fog
tűnni egyes puristák szemében, de mi akartuk így, mert meg vagyunk róla
győződve, hogy többféle (nemcsak programozás, hanem egyéb) tanítási
módszer létezik és el kell fogadni azt a tényt, hogy a különböző emberek
ugyanazokat a fogalmakat nem ugyanabban a sorrendben tanulják meg.
Mindenekelőtt a figyelemfelkeltésre törekedtünk és arra, hogy a következő
vezérelvek betartásával a kapukat szélesre tárjuk:
- A tanításnak egy átlagos diák értelmi szintjéhez és általános
ismereteihez kell alkalmazkodni. Azt elutasítjuk, hogy kis zsenikből álló
"elit"-nek oktassunk. Ezen a szemüvegen át nézve a dolgokat az az általános
törekvésünk, hogy bármiféle specializáció nélkül nyilvánvalóvá tegyük a
programozás és az informatika invariánsait.
- A tanítás során alkalmazott eszközöknek korszerűeknek és versenyképeseknek
kell lenni, de az is szükséges, hogy a diákok személyes használatra
legálisan jussanak hozzájuk. Tanítási módszerünk azon az elképzelésen
alapul, hogy a tanulóknak nagyon korán el kell kezdeniük saját projektjeik
megvalósítását, amiket a saját elképzeléseik szerint fejlesztenek és
használnak fel.
- A tanulónak nagyon hamar képesnek kell lenni kis grafikus alkalmazások
megvalósítására.
Nagyon fiatalokhoz szólunk (elvileg éppen abba a korba érkeztek, amikor
képesek elkezdeni absztrahálni). Amellett foglaltunk állást, hogy nagyon
korán térjünk rá a grafikus interface programozásra, még a rendelkezésre
álló adatszerkezetek bemutatása előtt, mert megfigyelhető, az osztályainkba
érkező fiatalok már egy ablakokon és más interaktív grafikus interface-eken
alapuló informatikai kultúrában "lubickolnak".
Ha a programozás tanulást választják, természetesen szeretnének minél
előbb (lehet, hogy nagyon egyszerű) alkalmazásokat készíteni, melyekben a
grafikus megjelenés már masszívan jelen van. Azért választottuk ezt a kissé
szokatlan megközelítést, hogy növendékeinknek nagyon korán lehetőségük
legyen kis, személyes projektekbe kezdeni, melyek révén érezhetik, hogy
értékelik őket. Azt viszont megköveteljük, hogy a munkáikat automatikus
kódgeneráló, fejlett programfejlesztő környezetek alkalmazása nélkül
írják meg, mert nem akarjuk a programozás összetettségét sem elfedni.
Egyesek azzal kritizálnak bennünket, hogy módszerünk nem állítja eléggé
középpontba a tiszta és kemény algoritmizálást. Úgy gondoljuk, hogy egy
ilyen megközelítés a fentebb már említett okok miatt nincs a fiatalokra
adaptálva. Ráadásul ez a megközelítés kevésbé lényeges, mint a múltban
volt. Úgy tűnik, az objektumokkal történő modern programozás tanulása
inkább azt igényli, hogy a tanuló amilyen korán csak lehet kerüljön
kapcsolatba már létező objektumokkal és osztálykönyvtárakkal. Így
nagyon korán megtanulja, hogy inkább objektumok közötti interakciókban
gondolkozzon, mint eljárásokban és ez lehetővé teszi, hogy elég gyorsan
kiaknázza az olyan konstrukciók előnyeit, mint az öröklés és a polimorfizmus.
Egyébként elég jelentős teret biztosítottunk a különböző típusú
adatszerkezetek kezelésének, mert úgy véljük, hogy az adatszerkezetek
átgondolásának kell képezni minden programfejlesztés gerincét.