Hol volt… …hol nem volt… Szögletes glória informatikusoknak Hol volt… …hol nem volt… …van egyszer egy Rossum.
Tanítsunk programozást Pythonban! Válas Péter Toldy Ferenc Gimnázium (Budapest) 20. Info Éra konferencia (Füzesgyarmat, 2010. november 26.) Támogató:
A nyelv, amelyen az MIT-n tanítják a programozást az első években amely nem csak oktatásra jó – például a Google számos feladatát oldja meg amely a Monthy Pythonról kapta a nevét, hogy jókedvünk legyen a közelében amely Windowsban, Linuxon, Macen egyformán működik, és szabad szoftver
Első programunk print("Helló, világ!") Na, mi hiányzik innen? „A Python használata során a tanulók csak azt a kódot látják, ami csinál is valamit :).” Vida Tamás
Minden a behúzásokon múlik!
Futtatható állomány! Azonos ékezetkezelés GUI-n és konzolon!
IDLE: vidám színek Kétféle import, kétféle névtér Elágazás=többszörös elágazás; lista-tagság, utolsó karakter/elem=s[-1] Keressük: <td>2010. nov. 25. 16:45</td> Kivételkezelés
Ékezetes azonosító A végső válasz global kulcsszó: a kívül definiált változó módosításához 4 szóközös behúzás (nincs tabulátor!) Elegáns felső szint Kevésbé vidám színek + sorszám, szóköz, tab
Súgó az IDLE-ben gépelés közben Nincs inputváltozó! A dinamikus típus tréfája Feltételes kifejezés, mint a ?: a C-ben osztás, padlós osztás Hátul nyílt intervallum! Automatikus indent a : után és unindent a break után …csupa egyszínű felirattal ellátott dia Kísérletezési lehetőség a shellben
Ami még fontos lesz: ez egy klasszikus eldöntési tétel. Bizonyos ponton azt hihetnénk, hogy a Pythonban nem kellenek tételek – íme a példa.
Lagzi Hetedhétországban lista adattípus >>> a=['Piripócs','Hencida','Nekeresd','Ibafa','Bonchida','Kispirics'] >>> for falu in a[a.index('Hencida'):a.index('Bonchida')+1]: ... print(falu,": foly a bor.",sep="") ... Hencida: foly a bor. Nekeresd: foly a bor. Ibafa: foly a bor. Bonchida: foly a bor. ? számláló szeletelés jobbról nyílt intervallum! szeparátor híján szóköz lenne a : előtt
A Python for ciklusa Pythonos megoldás (~ foreach a Perlben vagy a C#-ban) for piece in food: print piece for i in range(len(food)): print food[i] for piece in food: print piece for i in range(len(food)): print food[i] Nem pythonos megoldás (felesleges számláló) Számláló híján a programozási tételek alakja megváltozik!
Vezérlési szerkezetek while (elöltesztelő) while True: #hátul- vagy középen tesztelő utasítások if kiugrási_feltétel: break további utasítások for elem in sokaság if /elif / elif / elif / else try / except / except / finally ciklusban: else, break, continue while True: line = f.readline() if not line: break #feldolgozás
Generátor (kiválogatás!) Részletesen: http://hu.sulipython.wikia.com/wiki/Generátor
Függvénydefiníció def valami(név, szül_dátum, anyja_neve="", volt_katona=False, gyerekek=None, *args, **kwargs): … return a, b, c kötelező paraméterek (híváskor sorrendben adjuk meg) nem kötelező paraméterek alapértelmezett értékkel (más sorrendben vagy egyenként is megadhatjuk, névvel) további, előre meg nem határozott számú paraméterek args: tuple kwargs: szótár Sem a paraméterek, sem a visszaadott érték típusa nincs feltüntetve – dinamikus. Közös: if után hamisat adnak. Több érték (tuple zárójel nélkül) Példa nem kötelezőre a Rendezés dián.
szótár adattípus (vessző az utolsó után is lehet) kulcs érték string formázott kiírás, szeletelés sortörés, feltételes kifejezés nagybetű a mai fiatalok kedvéért (OOP!) Két ekvivalens megoldás: LBYL=Look before you leap (elágazás if-fel) EAFP=Easier to ask for forgiveness than permission (elágazás kivételkezeléssel: hatékony és pythonos)
Adatszerkezetek 1. logikai: True, False None int (egyféle, bármekkora, dinamikus!) float komplex Unicode string (megváltoztathatatlan) bytes, bytearray (egybyte-os értékeknek)
Adatszerkezetek 2. lista (megváltoztatható, bármilyen típusú elemek váltakozhatnak benne, szeletelhető – tömbök, rekordok, verem és sor helyett) tuple (rendezett n-es, megváltoztathatatlan – rekordok, alternatív rekordok helyett) range szótár (asszociatív tömb) halmaz, „fagyott halmaz”
Adatszerkezetek 3. Minden adattípus objektumosztály Lásd a fenti példákat: line.decode(), input("…").capitalize(), gyerek[2].startswith() vagy lentebb a nevek.sort() Bővíthető, testreszabható, lecserélhető Guido van Rossum példája: saját szótártípus alapértelmezett értékkel, amely soha nem ad kulcshibát
Típusosság – összefoglalás A Python erősen típusos (kötelező explicit konverzió!) dinamikusan típusos (az értéknek van típusa, ami futásidőben derül ki) objektumorientált még a típusokban is kacsatípusos dinamikusan kezeli a memóriát (kényelmes!)
Filozófia A programkód olvashatósága A programfejlesztés gyorsasága A futási sebesség nem elsődleges “Python fits in your brain” TOOWTDI (There’s Only One Way To Do It – The Zen of Python) TMTOWTDI bővíthetőség OOP
Sebesség Értelmezős nyelv (gyors fejlesztés) Dinamikus memóriakezelés, szemétgyűjtés Op. rendszert, HW-közeli játékot ne írjunk Alkalmazásfejlesztésre találták ki Pl. egy webkiszolgálón nem probléma Az iskolában nem probléma „A sebesség nem probléma addig, amíg nem probléma” – a Python filozófiája Jól együttműködik a C-vel és a C++-szal
Volt egyszer egy Vadnyugat… Volt egyszer egy BASIC… Volt egyszer egy Pascal… …ami volt, az elmúlt. De lesz-e trónkövetelő? A problémát nem én vetem fel, hanem a szoftverlista. A sokszínűség lehetősége jó dolog. De van előnye a főcsapásnak is.
Mi bajom a C++-szal? (szubjektív!) Sok az include, amit meg kell jegyezni a vizsgára Lassú fordítás – fejlesztés közben zavaró char s[10]; s[20]='c'; indefinit eredmény Túl sokféle eszköz ugyanarra, más include, más viselkedés, más függvények (pl. szövegkezelés) A mutatók kerülgetése a nyelv szelleme ellen való Bonyolult egy egyszerű magyar szó kiírása Bátorítja a rossz stílusokat (pl. write-only, tagolás ) Ezek nem a nyelv hibái! Csak az iskoláról beszélek.
A Python jellemzői 1. Szabad szoftver (GPL-kompatibilis) Egyformán működik Linuxon, Windowsban, MacOS X-en Közösségi fejlesztés, széles körű támogatás Nincsenek nyelvjárásai Unicode-alapú szövegkezelés, magyar betűk Erős és dinamikus típusok, rugalmas adatszerkezetek
A Python jellemzői 2. Értelmezős nyelv, gyors futtatás Kikényszeríti a kód helyes tagolását Bátorítja a szép és olvasható kódolást Határozottan megmutatja a megfelelő eszközt A nyelv magja megjegyezhető és erős, érettségi szinten nem nagyon kell importálni Gazdag standard könyvtár („batteries included”)
A Python jellemzői 3. Több fejlesztői környezet is van hozzá (de igazából egy jó szerkesztő is elég) Objektumorientált, de nem erőszakosan (több paradigmát is támogat) Használhatunk ékezetes változóneveket is Kéznél van a dokumentáció a vizsgán is! dir és help függvény, teljes offline súgó Professzionális fejlesztésre is használják
A Python jellemzői 4. Nagyon magas szintű, általános célú nyelv A gyakori feladatokat egyszerű megoldani (rendezés, összegzés, ciklusok stb.) A lényeges kódot látjuk, csomagolás nélkül C és C++-támogatás Van hozzá shell is Bővíthető (modulok, OOP) Könnyen tanulható és tanítható
For a student who has never programmed before, using a statically typed language seems unnatural. It presents additional complexity that the student must master and slows the pace of the course. The students are trying to learn to think like a computer, decompose problems, design consistent interfaces, and encapsulate data. While learning to use a statically typed language is important in the long term, it is not necessarily the best topic to address in the students’ first programming course. http://docs.python.org/py3k/faq/general.html - is-python-a-good-language-for-beginning-programmers
Rendezés Ez a tuple szerkezet A lista beépített .sort() metódusa helyben rendez Rendezés visszafelé sorted függvény: másolat Ez a tuple szerkezet Rendezés a második kulcs szerint segédfüggvénnyel Rendezés a második kulcs szerint lambdafüggvénnyel (az előzővel ekvivalens, tömörebb, nem érettségi anyag)
Közbevetett vigasztalás a szabad szoftver híveinek, akik az FSF Közbevetett vigasztalás a szabad szoftver híveinek, akik az FSF.hu-ról töltik le ezt a prezentációt, és nem PowerPointra számítottak: Az FSF-díjas Guido van Rossum is ppt-ket használ http://www.python.org/doc/essays/ppt/
Programozási tételek Elsősorban a rendezés és az összegzés egyszerűsödik le szemérmetlenül. Más tételek megmaradnak, pl. eldöntés, maximumkiválasztás. Mindegyik egyszerűsödik a számláló hiánya miatt (ld.: kiválogatás generátorral, de: eldöntés számlálóval) Keressünk tételeket a kidolgozott érettségi feladatokban! (Ajánlott sorrend: Telek Anagramma Lottó)
Mi lesz veletek, programozási tételek? Cél vagy eszköz? Rendezni kell tudni vagy a rendezési tételeket? A beépített rendezés 2010-ben nem luxus! Találjunk ki rá feladatokat? Mit fog csinálni a többi nyelv? Valószínűleg vitát fog kiváltani (igazságos- e a C-programozókkal szemben a vizsgán?) Milyenek legyenek a feladatok?
Személyes nosztalgia 1984: első levelemhez előbb megírtam a szövegszerkesztőt. (HT-1080Z) Írtunk rajzolót és monitort. Még tervezni(!) és programozni kellett az ékezetes karaktereket. Nem bánom, hogy most beépítik a programozási tételeket. Már nincs 1984.
Hátrányok, problémák Futási sebesség (nem igazi probléma) Egyelőre angol nyelvű a környezet Az IDLE nem számozza a sorokat (Eclipse?) Sok 2.x-es mintaprogram a neten és a könyvekben, kevesebb a 3.x-es Túl könnyű
Javaslat Kerüljön fel a Python a szoftverlistára Használjuk minél többen kezdő nyelvként Cseréljünk tapasztalatokat az Informatika levelezőlistán vagy a SuliPython wikiben
A csodálatos VPython 3D animációk alapszintű programozási tudással Jól használható a természettudományos és a matematikaórákon Jól használható szimulációra http://hu.sulipython.wikia.com/wiki/VPython
További érdekes alkalmazások Teknőcgrafika: turtle modul, PythonTurtle környezet Mobiltelefonos fejlesztések Pendrive-ra telepíthető Python
A verziók kérdése Két párhuzamos stabil verzió van: 2.7, 3.1.2 Részletek: http://hu.sulipython.wikia.com/wiki/Verziók http://hu.sulipython.wikia.com/wiki/Verziók felismerése és átalakítása
Folyamatban van: Érettségi szoftverlista: Javaslat Ubuntu érettségi projekt: (majd edu.fsf.hu?)
Érdekel. Hogyan tovább? A SuliPython wiki: http://hu.sulipython.wikia.com/ Az Informatika levelezőlista: http://lista.sulinet.hu/mailman/listinfo/informatika Mailman!
A prezentáció letölthető lesz: http://64.hu/ http://fsf.hu/ Külön köszönet Zsakó László tanár úrnak!