PowerPoint bemutat&#243

Download Report

Transcript PowerPoint bemutat&#243

Szögletes glória
informatikusoknak
Hol volt…
…hol nem volt…
…van egyszer egy Rossum.
1
Tanítsunk programozást Pythonban!
Válas Péter
Támogató:
Toldy Ferenc Gimnázium
(Budapest)
20. Info Éra konferencia
(Füzesgyarmat, 2010. november 26.)
2
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
3
Első programunk
Na, mi hiányzik
innen?
print("Helló, világ!")
„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
4
Minden a behúzásokon
múlik!
5
6
Futtatható állomány!
Azonos ékezetkezelés GUI-n és konzolon!
7
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; listatagság, utolsó karakter/elem=s[-1]
Keressük: <td>2010. nov. 25. 16:45</td>
Kivételkezelés
8
Ékezetes azonosító
A végső válasz
global kulcsszó:
4 szóközös behúzás
(nincs tabulátor!)
a kívül definiált változó
módosításához
Elegáns felső szint
Kevésbé vidám színek + sorszám, szóköz, tab
9
Súgó az IDLE-ben gépelés közben
Nincs inputváltozó!
A dinamikus típus tréfája
Hátul nyílt intervallum!
osztás, padlós osztás
Feltételes kifejezés, mint a ?: a C-ben
Automatikus indent a : után és
unindent a break után
…csupa egyszínű felirattal ellátott dia
10
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.
11
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
12
A Python for ciklusa
for piece in food: Pythonos megoldás
(~ foreach a Perlben
print piece
vagy a C#-ban)
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!
13
Vezérlési szerkezetek
• while (elöltesztelő)
• while True: #hátul- vagy középen tesztelő
utasítások
while True:
if kiugrási_feltétel:
line = f.readline()
if not line:
break
break
további utasítások
#feldolgozás
• for elem in sokaság
• if /elif / elif / elif / else
• try / except / except / finally
• ciklusban: else, break, continue
14
Generátor (kiválogatás!)
Részletesen: http://hu.sulipython.wikia.com/wiki/Generátor
15
Függvénydefiníció
def valami(név, szül_dátum, anyja_neve="",
volt_katona=False, gyerekek=None, *args,
**kwargs):
Közös: if után hamisat adnak.
…
return a, b, c
Több érték (tuple zárójel nélkül)
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
Példa nem kötelezőre a Rendezés dián.
kwargs: szótár
Sem a paraméterek, sem a visszaadott érték
típusa nincs feltüntetve – dinamikus.
16
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) 17
Adatszerkezetek 1.
• logikai: True, False
• None
• int (egyféle, bármekkora, dinamikus!)
• float
• komplex
• Unicode string (megváltoztathatatlan)
• bytes, bytearray (egybyte-os értékeknek)
18
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”
19
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
20
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!)
21
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
22
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
23
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.
24
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.
25
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
26
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”)
27
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
28
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ó
29
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-agood-language-for-beginning-programmers
30
Rendezés
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)
31
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/
32
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ó)
33
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ágose a C-programozókkal szemben a
vizsgán?) Milyenek legyenek a feladatok?
34
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.
35
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ű 
36
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
37
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
38
További érdekes alkalmazások
• Teknőcgrafika: turtle
modul, PythonTurtle
környezet
• Mobiltelefonos
fejlesztések
• Pendrive-ra telepíthető
Python
39
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
40
Folyamatban van:
• Érettségi szoftverlista:
Javaslat
• Ubuntu érettségi projekt:
(majd edu.fsf.hu?)
41
Érdekel. Hogyan tovább?
• A SuliPython wiki:
http://hu.sulipython.wikia.com/
• Az Informatika levelezőlista:
http://lista.sulinet.hu/mailman/listinfo/informatika
Mailman!
42
A prezentáció letölthető lesz:
• http://64.hu/
• http://fsf.hu/
Külön köszönet Zsakó László tanár úrnak!
43