gerard swinnen tanuljunk meg programozni python nyelven

378
Forrás: http://www.doksi.hu

Upload: toeroek-zoltan

Post on 29-Sep-2015

65 views

Category:

Documents


18 download

DESCRIPTION

programozas

TRANSCRIPT

  • Forrs: http://www.doksi.hu

  • GraceHopper,acompilerfeltallja:

    Szmomraaprogramozstbbmint alkalmazott tudomny. Aprogramozsatudsmlysgeibevezet rdekeskutatsis.

    Maximiliennek,lisenek,Lucillenek,AugustinneksAlexanenak.

    ColophonAbortgrafitrajzt,aminektrgyaszdkosantrelaknyvtrgytl,aszerzksztette1987benegyrgi

    fnykpalapjnCansonpaprra.Az1923banacowesikiktbenegyregattnrsztvevversenyjachtota106tonnsValdoratbrzolja.

    Ahszvvelkorbbanptett,seredetilegyawlnakfelszereltValdoratbbdjatelhozott,mieltt1912benarajzonlthat516mvitorlafelletketchtalaktottk.

    Ezapompsvitorls,amitlegnysgeigennagyrabecsltkivltengerjrtulajdonsgairt,majdnemflvszzadontkzlekedett.

    GrardSwinnen:TanuljunkmegprogramozniPythonnyelven 2.

    Forrs: http://www.doksi.hu

  • TanuljunkmegprogramozniPythonnyelven

    GrardSwinnentanrspedaggiaitancsad

    InstitutStJeanBerchmansSteMarie59,ruedesWallonsB4000Lige

    Ezajegyzetszabadonletlthetakvetkezwebsiteokrl:http://www.ulg.ac.be/cifen/inforef/swihttp://learnpython.openproject.hu

    Aszvegegyrsztakvetkezminspirlta:AllenB.Downey,JeffreyElkner&ChrisMeyers

    Howtothinklikeacomputerscientist

    megtallhat:http://rocky.wellesley.edu/downrey/ostvagy:http://www.ibiblio.org/obp

    Copyright(C)20002005GrardSwinnen

    CopyrightHungariantranslation(C)2005DarczyPter

    EjegyzetterjesztseaGNUSzabadDokumentcisLicencnek(GNUFreeDocumentationLicense,version1.1)megfelelentrtnik.Ezaztjelenti,hogynszabadonmsolhatja,mdosthatjasterjeszthetiajegyzetet,amennyiben tiszteletben tartja a licencben felsorolt szablyokat, melyek teljes szvege a GNU FreeDocumentationlicencecmfggelkbena366.oldalonolvashat.

    Alnyegetilletentudjonrla,nnemsajtthatjakieztaszveget,hogyutnamagnakmsreprodukcisjogokat meghatrozva azt (mdostva vagy vltoztats nlkl) terjessze. Az n ltal akr mdostott, akrvltozatlanformbanterjesztettdokumentumnakktelezentartalmaznikellafentidzettlicencteljesszvegt,eztafigyelmeztetst,azezutnkvetkezbevezetst,valamintazeredetiangolnyelvszvegPrefacerszt(lsd a fggelket). A jegyzetnek mindenki szmra szabadonhozzfrhetnekkell maradni. Krhet anyagihozzjrulstazoktl,akiknekajegyzetetterjeszti,deakrtsszegcsakareprodukcikltsgeirevonatkozhat.nnemterjeszthetiajegyzetetmagnakkvetelveaszerzijogokat,nemkorltozhatjaaznltalterjesztettmsolatokreproduklsnakjogt.Ennekaszvegnekklasszikusnyomtatottknyvformjban,knyvesboltbantrtnkereskedelmiterjesztsekizrlagosanazO'Reilly(Paris)kiadnakvanfnntartva.

    Mindengarancianlklabbanaremnybenpubliklomajegyzetet,hogyazhasznoslesz.

    3. GrardSwinnen:TanuljunkmegprogramozniPythonnyelven

    Forrs: http://www.doksi.hu

  • BevezetsEz a jegyzet eredetileg a belga kzpfok oktatsban rsztvev, Tudomny s informatika fakultcin

    Programozssprogramnyelvektantrgyattanul3.osztlyosokszmrakszlt.Egyksrletiszveg,amitazinternetenszabadlicencalattpublikltszmosmsdokumentumnagymrtkbeninspirlt.

    Ajegyzetbenegynemlineristantsieljrstjavaslunk,amibiztoshogykritizlhat.Tudatbanvagyunkannak,hogyezegykicsitkaotikusnakfogtnniegyespuristkszemben,demiakartukgy,mertmegvagyunkrlagyzdve,hogytbbfle(nemcsakprogramozs,hanemegyb)tantsimdszerltezikselkellfogadniazta tnyt, hogya klnbz emberekugyanazokata fogalmakat nemugyanabbana sorrendbentanuljkmeg.Mindenekeltt afigyelemfelkeltsretrekedtnksarra, hogyakvetkez vezrelvekbetartsvalakapukatszlesretrjuk:

    Atantsnakegytlagosdikrtelmiszintjhezsltalnosismereteihezkellalkalmazkodni.Aztelutastjuk,hogy kis zsenikbl ll elitnek oktassunk. Ezen a szemvegen t nzve a dolgokat az az ltalnostrekvsnk, hogy brmifle specializci nlkl nyilvnvalv tegyk a programozs s az informatikainvarinsait.

    Atantssornalkalmazotteszkzknekkorszerekneksversenykpeseknekkelllenni,deazisszksges,hogyadikokszemlyeshasznlatraleglisanjussanakhozzjuk.Tantsimdszernkazonazelkpzelsenalapul, hogy a tanulknak nagyonkorn el kell kezdeniksajt projektjeik megvalstt, amiket a sajtelkpzelseikszerintfejlesztenekshasznlnakfel.

    Atanulnaknagyonhamarkpesnekkelllennikisgrafikusalkalmazsokmegvalstsra.Nagyonfiatalokhozszlunk(elvilegppenabbaakorbarkeztek,amikorkpesekelkezdeniabsztrahlni).Amellett foglaltunk llst, hogy nagyon korn trjnk r a grafikus interface programozsra, mg arendelkezsrell adatszerkezetekbemutatsaeltt, mertmegfigyelhet, azosztlyainkbarkez fiatalokmregyablakokonsmsinteraktvgrafikusinterfaceekenalapulinformatikaikultrbanlubickolnak.Haaprogramozstanulstvlasztjk,termszetesenszeretnnekminlelbb(lehet,hogynagyonegyszer)alkalmazsokatkszteni,melyekbenagrafikusmegjelensmrmasszvanjelenvan.Azrtvlasztottukeztakiss szokatlan megkzeltst, hogy nvendkeinknek nagyon korn lehetsgk legyen kis, szemlyesprojektekbe kezdeni, melyek rvn rezhetik, hogy rtkelik ket. Azt viszont megkveteljk, hogy amunkikatautomatikuskdgenerl,fejlettprogramfejlesztkrnyezetekalkalmazsanlklrjkmeg,mertnemakarjukaprogramozssszetettsgtsemelfedni.

    Egyesekazzalkritizlnakbennnket,hogymdszernknemlltjaelggkzppontbaatisztaskemnyalgoritmizlst. gygondoljuk, hogyegy ilyen megkzelts a fentebb mr emltett okokmiatt nincs afiatalokra adaptlva. Radsul ez a megkzelts kevsb lnyeges, mint a mltban volt. gy tnik, azobjektumokkaltrtnmodernprogramozstanulsainkbbaztignyli,hogyatanulamilyenkorncsaklehetkerljnkapcsolatbamr ltez objektumokkals osztlyknyvtrakkal. gynagyonkornmegtanulja, hogyinkbb objektumok kztti interakcikban gondolkozzon, mint eljrsokban s ez lehetv teszi, hogy elggyorsankiaknzzaazolyankonstrukcikelnyeit,mintazrklssapolimorfizmus.

    Egybkntelgjelentsteretbiztostottunkaklnbztpusadatszerkezetekkezelsnek,mertgyvljk,hogyazadatszerkezetektgondolsnakkellkpeznimindenprogramfejlesztsgerict.

    GrardSwinnen:TanuljunkmegprogramozniPythonnyelven 4.

    Forrs: http://www.doksi.hu

  • AzelsprogramozsinyelvkivlasztsaSokprogramozsinyelvltezik.Mindegyiknekvannakelnyeishtrnyai.Biztos,hogyazlenneazidelis,

    ha tbb nyelvet hasznlnnk. Csak btortani tudjuk a tanrokat, hogy sznjanak r idt s mutassanak beklnbz nyelvekbl vett pldkat. El kell azonban fogadnunk, hogy mindenek eltt a szilrd alapokmegszerzsre kell trekednnk s a rendelkezsnkre ll id korltozott. Ezen a szemvegen t nzve adolgokataztniksszernek,hogyhaelszrcsakegynyelvethasznlunk,legalbbisazelstanvben.

    Demelyiknyelvetvlasszukelsnek?

    AmikorazjTudomnyoksInformatikatantrgytantervnekelksztsesornelkezdtnkgondolkodniezen a krdsen, mr elg hossz szemlyes programozsi tapasztalatot gyjtttnk ssze Visual Basickel (Micro$oft)sClarionnal(Top$peed).Delphivel(Borl@nd)isksrleteztnkegykicsit.Termszetesvolt,hogyelszrezeknekanyelveknekazegyikregondoltunk(aClariontpreferlva,amisajnoskevssismert).

    Haezeketakarnnkalapeszkzknthasznlniazltalnosprogramozstantshoz,akkorazokktkomolyhtrnnyaljrnnak:

    Azzletiszoftverekheztartoznak.Ezaztjelenti,hogynemcsakazezeketaszoftverekethasznlnikvnoktatsiintzmnynekkellenemindenmunkallomsszmralicencetvsrolni(amielgkltsgesnekgrkezik),hanemazokatanulkisimplicitmdonerrelennnekknyszertve,akikaprogramozsitudsukataziskolnkvlkvnjkalkalmazni,amitnemtudunkelfogadni.

    Specilisanegyetlenopercisrendszerhezktdnek,a Windows hoz.Nemportbilisakmsopercisrendszerekre(Unix,MacOS,stb.).Eznemilleszkedikabbaapedaggiaitervnkbe,hogyltalnos(sezrtszertegaz) kpzst adunk,amibenaz informatikai invarinsokat amennyire lehetsges nyilvnvalvtesszk.

    Ezrt gydntttnk, hogymegnzzkazalternatvknlatot, vagyis amit a szabadszoftver mozgalom1ingyenknl.Amittalltunk,aznagyonfellelkestettbennnket:azOpenSourcevilgbaningyenesinterpreterekscompilereklteznekegysornyelvre,radsulezekanyelvekmodernek,versenykpesek,portbilisak(azazklnbz opercis rendszerek alatt hasznlhatk, mint a Windows, Linux, MacOS ...) s nagyon jldokumentltak.

    VitnfellaC/C++adominnsnyelv.Eztanyelvetabszoltreferenciakntfogadjkelsmindenkomolyinformatikusnakelbbvagyutbbsszekell vele akadni. Abaj csakaz, hogynagyonijeszt s bonyolult,tlsgosangpkzeli. Aszintaxisakevss olvashat sersenkorltoz. Egynagymret programmegrsaC/C++banhosszsfradsgos.(UgyanezekamegjegyzseknagymrtkbenrvnyesekaJavanyelvreis).

    1 Aszabad software (FreeSoftware) egy olyan program, aminek a forrskdja mindenki szmra hozzfrhet(Open source). Gyakran ingyenes (vagy majdnem az), a szerzje szndka szerint szabadon msolhat smdosthat, ltalban a vilg klnbz rszein l lelkes, nkntes fejlesztk szzai egyttmkdsnek atermke. Mivel forrskdjt szmos specialista (egyetemi hallgat s oktat) boncolgatta, ezrt az esetektbbsgben a nagyon magas technikai sznvonal a jellemzje. A leghresebb szabad software a GNU/Linuxopercisrendszer,amineknpszersgenaprlnapran.

    5. GrardSwinnen:TanuljunkmegprogramozniPythonnyelven

    Forrs: http://www.doksi.hu

  • Msrsztennekanyelvnekakorszergyakorlatagyakranfolyamodikalkalmazsgenertorokhozsmsnagyon fejlett segdeszkzkhz, mint amilyen a C++Builder, Kdevelop, stb. Ezek a programfejlesztkrnyezeteknagyonhatkonynakbizonyulhatnakgyakorlottprogramozkkezben,detlsgosansoksszetetteszkztknlnaksolyanismeretekettteleznekfelafelhasznlrszrl,melyekkelegykezdnyilvnvalanmgnemrendelkezik.Kzttk elvszakezd,nemltjaaftlazerdt,amiazzalaveszllyeljr,hogyasegdeszkzkelfedikanyelvalapmechanizmusait.EzrtaC/C++tksbbrehagyjuk.

    Programozsi tanulmnyaink elejn szmunkra preferlhatbbnak tnik egy magasabb szint, kevsbkorltoz,jobbanolvashatszintaktikjnyelvhasznlata.NzzemegazolvasetrgykrbenJeffreyElknerHowtothinklikeacomputerscientistknyvnekelszavt(lsda362.oldalt).

    Miutnmegvizsgltuksegykicsitksrleteztnka Perls Tcl/Tknyelvekkel,vglanagyonkorszersnvekvnpszersgnekrvendPythonmellettdntttnk.

    APythonnyelvbemutatjaStfaneFermigier2.APythonegyportbilis,dinamikus,bvthet,ingyenesnyelv,amilehetvtesziaprogramozsmodulris

    sobjektumorientltmegkzeltst.1989tafejlesztiGuidovanRossumsszmosnkntes.

    AnyelvjellemziRszletezzkegykicsitanyelv,pontosabbanktjelenlegiimplementcijnakjellemzit:

    APython portbilis nemcsakklnbzUnixvltozatokra,hanem MacOS, BeOS, NeXTStep, MSDOSsklnbzWindowsvltozatokrais.EgyjfordttrtakJavabanJpythonnakhvjkamiJavabytekdothozltre.

    Ingyenes,ugyanakkorkorltozsnlklhasznlhatkereskedelmiprojektekben. Egyarntmegfelelnhnyszortzsorosscripteknekstbbtzezersoroskomplexprojekteknek. Szintaxisa nagyon egyszer, fejlett adattpusokat kombinl (listkat, sztrakat, ...). Nagyon tmr,

    ugyanakkorjlolvashatprogramokrhatkvele.AzazonosfunkcijCsC++(vagyppenJava)programhossznak gyakran a harmadatde az egyenrtk (bsgesen kommentlt s a standard szablyoknakmegfelelen prezentlt) Python program, ami ltalban 510szer rvidebb fejlesztsi idt s lnyegesenegyszerbbkarbantartstjelent.

    Aprogramoz beavatkozsa nlkl kezeli az erforrsokat (memria, filehandlerek, ...) egy hivatkozsszmll mechanizmus segtsgvel (ami hasonlt egy szemtgyjthz (garbage collector)), deklnbzikattl).

    APythonbannincsenekpointerek. APython(opcionlisan)tbbszl(multithread). Objektum orientlt. Tmogatja a tbbszrs rklst s az opertor overloadingot.

    ObjektummodelljbenaC++terminolgithasznlvamindenmetdusvirtulis.APythonbamintaJavabavagyaC++jabbverziibaegykivtelkezel rendszervanbeptve,ami

    lnyegesenleegyszerstiahibakezelst.

    2 Stfane Fermigier az AFUL (Association Francophone des Utilisateurs de Linux et des logiciels libres =FranciaajkLinuxsszabadsoftwareFelhasznlkEgyeslete)elnke.EzaszvegaProgrammez!magazinban1998 decemberben megjelent cikk kivonata, ami a http://www.linuxcenter.org/articles/9812/python.htmlwebcmeniselrhet.

    GrardSwinnen:TanuljunkmegprogramozniPythonnyelven 6.

    Forrs: http://www.doksi.hu

  • A Python dinamikus (az interpreter ki tud rtkelni Python kifejezseket s utastsokat tartalmazkarakterlncokat), ortogonlis (kevsfogalommalnagyszmkonstrukcirhatle), reflektv (tmogatjaametaprogramozst(pldulavgrehajtssornkpesattribtumokatvagymetdusokathozzadni/eltvoltaniegyobjektumhoz/bl,vagyppenmegvltoztatniazosztlyt))sintrospektv(szmosfejleszteszkzmintadebuggersaprofilermagbanaPythonbanvanimplementlva).

    APythondinamikustpusads,minta Scheme vagya SmallTalk.Aprogramoz ltalmanipulltmindenobjektumnakaprogramvgrehajtskorjlmeghatrozotttpusavan,amitnemkellelredefinilni.

    Jelenlegktimplementcijavan.Azegyikinterpretlt,melybenaprogramokportbilisutastsokravannaklefordtva, majd egy virtulis gp hajtja ket vgre (mint a Java esetben, azonban van egy lnyegesklnbsg: mivel a Java statikus tpusads, ezrt jval egyszerbbegy Javaprogramvgrehajtsnakafelgyorstsa,mintegyPythonprogram).AmsikimplementcikzvetlenlJavabytekdotgenerl.

    Bvthet:minta Tcl tvagya Guile t,aPythont knnyenilleszthetjkmrmeglv Cknyvtrakhoz.Felhasznlhatjukkomplexprogramnyelvekbvtnyelveknt.

    AstandardPythonknyvtrsakiegsztpackageekvltozatosszolgltatsokattesznekhozzfrhetv:stringeksregulriskifejezsek,standardUNIXszolgltatsok(fileok,pipeok,jelek,socketek,szlak,...),internet protokolok (Web, News, FTP, CGI, HTML...), llandsg (persistence), adatbzisok s grafikusinterfaceek.

    APythonfolyamatosanfejldnyelv,amimgttlelkesfelhasznlksfejlesztkkzssgell,akiknektbbsge tmogatja a szabad szoftvereket. A nyelv alkotja ltal Cben rt s karbantartott interpreterrelprhuzamosanegymsik,Javabanrtinterpretertisfejlesztenek.

    VglaPythonXMLkezelsrealkalmasnyelv.

    Tbbklnbzverzi?

    Amintemltettem,aPythontfolyamatosanfejlesztik.Afejlesztsacljaatermktkletestse.Ezrtnemkellaztgondolni,hogyelbbvagyutbbmindenprogramunkatmdostanikell,hogyazokategyj,azelzverzikkal inkompatibiliss vlt verzihoz adaptljuk. A knyv pldi egymst kveten, egy viszonylaghossz idszakalatt kszltek. Egyeseket a Python1.5.2, mgmsokat az1.6, 2.0, 2.1, 2.2 s vgl a 2.3verzijvalrtuk.

    Ennek ellenre valamennyi problma mentesen mkdik ez utbbi verzi alatt s bizonyra nagyobbmdostsoknlklfognakmkdniakvetkezverzikalattis.

    Teleptseazutolsverzitsszrakozzonjl!

    7. GrardSwinnen:TanuljunkmegprogramozniPythonnyelven

    Forrs: http://www.doksi.hu

  • APythonterjesztseBibliogrfia

    A Python klnbz verzii (Windowsra, Unixra, stb.), az eredeti oktat anyaga, a kziknyve, afggvnyknyvtrak dokumentcija, stb. ingyen letlthetk az internetrl, a hivatalos Python websiterl:http://www.python.org.

    NagyonjPythonnalfoglalkozknyvekkaphatk:

    Programming Python, by Mark Lutz, Second Edition, O'Reilly,March 2001, 1296 pages, ISBN:0596000855

    LearntoprogramusingPython,byAlanGauld,AddisonWesleyProfessional;, January152001, 288pages,ISBN:0201709384

    Python in a Nutshell, by Alex Martelli, 1st Edition, O'Reilly, March 2003, 654 pages,ISBN:0596001886

    LearningPython, byMarkLutz, DavidAscher, 2ndEdition, O'Reilly,December2003,620pages,ISBN:0596002815

    Python:Howtoprogram,byHarveyM.Deitel,etal,PrenticeHall;February4,2002,1292pages,ISBN:0130923613

    PythonandTkinterProgramming,byJohnE.Grayson,ManningPublications;1stedition(January,2000),688pages,ISBN:1884777813

    CorePythonProgramming,byWesleyJ.Chun,PrenticeHall(December15,2000),816pages,ISBN:0130260363

    PythonProgrammingOnWin32,byMarkHammond,AndyRobinson,FirstEditionJanuary2000,669pages,ISBN:1565926218

    PythonStandardLibrary,byFredrikLundh,O'Reilly,05/2001,281pages,ISBN:0596000960

    Python cookbook, by Alex Martelli, Anna Martelli Ravenscroft, David Ascher, 2ndEdition, O'Reilly,03/2005,807pages,ISBN:0596007973

    PythonScriptingforComputationalScience,byHansP.Langtangen,Springer;1stedition(September20,2004),726pages,ISBN:3540435085

    GrardSwinnen:TanuljunkmegprogramozniPythonnyelven 8.

    Forrs: http://www.doksi.hu

  • Atanrnak,akioktatsisegdletkntakarjahasznlniaknyvetAjegyzettelazaclunk,hogyszlesretrjukakapukat.Tanulmnyainknakezenaszintjnfontosnaktnik

    annakbemutatsa,hogyaszmtgpprogramozsafogalmaksmdszerekrisitrhza,melybenmindenkimegtallhatjaanekiszimpatikusterletet.Nemgondoljukazt,hogymindenhallgatnakpontosanugyanazokatadolgokatkellmegtanulni.Inkbbaztszeretnnk,hogymindegyikkneksikerljnkifejleszteniegykicsiteltrszaktudst,amilehetvteszi,hogymindnmaguk,mindpedigtanultrsaikelttrtkeljkmagukatshaegynagyobb lptk projektben val egyttmkdst ajnlunk nekik, akkor hozz tudjanak jrulni a specilistudsukkal.

    Mindenesetrealegfbbgondunkannakkelllenni,hogysikerljnflkeltennkazrdekldst,amimesszealegnagyobbhaszonegyolyannehztrgykresetbenmintaszmtgpprogramozs.Nemakarunkgytenni,mint akik azt hiszik hogy dikjaik azonnal lelkesedni fognak a szp algoritmusok rsa irnt. Inkbb arrlvagyunkmeggyzdve,hogyazrdekldstcsakattlapillanattlkezdvelehettartsanfenntartani,amikortlkpessvlnakarra,hogynminllsggaleredeti,szemlyesprojektfejlesztshezkezdhetnek.

    Ezekameggondolsokvezettekminketegyolyantantrgyszerkezetkialaktshoz,amitegyesektalnkicsitkaotikusnak fognak tallni. A vezrfonal a kitn How to think like a computer scientist, amit kicsitkibvtettnk az adatbe/kivitelre s klnsen a Tkinter grafikus interfacere vonatkoz elemekkel. Aztszeretnnk, ha dikjaink mr programozs tanulmnyaik els vnek vgtl kezdve tudnnak kis grafikusalkalmazsokatkszteni.

    Egszenkonkrtanezaztjelenti,gygondoljukatantrgyelsvbentfutjukajegyzetelsnyolcfejezett.Ez azt ttelezi fel, hogy elg gyors temben megtrgyalunk egy sor fontos fogalmat (adattpusok,programvgrehajtsvezrlutastsok,fggvnyeksciklusok),denemfoglalkozunkazzaltlsokat,hogyatanulktkletesenmegrtsenekmindenegyesfogalmat,mielttrtrnkakvetkezre.Inkbbmegprbljukrvezetniketaszemlyeskutatssksrletezszre.Sokszorhatkonyabblesz,haazegyesfogalmakatsfontosmechanizmusokatadottszituciban,vltozatossszefggsekkzttjraelmagyarzzuk.

    Elkpzelsnkszerintflegamsodikvaz,amikormegprbljukamegszerzettismereteketelmlytenisstruktrlni. Az algoritmusokat rszletesen elemezzk. A projekteket, feladat meghatrozsokat s elemzmdszereketkonzultcikonbeszljkmeg.Megkveteljkbizonyosmunkkesetnajegyzknyvrendszereshasznlattsatechnikaijelentsekksztst.

    A vgcl mindegyik tanul szmra egy komoly, eredeti programozsi projekt kivitelezse lesz. Ezrttreksznkafontosfogalmakelmletitrgyalsnakelgkornatanvelejntrtnbefejezshez,hogymindenkinekelgidlljonarendelkezsre.

    Fontosannakamegrtse,hogyjegyzetbenkzltszmosinformciamiegysorspecilisterletetrint(grafikusinterfaceek,kommunikci,adatbzisokkezelse,stb.)fakultatvtananyag.Ezekcsakjavaslatoksirnyjelzk,amiketazrtvettnkbeaknyvbe,hogysegtsnkadikjainknakatanulmnyaikatlezrszemlyreszabottprojektjkkivlasztsbansmegkezdsben.Nemksreljkmegegyadottnyelvvagytechnikaiterletspecialistinakkpzst:csakegykisrltstszeretnnknyjtaniazokraazrisilehetsgekre,amikazoknakknlkoznak,akikveszikafradsgotsprogramozitudsratesznekszert.

    9. GrardSwinnen:TanuljunkmegprogramozniPythonnyelven

    Forrs: http://www.doksi.hu

  • AknyvpldiAknyvpldinakforrskdjaletlthetaszerzilletveafordtwebsitejrl:

    http://www.ulg.ac.be/cifen/inforef/swi/python.htm

    http://learnpython.openproject.hu

    KsznetnyilvntsAjegyzet egy rsze szemlyes munka eredmnye, mg ms jval jelentsebb rsze informcik s

    jindulattanrokskutatkltalrendelkezsrebocstotttletekgyjtemnye.Amintfntebbmrjeleztem,azegyiklegfontosabbforrsomA.Downey,J.Elkner&C.Meyers: Howtothinklikeacomputerscientistkurzusavolt.Mgegyszerksznetezeknekalelkestanroknak.Bevallom,GuidovanRossum(aPythonfszerzjnek)eredeti oktat anyaga, valamint a Python felhasznlk (rendkvl aktv) kzssgtl szrmaz pldk sklnfle dokumentumok is nagymrtkben inspirltak. Sajnos lehetetlen felsorolni valamennyi szveghivatkozst,deszeretnmelismersemrlbiztostanivalamennyikszerzit.

    Ksznetilleti mindazokat,akikaPythonskiegszti,valamintadokumentcifejlesztsndolgoznak,GuidovanRossummalkezvetermszetesen,deatbbieketsemkifelejtve(Szerencsretlsgosansokanvannak,semhogyvalamennyiknevtfeltudnmittsorolni).

    Ksznet illeti mgkollgimatFreddyKlichet, ChristineGhiottsDavidCarrerat aLigeiSt. JeanBerchmans Intzet tanrait, akik dikjaikkal egytt vllalkoztak r, hogy belevetik magukat ennek az jkurzusnakakalandjbasakiknekszintnszmosjobbtjavasoltukvolt.KlnksznmChristopheMorvannakazIUTdeMarnelaValletanrnakrtkesvlemnytsbtortst.

    Nagyon ksznm szerkesztmnek Florence Leroynak az O'Reilly kiadnl, hogy szakrten javtottafogalmazsihibimatsbelgicizmusaimat.

    VglmegksznmfelesgemSuzeltrelmtsmegrtst.

    GrardSwinnen:TanuljunkmegprogramozniPythonnyelven 10.

    Forrs: http://www.doksi.hu

  • Afordtelszava

    APython a leggyorsabban fejld nyltforrs, ltalnos cl objektumorientlt programozsi nyelv. Aprogramozk14%ahasznlja.Szintaxisarendkvlegyszer,knnyentanulhat.

    Awww.python.orgrlingyenletlthetsmindenkorltozsnlklszabadonfelhasznlhat,mdosthat,terjeszthet.Azinternetenrengetegdokumentci,pldaprogramtallhat,amiksegtikakezdkelindulst.

    A gyakorlati let szmos terletn alkalmazzk pl.: hlzati alkalmazsok, webfejleszts, numerikus studomnyos alkalmazsok, prototipus fejleszts, gyors alkalmazs fejleszts (RAD = Rapid ApplicationDevelopment),stb.

    Grard Swinnen knyve pedaggiailag tgondolt, rendkvl logikus bevezets a Python programozsinyelvbe.Viszonylagkisterjedelmeellenreszmosalkalmazsiterletreadrltstapldaprogramoksalaposelemzsk segtsgvel. A knyv szerves rszt kpezik a pldk, illetve a kln is letlthet mkdpldaprogramok.

    Afordtssalazvoltaclom,hogyegyiskolaitantsraisalkalmaskivlknyvettegyekmagyarnyelvenhozzfrhetv az rdekldknek. Az olvas fordtssal kapcsolatos szrevteleit ksznettel veszem [email protected].

    Debrecen,2006.janur10.

    DarczyPter

    11. GrardSwinnen:TanuljunkmegprogramozniPythonnyelven

    Forrs: http://www.doksi.hu

  • 1.Fejezet: Programozkntgondolkodni3

    Mieltt elkezdjk a programozs tanulst, be kell vezessek nhny fogalmat, melyek ismeretre atovbbiakbanszksgnklesz.Szndkosanegyszerstemamagyarzatokat,hogyneterheljemtlazolvast.Aprogramozsnemnehz:elghozzegykismdszeressgskitarts.

    1.1 AprogramozsA tantrgy clja, hogy megtantson programozknt gondolkozni. Ez a gondolkodsmd olyan sszetett

    eljrsokatkombinl,mintamilyeneketamatematikusok,amrnkk,satudsokalkalmaznak.

    Aprogramozamatematikushozhasonlanformlisnyelvekethasznlazokfejtsek(vagyazalgoritmusok)lersra.Amrnkhzhasonlanterveketgondolki,azalkotrszekblszerkezeteketlltssze,srtkeliazok teljestmnyt. Mint a tuds megfigyeli az sszetett rendszerekviselkedst, magyarzatokat vzol fl,ellenrziajslatokat.

    Aprogramozftevkenysgeaproblmamegolds.

    Ezklnbzkpessgeketsismereteketignyel:

    egyproblmtklnbzmdokonkelltudnunkmeg/jrafogalmazni, innovatvshatkonymegoldsokatkelltudnunkelkpzelni, ezeketamegoldsokatvilgosanskomplettmdonkelltudnunkkifejezni.

    Aszmtgpprogramozsalnyegbenabblll,hogyrszletesenmegmagyarzzukegygpnekaminemrtimegazemberinyelvet,csupnkaraktersorozatokautomatikuskezelsrekpes,hogymitkelltennie.

    Aprogramelrergztettkonvencikezekegyttestprogramozsinyelvneknevezznkszigorbetartsvalkdoltutastsoksorozata.Agprendelkezikegyeljrssalamigydekdoljaezeketazutastsokat,hogyanyelvmindenszavhozegypontosanmeghatrozottakcitrendel.

    Azolvasmegtanulprogramozni,amimrnmagbanhasznos,mertfejlesztiazintelligencit.Majdodigiseljut,hogyaprogramozstkonkrtprojektekmegvalstsrahasznlja,amibenbiztosrmtfogjalelni.

    1.2 Gpinyelv,programozsinyelvAszmtgpktllapotelektromosjelek(pldulegyminimlisvagyegymaximlisfeszltsg)sorozatain

    hajtvgreegyszermveleteket.Ezekajelsorozatokegymindenvagysemmitpuslogiktkvetnek.gytekinthetjkket,mintolyanszmoksorozatt,melyekmindigcsaka0saz1rtkeketvehetikfel.Azilyenszmrendszertkettes(binris)szmrendszerneknevezzk.

    Aszmtgpabels mkdsesorncsakbinrisszmokattudkezelni. Mindenmstpus informcitbinrisformtumvkelltalaktanivagykdolni.Eznemcsakakezelendadatokra(szvegek,kpek,hangok,szmok,stb.)igaz,hanemaprogramokrais,vagyisazokraazutastssorozatokrais,amiketazrtadunkmegagpnek,hogymegmondjukneki,mitkellcsinlniazadatokkal.

    Az egyetlen nyelv, amit a szmtgp valban megrt tnyleg nagyon tvol van attl amit mi

    3 EnnekafejezetnekajelentsrsztDowney,ElknersMeyersHowtothinklikeacomputerscientistjblfordtottam.

    GrardSwinnen:TanuljunkmegprogramozniPythonnyelven 12.

    Forrs: http://www.doksi.hu

  • hasznlunk. 1esek s 0k(ezeka bitek) hossz sorozata, amiket gyakran8, 16, 32 vagyppen64esvelcsoportostvahasznl.Ezagpinyelvszmunkrarthetetlen.Ahhoz,hogyegyszmtgppelbeszljnk,olyanfordtrendszereketkellalkalmaznunk,melyekkpesekaszmunkrarthetbbkucsszavakat(rendszerintangolszavakat)alkotkaraktersorozatokatbinrisszmokkalaktani.

    Ezeknekafordtrendszereknek,amiketegysorkonvencialapjnimplementlnak,nyilvnvalanszmosvltozataltezik.

    Attl fggen, hogy milyen eljrst alkalmaz a fordt: hvjuk interpreternek vagy compilernek (lsdlentebb).Aprogramozsinyelvnagyonpontosszablyokhozrendelt(nknyesenvlasztott)kulcsszavaknakakszlete.Aztrjale,hogyanrakhatjuksszeezeketaszavakatolyanmondatokk,amiketazinterpretervagyacompileragpnyelvre(binrisszmokra)letudfordtani.

    Az absztrakci szintje alapjn beszlhetnk alacsonyszint (pl.: Assembler) vagy magas szintnyelvekrl (pl.:: Pascal,Perl, Smalltalk, Clarion,Java...). Egyalacsonyszint nyelvet nagyon elemi, nagyongpkzeliutastsokalkotjk.Egymagasszintnyelvutastsaiabsztraktabbakvagyhatkonyabbak.Ezaztjelenti,hogyazinterpretervagyacompilermindenutaststnagyszmelemigpiutastsrafordtle.

    Azolvaselsprogramozsinyelvknta Pythontfogjamegtanulni.Ezegymagasszintnyelv.Abinriskdratrtnfordtsasszetetteljrssmindigidignyes.Ezknyelmetlennektnhet.Valjbanamagasszintnyelveknekrendkvlielnyeikvannak:egymagasszintnyelvenaprogramrssokkalegyszerbb,jvalkevesebbidbekerl;annakavalsznsge,hogyhibkatejtnkjvalcseklyebb,minthaegyalacsonyszintnyelven programoznnk; a karbantarts (vagyis a ksbbi mdostsok) s a hibakeress (debugols)nagymrtkben egyszersdnek. Radsul egy magas szint nyelven megrt program gyakran hordozhat(portable) lesz, vagyisgymkdtethetjk,hogynemkellsokatvltoztatni rajtaaklnbz gpekenvagyopercis rendszereken. Egy alacsonyszint nyelven rt programmindig csak egy gptpuson tud mkdni.Ahhoz,hogyegymsikgptpusonmkdjnteljesentkellrni.

    13. GrardSwinnen:TanuljunkmegprogramozniPythonnyelven

    Forrs: http://www.doksi.hu

  • 1.3 CompillssinterpretlsAprogramot,ahogyanaztegyszerkeszt programmal(egyfajtaspecilizlt szvegszerkesztvel)megrjuk

    mostantlfogvaforrsprogramnak(vagyforrskdnak)nevezzk.Mintmremltettem,ktftechnikaltezikarra, hogy egy ilyen forrskdot a gp ltal vgrehajthat binris kdra fordtsunk: az interpretci s acompilatio.

    Azinterpretciesetnmindenegyesalkalommal,amikorvgreakarjukhajtatniaprogramot,azinterpreterprogramot kell hasznlnunk. Ennl a techniknl a fordt a forrsprogramminden egyes elemzett sortnhny gpi nyelv utastsra lefordtja, amiket azonnal vgre is hajt. Semmilyen trgyprogram semgenerldik

    Acompills ateljesforrsszvegegyszerilefordtsblll.Afordtprogramelolvassaaforrsprogramsszessortsegyjkdotlltel,amittrgykdnak(objectkd)hvunk.Ezutbbitmostmracompilertlfggetlenlvgrehajtathatjukstrolhatjukegyfileban(vgrehajthatfile)

    Mindegyiktechniknakvannakelnyeishtrnyai:

    Azinterpretciidelisamikoregynyelvettanulunk,vagyegyprojekttelksrleteznk.Ezzelatechnikvalkzvetlenltesztelhetaforrskdmindenmegvltoztatsaanlkl,hogytmennnkegycompillsifzison,amimindigidignyes.

    Ezzel szemben, amikor egy projektnek sszetett funkcii vannak, amiket gyorsan kell vgrehajtani, acompilatitrszestjkelnyben.Nyilvnval,hogyegycompilltprogrammindiglnyegesengyorsabbanfogmkdni, mint az interpretlt vltozata, mivel a szmtgpnek a vgrehajts eltt nem kell minden egyesutaststjrabinriskdralefordtani.

    Egyesmodernnyelvekmegprbljkaktmdszertkombinlni,hogymindegyikblalegjobbathozzkki.EzahelyzetaPythonsaJavaesetbenis.AmikoregyforrskdotadunktaPythonnak,azelszregygpikdhozhasonlkzbenskdot.n.bytecodeothozltre,amitaztnegyinterpreternekadtvgrehajtsra.Aszmtgpszempontjbla bytecode otnagyonegyszergpinyelveninterpretlni.Ezazinterpretcitehtsokkalgyorsabblesz,mintegyforrskdinterpretcija.

    Ennekamdszernekazelnyeirzkelhetek:

    GrardSwinnen:TanuljunkmegprogramozniPythonnyelven 14.

    Forrs: http://www.doksi.hu

  • Az,hogyllandanrendelkeznkegyinterpreterrel,lehetvteszibrmilyenkisprogramrszlet kzvetlentesztelst. Egy alkalmazs brmelyik alkotjnak helyes mkdst igazolhatjuk annak ltrehozstkveten.

    Alefordtott bytecode interpretcija nemolyan gyors, mint egy igazi binris kd, de szmos programszmra,belertveagrafikusprogramokatis,nagyonmegfelel.

    Abytecodeportbilis.Ahhoz,hogyegyPythonvagyegyJavaprogramklnbzgpekenvgrehajtdjonelghamindegyikgpenrendelkezsrellegyadaptltinterpreter.

    Az elmondottak egy kicsit bonyolultnak tnhetnek, az viszont j hr, hogy mindezt a Pythonfejlesztkrnyezet automatikusan vgzi el. Elg, ha berjuk a parancsokat a klaviatrn, majd nyomunksaPythonmagravllaljaazokfordtstsinterpretlst.

    15. GrardSwinnen:TanuljunkmegprogramozniPythonnyelven

    Forrs: http://www.doksi.hu

  • 1.4 ProgramfejlesztsHibakeress(debug)Aprogramozs nagyonsszetett s mint mindenemberi tevkenysgsorn,enneksornis szmoshibt

    kvetnkel.Anekdotaiokokblaprogramozsihibkatbug4oknaknevezzk.Adetektlsukrasjavtsukrahasznlttechnikkegyttestdebugnaknevezzk.

    Hromfletpushibaltezhetegyprogramban.Illendmegtanulnimegklnbztetniket:

    1.4.1 SzintaxishibkAPythoncsakakkortudvgrehajtaniegyprogramot,haa szintaxisa teljesenkorrekt.Ellenkezesetbena

    programvgrehajtslellsegyhibazenetetkapunk.Aszintaxiskifejezsazokraaszablyokrautal,melyeketanyelvszerzirgztettekaprogramstruktrjravonatkozan.

    Mindennyelvnekvanszintaxisa.Pldulamagyarnyelvbenegymondatmindignagybetvelkezddiksrsjellelvgzdik.ezrtezamondatktszintaxishibttartalmaz

    A kznsges szvegekben nhny kis szintaxishibnak nincs jelentsge. St elfordulhat (pldul aversekben),hogyszndkosankvettekelszintaxishibkat.Eznemgtoljamegaszvegmegrtst.

    Ezzelszembenegyszmtgpprogrambanalegkisebbszintaxishibaamkdslellst(kiakads)segyhibazenetkirsteredmnyezi.Azolvasprogramoziplyafutsaelsheteibenbiztosansokidtfogeltlteniaszintaxishibikeressvel.Gyakorlattaljvalkevesebbhibtfogelkvetni.

    Tartsuk szben, hogy az alkalmazott szavaknak s szimblumoknak nmagukban semmilyen jelentsksincs: ezek csak kdsorozatok, amik arra valk, hogy automatikusan binris szmokk legyenek alaktva.Kvetkezskntnagyongyelnnkkellanyelvszintaxisnakalegaprlkosabbetartsra.

    Szerencse,hogyels programozi lpseinketegyolyaninterpetlt nyelvveltesszkmeg,mintaPython.Veleegyszersgyorsahibakeress.Compilltnyelvekkel(mintaC++)mindenmdostsutn,legyenekazokakrmilyenkicsikis,jrakellenefordtaniateljesprogramot.

    1.4.2 SzemantikaihibkA msodik hibatpus a szemantikai hiba vagy logikai hiba. Ha ilyen tpus hiba van valamelyik

    programunkban,akkoraprogramtkletesenhajtdikvgreabbanazrtelemben,hogysemmilyenhibazenetetsemkapunk,deazeredmnynemazamitvrunk:mstkapunk.

    Valjbanaprogramaztteszi,amitmondtunkneki,hogyhajtsonvgre.Aproblmaaz,hogyamitmondtunk,hogyhajtson vgre nemfelel megannak, amit szerettnkvolna, hogya programvgrehajtson. Aprogramutastsainaksorrendjenemfelelmegakitzttclnak.Aszemantika(alogika)nemkorrekt.

    Alogikaihibkkeressenehzfeladatlehet.Elemeznikellazoutputotsmegkellprblniegymsutnreproduklniazokatamveleteket,amiketagpazegyesutastsokutnvgrehajtott.

    4 A "bug" angol eredet kifejezs, olyan kis, kellemetlen rovarokat jelent, mint amilyenek apoloskk. Azels szmtgpek elektroncsvei meglehetsen nagy feszltsget ignyeltek. Szmosalkalommal megtrtnt, hogyezek a rovarok bemsztak az ramkrk kz s ramtst kaptak, sznn gett testk rvidzrakat s gyrthetetlenmeghibsodsokatokozott.

    GrardSwinnen:TanuljunkmegprogramozniPythonnyelven 16.

    Forrs: http://www.doksi.hu

  • 1.4.3 VgrehajtskzbenfellphibkAhibkharmadiktpust a vgrehajts kzbenfellp hibk(Runtimeerror) kpezik. Ezekcsakakkor

    lpnekfel, amikoraprogrammkdsesornspecilis krlmnyekllnakel (pldulaprogramegymrnemltezfiletksrelmegolvasni).Ezeketahibkat kivteleknek (exception) ishvjk,mertezekltalbanjelzik,hogyvalamikivtelestrtnt(amitnemlttunkelre).Tbbszrfogunktallkozniilyentpushibvalamikoregyrenagyobbmretprojekteketfogunkprogramozni.

    1.5 HibakeresssksrletezsAtanulssornelsajttand egyiklegfontosabbkszsgahatkonyprogramhibakeress(debugols).Ez

    nhaidegest,demindignagyonsokrtszellemitevkenysg,aminekasornlesltsrlkelltanubizonysgottenni.

    Emlkeztetegyrendrsgikihallgatsra.Megvizsgljukatnyeketsmagyarzfeltevseketkelltennnk,hogyrekonstruljukatapasztalteredmnyeketadfolyamatokatsesemnyeket.

    Hasonlt a tudomnyos ksrletekre. Van egy elkpzelsnk arrl, hogy mi nemmkdik, mdostjuk aprogramunkatsjrakiprbljuk.Kialaktottunkegyfelttelezst,amilehetvtesziannakmegjslst,hogymitkelleredmnyezzenamdosts.Haajslatbeigazoldik,tettnkegylpstegymkdprogramirnyba.Haa jslatunktvesnekbizonyul, akkoregyjabbhipotzist kell alkotnunk.Ahogyanazt SherlockHolmesmondja: Amikor kizrtuk a lehetetlent, annak kell lennie az igazsgnak, ami megmarad, mg ha azvalszntlenis(A.ConanDoyle,Angyesjel).

    Egyeseknekaprogramozssdebugolspontosanugyanaztadolgotjelenti.Ezzelaztakarjkmondani,hogyaprogramozsugyanannakaprogramnakazllanmdostsblsjavtsblll,mindaddig,mgvglaprogramgyviselkedik,ahogyanakarjuk,hogyviselkedjen.Azelkpzelsaz,hogyaprogramkszts mindig egy mr mkd (azaz debugolt) vzzal kezddik, amihez rtegrl rtegre kismdostsokattesznkhozz,fokozatosanjavtjukahibkat,hogyvglafolyamatmindegyikszakaszbanegymkdprogramunklegyen.

    Pldul tudjuk, hogyaLinuxegytbbezerkdsorbl ll opercis rendszer(teht egynagyprogram).Ennekellenrekezdetbengyindultmintegykicsi,egyszerprogram,amitLinusTorvaldsarrafejlesztettki,hogyteszteljeazIntel80386processzorsajtossgait.LarryGreenFieldszerint(TheLinuxuser'sguide,btaverzi1):Linuselsprogramjainakegyikeegykisprogramvolt,aminekafeladataazAAAAkarakterlnc BBBBkaraklnccvalalaktsavolt.Ezaz,amiksbbaLinuxszvlt!.

    Azelzeknemjelentikazt,hogyhomlyoselkpzelsblkiindulvaszukcesszvenapproximlvaakarnnkprogramozni.Amikoregyjelentsprogramprojektbekezdnk,mindenernkkelarrakelltrekednnk,hogyalehetlegjobbrszletesfeladatmeghatrozstrjukmeg,amiazelkpzeltalkalmazstervnfogalapulni.

    Klnbzmdszereklteznekerreaproblmaelemzsre,azonbanezektanulmnyozsameghaladjaennekajegyzetnekakereteit.Tovbbiinformcikrtshivatkozsokrtforduljonazolvasatanrhoz.

    17. GrardSwinnen:TanuljunkmegprogramozniPythonnyelven

    Forrs: http://www.doksi.hu

  • 1.6 TermszetessformlisnyelvekAzokatermszetesnyelvek,amiketkommunikcirahasznlnakazemberek.Nemkonstrultnyelvek(mg

    akkorsem,haegyesekbenmegprblnakrendszertteremteni):termszetesmdonfejldnek.

    Aformlisnyelveketspecilisalkalmazsokatszemeltttartvafejlesztettkki.gypldulamatematikusokltalhasznltjellsrendszeregyolyanformlisnyelv,amiklnsenhatkonyanfejezikiaklnbzszmoks mretek kztti relcikat. A vegyszek egy formlis nyelvet hasznlnak a molekulk szerkezetnekbemutatsra,stb.

    Aprogramozsinyelvekazokaformlisnyelvek,amiketalgoritmusoklersrafejlesztettek ki.

    Mintmrfntebbjeleztem,aformlisnyelvekszintaxisarendkvlszigorszablyoknakengedelmeskedik.Pldula 3+3=6 egymatematikailagkorrektbrzolsmd,mga $3=+6 nemaz.Ugyangya H2O kmiaikpletkorrekt,deaZq3G2nem.

    Aszintaxisszablyokatnemcsakanyelvszimblumaira(pldulaZqkmiaiszimblumnemmegengedett,mertsemmilyenelemneksemfelelmeg),hanemazokkombinlsimdjraisalkalmazzuk.Ezrt,jlleheta6+=+/5matematikai egyenletcsakmegengedettszimblumokattartalmaz, azonbanazokinkorrektelrendezsesemmitsemjelent.

    Egymondatolvassakorelkelljutnunkodig,hogyelkpzeljkamondatlogikaiszerkezett(mgakkorishaeztazesetektbbsgbennemtudatosantesszk).PldulamikorApnzdarableesett.mondatotmondjuk,megrtjk, hogy A pnzdarab az alany s a leesett az lltmny. Az elemzs lehetv teszi, hogymegrtskamondatjelentst,logikjt(szemantikjt).AnalgmdonaPythoninterpreternekelemeznikellaforrsprogramunkszerkezett,hogyajelentstkihmozzabelle.

    Atermszetessaformlisnyelvekneksokkzsjellemzjevan(szimblumok,szintaxis,szemantika),denagyonjelentsklnbsgekisvannakkzttk:

    Ktrtelmsg.

    A termszetes nyelvek tele vannak ktrtelmsgekkel, amik az esetek tbbsgben a szvegkrnyezetsegtsgvelmegszntethetk.Plduleltrjelentsttulajdontunkazrsznakegytermkrl,illetveegyrvzrl szl szvegben. Egy formlis nyelv nem tartalmazhat ktrtelmsgeket. Minden utastsnakegyetlen,szvegkrnyezettlfggetlenjelentsevan.

    Redundancia.

    A termszetes nyelvekben sok a redundancia azrt, hogy ezeket a ktrtelmsgeket s az informcitvitelbeli szmos hibt s vesztesget kompenzljk (mondatainkban tbbszr klnbz formbanmegismteljkugyanazt,hogybiztosaklegynkbenne,hogymegrttettkmagunkat). Aformlis nyelveksokkaltmrebbek.

    Irodalmisg.

    Az irodalmi szvegek tele vannak kpekkel s metaforkkal. Egy formlis nyelvben ezzel szemben akifejezseket sz szerint kell venni. Ha egy bizonyos szvegkrnyezetben azt mondom, hogyleesett aktforintos,lehetsges,hogyszsincsigaziktforintosrl,sempedigleessrl.Ezzelszembenegyformlisnyelvbenakifejezseketszszerintkellrteni.

    GrardSwinnen:TanuljunkmegprogramozniPythonnyelven 18.

    Forrs: http://www.doksi.hu

  • Atermszetesnyelvekhasznlathozszokvasokszornehezenalkalmazkodunkaformlisnyelvekszigorhoz.Ezazegyiknehzsg,amintlkelljutni,hogyeljussunkegyhatkonyprogramanalitikusgondolkodsmdjig.

    Ajobbmegrtsrdekbenhasonltsunksszemgnhnyszvegtpust:

    Vers:

    Aversekbenaszavakatmindzeneisgk,mindjelentskmiatthasznljksakeresetthatsfkntrzelmi.Tobzdnakametaforkbansktrtelmsgekben.

    Przaiszveg:

    A szavak szszerinti jelentse fontosabb bennk, s a mondatok gy vannak struktrlva, hogymegszntesskaktrtelmsgeket,deezsohasemsikerlteljesen.Gyakranszksgesekaredundancik.

    Szmtgpprogram:

    Aszvegjelentseegyrtelm sszszerinti. Tkletesenmegrthet csakaszimblumoksaszerkezetelemzservn.Tehtautomatizlnilehetazelemzst.

    Nhny javaslat, hogy hogyan olvassunk szmtgpprogramot (vagy brmilyen formlis nyelven rtszveget).

    Tartsukszben,hogyaformlisnyelveksokkaltmrebbek,mintatermszetesnyelvek,amiaztjelenti,hogyazolvassukhoztbbidrevanszksg.Radsulastruktraezeknlnagyonfontos.ltalbanazsemjtlet,haegymenetbenazelejtlavgigolvasunkelegyprogramot.Ehelyettgyakoroljukaprogramelemzstfejbenaszimblumokazonostsvalsaszerkezetrtelmezsvel.

    Vglemlkezznkr,hogymindenrszletnekjelentsgevan.Klnsenfigyelnnkkellakissnagybetkrevalamintazrsjelekhasznlatra.Mindenilyenhiba(mgaltszlaglegkisebbis,mintegyvesszkifelejtse)jelentsenmdosthatjaakdjelentstsgyaprogramlefutst.

    19. GrardSwinnen:TanuljunkmegprogramozniPythonnyelven

    Forrs: http://www.doksi.hu

  • 2.Fejezet: AzelslpsekIdejemunkhozltnunk.Pontosabban,megkrjkaszmtgpet,hogydolgozzonhelyettnk.Pdulaztaz

    parancsotadjukneki,hogyvgezzenelegysszeadstsrjakiazeredmnyt.Ehhezutastsokatsadatokatkellmegadnunk,melyekrealkalmazniakarjukazelbbieket.

    2.1 SzmolsaPythonnalAPythonnakazasajtossga,hogytbbflemdonhasznlhatjuk.

    Elszr interaktiv mdban, fogjuk hasznlni, vagyis gy, hogy a billentyzet segtsgvel kzvetlenlfolytathatunkveleprbeszdet.gyigengyorsanfelfedezhetjkanyelvszmoslehetsgt.Ksbbmegtanuljuk,hogyankellltrehoznisdiszkreelmenteniprogramokat(scripteket).

    Azinterpretertkzvetlenlaparancssorblindthatjuk(egyLinuxshellben,vagyWindowsalattegyDOSablakbl):elg,habegpeljka"python"parancsot(feltve,hogyaprogramfelvanteleptve)).

    Hagrafikusinterfacethasznlunk,mintaWindows,Gnome,WindowMakervagyKDE,valsznleginkbbegyterminlablakbanfogunkdolgozni,vagyegyspecializltfejlesztkrnyezetben,mintamilyenazIDLE.Terminlablakban(Linux5alatt)akvetkezjelenikmeg:

    WindowsalattazIDLEfejlesztkrnyezetkinzeteazalbbikprehasonlt:

    5 Windows alatt vlaszthatunk a Guido Van Rossum ltal rt IDLE fejlesztkrnyezet, amit magam elnybenrszestek,saMarkHammondltalfejlesztett PythonWinkztt.Lteznekmskifinomult fejlesztkrnyezetekis,mintakivl BoaConstructor(ezhasonlanmkdik,mintaDelphi),degyvlem,hogyeznemvalkezdknek.TovbbifelvilgostsrtaPythonwebsiteotrdemesmegnzni.

    LinuxalattinkbbaWindowMakergrafikuskrnyezetetrszestemelnyben(mintaKDEtvagyaGnomeot,amiktlsokerforrstvesznekignybe).Megnyitunkegyegyszer terminlablakotaPythoninterpreterindtshozvagyascriptekvgrehajtshozsakitnNeditprogramothvjuk,amiascriptekszerkesztsreval.

    GrardSwinnen:TanuljunkmegprogramozniPythonnyelven 20.

    Forrs: http://www.doksi.hu

  • A>>>jelafprompt,amiaztjelzi,hogyazinterpreterkszenllegyutastsvgrehajtsra.

    Pldul az interpretert azonnal egyszer irodai kalkultorknt hasznlhatjuk. Ellenrizzk az albbiparancsokat(Vljonszoksunkk,hogyegyfzetbefelrjukakpernynmegjeleneredmnyeket):>>> 5+3

    >>> 2 - 9 # a szkzk opcionlisak

    >>> 7 + 3 * 4 # a matematikai opertorok hierarchija# megmarad-e ?

    >>> (7+3)*4

    >>> 20 / 3 # meglepets !!!

    Megllapthatjuk,hogya+,,*s/.aritmetikaiopertoroksszeads,kivons,szorzssosztsravalk.Azrjelekmkdnek.

    Alaprtelmezsbenviszontazosztsegszoszts,amiaztjelenti,hogyhaegszargumentumokatadunkmeg,akkorazeredmnyegy(csonkolt)egszlesz,mintafentiutolspldban.Haaztakarjuk,hogyaPythonazargumentumtvalsszmkntrtelmezze,akkoreztgytudatjukvele,hogyaszmbaegytizedesponttesznk6.

    Prbljukkipldul:

    >>> 20.0 / 3 # (hasonltsuk ssze az eredmnyt az el z pldval)

    >>> 8./5

    Haegymveletetvegyestpusargumentumokkalhajtunkvgre(egszekkelsvalsokkal),akkoraPythonazoperandusokatautomatikusanvalstpusvalaktjatmielttelvgziamveletet.Prbljukki:>>> 4 * 2.5 / 3.3

    6 Valamennyiprogramozsinyelvben:atizedesszepartormindigegypont.Azinformatikbanavalsszmokatgyakranlebegpontosszmoknak,vagyfloattpusaknaknevezik.

    21. GrardSwinnen:TanuljunkmegprogramozniPythonnyelven

    Forrs: http://www.doksi.hu

  • 2.2 AdatoksvltozkAksbbiekbenleszalkalmunkrszletezniaklnbznumerikusadattpusokat,deeltteegynagyonfontos

    fogalomrlbeszlnk:

    Egyszmtgpprogramlnyegtazadatmanipulcikkpezik.Ezekazadatoknagyonklnbzeklehetnek(lnyegben minden, ami digitalizlhat7), de a szmtgp memrijban vgleg binris szmok vges sorozatvegyszersdnek.

    Ahhoz,hogyaprogram(brmilyennyelvenislegyenmegrva)hozztudjonfrniazadatokhoz,nagyszmklnbztpusvltozthasznl.

    Egyprogramozsinyelvbenegyvltozmajdnemmindegymilyenvltoznvkntjelenikmeg,aszmtgpszmraegymemriacmetjellhivatkozsrlvansz,vagyisegymeghatrozotthelyrlaRAMban.

    Ezen a helyen egy jl meghatrozott rtk van trolva. Ez az igazi adat, ami binris szmok sorozataformjbanvantrolva,deamiazalkalmazottprogramozsinyelvszembennemfelttlenlegyszm.Szintebrmilyenobjektumlehet,amielhelyezhetaszmtgpmemrijban,mintpldul:egyegsz,egyvals,egykomplexszm,egyvektor,egykarakterlnc,egytblzat,egyfggvny,stb.

    Aprogramozsinyelvklnbzvltoztpusokat(egsz,vals,karakterlnc,lista,stb.)hasznlaklnbzlehetsges tartalmak egymstl trtn megklnbztetsre. A kvetkez oldalakon ezeket fogomelmagyarzni.

    7 Igaznmitdigitalizlhatunk?Ezegyrendkvl fontoskrds,amitazltalnosszmtstechnikakurzusonkellmegtrgyalnunk.

    GrardSwinnen:TanuljunkmegprogramozniPythonnyelven 22.

    Forrs: http://www.doksi.hu

  • 2.3 VltozneveksfoglaltszavakAvltozneveketmivlasztjukmegmeglehetsenszabadon.Ennekellenretrekednnkkell,

    hogyjlvlasszukmegket.Elnybenkellrszesteniazelgrvid,amennyirelehetsgesexplicitneveket, amik vilgosan kifejezik, hogy mit tartalmaz az illet vltoz. Pldul: az olyanvltoznevek,mintmagassg,magas,vagymagjobbakamagassgkifejezsre,mintx.

    Egyjprogramoznakgyelnikellarra,hogyazutastssoraitknnylegyenolvasni.

    EzenkvlaPythonbanavltoznevekneknhnyegyszerszablynakkellelegettenni:

    Avltoznvaz(a z , A Z) betksa(0 9)szmoksorozata, aminekmindigbetvelkellkezddni.

    Csakazkezetnlklibetkamegengedettek.Aszkzk,aspeciliskarakterek,mintpl.:$,#,@,stb.nemhasznlhatk.Kivtela_(alhzs).

    Akissnagybetkklnbznekszmtanak.Figyelem:Jozsef,jozsef,JOZSEFklnbzvltozk.gyeljnkerre!

    Vljonszoksunkk,hogyavltozneveketkisbetkkelrjuk(akezdbettis8).Egyegyszerkonvencirlvansz, deeztszleskrbenbetartjk.Nagybetketcsakmagnakasznakabelsejbenhasznljunk,hogyfokozzukazolvashatsgot,mintpldul:tartalomJegyzk.

    Tovbbi szably: nemhasznlhat vltoznvknt az albb felsorolt 28 foglalt sz (ezeket a Pythonhasznlja):

    and assert break class continue defdel elif else except exec finallyfor from global if import inis lambda not or pass printraise return try while yield

    8 Anagybetkkelkezddszavaknincsenektiltva,deezeketinkbbazosztlyokat(classokat)jellvltozknaktartjukfenn(azosztlyfogalmtksbbfogomelmagyarzni).

    23. GrardSwinnen:TanuljunkmegprogramozniPythonnyelven

    Forrs: http://www.doksi.hu

  • 2.4 Hozzrendels(vagyrtkads)Mostmrtudjuk,hogyhogyanvlasszukmegjlegyvltoznakanevt.Lssukmost,hogyandefinilhatunk

    egyvltoztshogyanrendelhetnkhozzrtket.Avltozhozvalrtkhozzrendelsvagyrtkadskifejezsekegyenrtkek.Egyolyanmveletetjellnek,amelykapcsolatotteremtavltoznvsavltozrtke(tartalma)kztt.

    APythonbanszmosmsnyelvhezhasonlanahozzrendelsmvelettazegyenlsgjelreprezentlja9:>>> n = 7 # n-nek a 7-et adjuk rtkl >>> msg = "Mi jsg ?" # A "Mi jsg ?" rtket adjuk msg-nek>>> pi = 3.14159 # pi nev vltozhoz hozzrendeljk az rtkt

    Afentipythonosrtkadmveletekklasszikusak.Miutnezeketvgrehajtottuk,aszmtgpmemrijnakklnbzhelyein:

    hromvltoznvvan:n,msgspi hrombytesorozatvan,melyekbena7egszszm,aMijsg?karakterlncsa3,14159valsszmvan

    kdolva.

    A fenti hrom rtkad utasts mindegyiknek a hatsa tbb mvelet vgrehajtsa a szmtgpmemrijban::

    vltoznvltrehozsasbejegyzseamemriba;

    vltoznvhezjlmeghatrozotttpusrendelse(eztakvetkezoldalonfogommagyarzni);

    egyspecilisrtkltrehozsastrolsaamemriban;

    kapcsolat ltestse a vltoznv s a megfelel rtk memriahelye kztt (mutatk bels rendszeresegtsgvel)

    Azelmondottakatazalbbillapotdiagrammalszemlltethetjk:

    n msg pi 7 Mijsg? 3.14159

    Ahromvltoznvamemriaegyspecilisrszbenaz.n.nvtrben(namespace)trolthivatkozs,mga megfelel rtkek msutt, egymstl gyakran tvol helyezkednek el. A ksbbiekben alkalmunk leszpontostanieztakoncepcit.

    9 Fontos, hogymegrtsk,hogyitt semmifle egyenlsgrl sincs sz. Egymsszimbolizmustis vlaszthattunkvolna,mintplduln

  • 2.5 VltozrtknekakirsaAfentigyakorlatkvetkezmnyeknthromvltoznkvan:n,msg,pi

    Kt lehetsgvanazrtkkkpernyretrtn kiratsra. Azels: abillentyzetenberjukavltoznevt,majd.APythonvlaszulkirjaamegfelelrtket:>>> n7>>> msg"Mi jsg ?">>> pi3.14159

    Az interpreter egy msodlagos funkcionalitsrl van itt sz, aminek az a clja, hogy megknnytse azletnket,amikoregyszerparancssorgyakorlatokatvgznk.Programbanmindigaprintutaststhasznljuk:>>> print msgMi jsg ?

    Vegykszreaktflekiratsimddalkapotteredmnykzttiaprklnbsget.Aprintutastsszigorancsakavltozrtktrjaki,gyahogyanazkdolvavolt,mgamsikmdszer(az,amelyikcsakavltoznvbersblll)azidzjeleketis(azrt,hogyemlkeztessenavltoztpusra:erremgvisszafogoktrni).

    2.6 AvltozktpusadsaA Pythonban nem szksges a vltozk hasznlata eltt a tpusuk definilsa rdekben specilis

    programsorokatrni.Elghahozzrendelnkegyrtketegyvltoznvhez.APythonavltoztautomatikusan azzalatpussalhozzaltre,amialegjobbanmegfelelazrtknek.Azelzgyakorlatbanpldulazn,msgspi vltozk mindegyikt automatikusan hozta ltre klnbz tpusokkal (rendre egsz szm,karakterlnc,lebegpontosszmtpusokkal).

    EzegyrdekessajtossgaaPythonnak,amialapjnaprogramnyelveknekahhozacsoportjhozsoroljuk,amelyikheza Lisp, Scheme snhnymsnyelvtartozik.APython dinamikus tpusads nyelv,szembenastatikus tpusads nyelvekkel mint amilyenek a C++ vagy a Java. Ezekben a nyelvekben elszr mindigspecilis utastsokkal deklarlni (definilni) kell a vltozk nevt s tpust s csak ezutn lehet tartalmatrendelnihozzjuk,aminektermszetesenkompatibilisnekkelllenniadeklarlttpussal.

    Astatikustpusadstacompilltnyelvekrszestikelnyben,mertazlehetvtesziafordts(aminekakdjaegybefagyottbinriskd)optimalizlst.

    A dinamikus tpusads a magasszint logikai konstrukcik (metaprogramozs, reflexivits)lerst teszi knnyebb, klnsen az objektum orientlt programozs (polimorfizmus)vonatkozsban. Egyszersti az olyan adatstruktrk hasznlatt, mint amilyenek a listk s asztrak(dictionary).

    25. GrardSwinnen:TanuljunkmegprogramozniPythonnyelven

    Forrs: http://www.doksi.hu

  • 2.7 TbbszrsrtkadsAPythonbanegyszerretbbvltozhozrendelhetnkrtkeket.Pldul:>>> x = y = 7>>> x7>>> y7

    Egyetlenopertorsegtsgvelprhuzamosanisvgezhetnkrtkadst:>>> a, b = 4, 8.33>>> a4>>> b8.33

    Ebbenapldbanazasbegyidejlegveszifela4s8.33rtkeket.Figyelem:a tizedesjegyeket tizedesponttal vlasztjuk el az egszrsztl, ahogyazazangol

    nyelvterleten szoksos. A vesszt a klnbz elemek (argumentumok, stb.) elvlasztsra hasznljuk ahogyan a pldban lttuk, mindmaguknak a vltozknak, mind pedig a hozzjuk rendeltrtkeknekazelvlasztsra.

    (2) Gyakorlatok

    2.1. rja le a lehet legrthetbben s teljesebben, hogymi trtnik az albbi plda hromsorban:>>> szelesseg = 20>>> magassag= 5 * 9.3>>> szelesseg * magassag930

    2.2. Rendeljehozza3,5,7rtkeketaza,b,cvltozkhoz.Vgezzeelazab/cmveletet.Matematikailagkorrekteazeredmny?Hanemaz,hogyankelleljrnihogyazlegyen?

    GrardSwinnen:TanuljunkmegprogramozniPythonnyelven 26.

    Forrs: http://www.doksi.hu

  • 2.8 OpertorokskifejezsekAzrtkeketsarjukhivatkozvltozkatopertoroksegtsgvelkifejezsekkkombinljuk.Plda:

    a, b = 7.3, 12y = 3*a + b/5

    Ebbenapldbanazasbvltozkhozelszrhozzrendeljka7.3s12rtkeket.APython,ahogyaztazelzekbenmagyarztam,automatikusanavalstpustrendeliazasazegsztpustabvltozhoz.

    Apldamsodiksorbanazj y vltozhozrendeljkhozz egykifejezseredmnyt, amia* , +s /opertorokatkombinljaaza,b,3s5operandusokkal.Azopertorokspecilisszimblumok,amiketolyanegyszermatematikaimveletekreprezentlsrahasznlunk,mintazsszeadsvagyaszorzs.Azoperandusokazrtkek,amiketazopertoroksegtsgvelkombinlunk.

    APythonmindenegyeskifejezstkirtkel,amitberunkneki,legyenazakrmilyenbonyolult sennekakirtkelsnekazeredmnyemindigegyrtk.Ehhezazrtkhezautomatikusanhozzrendelegytpust,amifggattl,hogymivanakifejezsben.Afentipldbanyvalstpuslesz,mertakirtkeltkifejezslegalbbegyvalsvltozttartalmaz.

    NemcsakangymatematikaialapmveletopertoratartozikaPythonopertoraihoz.Hozzjukkellvenniahatvnyozsopertort**,nhnylogikaiopertort,akarakterlncokonmkdopertorokat,azazonossgotstartalmazsttesztelopertorokat,stb.Minderrlaksbbiekbenjrafogokbeszlni.

    Rendelkezsnkrellamoduloopertor,amita%szimblumjell.Ezazopertoregyszmnakegymsikszmmalvalegszosztsblszrmazmaradktadjameg.Prbljukki:>>> 10 % 3 (jegyezzk meg, hogy mi trtnik !)>>> 10 % 5

    Aksbbiekbennagyonhasznoslesz,amikoraztvizsgljuk,hogyegyaszmoszthateegybszmmal.Elgaztmegnzni,hogyaza%beredmnyeegyenlenullval.Gyakorlat:

    2.3. Ellenrizzeakvetkezutastssorokat.rjaleafzetbe,hogymitrtnik:>>>r,pi=12,3.14159>>>s=pi*r**2>>>prints>>>printtype(r),type(pi),type(s)

    >>>Vlemnyeszerintmiahasznaatype()fggvnynek?(Megjegyzs:afggvnyeketaksbbiekbenrszletesenbefogommutatni).

    27. GrardSwinnen:TanuljunkmegprogramozniPythonnyelven

    Forrs: http://www.doksi.hu

  • 2.9 AmveletekprioritsaHaegykifejezsbenegynl tbbopertor van, akkoramveletekvgrehajtsnaksorrendjea prioritsi

    szablyoktlfgg.APythonbanaprioritsiszablyokugyanazok,mintamiketmatematikbltanultunk:

    zrjelek.Ezekalegmagasabbprioritsak.Azttesziklehetv,hogyazltalunkkvntsorrendbentrtnjenegykifejezskirtkelse.gy2*(31)=4,s(1+1)**(52)=8.

    hatvnyozs.Ahatvnyokkiszmolsraatbbimveletelttkerlsor.gy2**1+1=3(snem4),s3*1**10=3(snem59049!).

    szorzssoszts,azonosprioritssal.Ezeketazsszeadsskivonselttrtkeliki.gy2*31=5(snem4), s 2/31=1(Emlkezznkvissza,hogyalaprtelmezsbenaPythonegszosztstvgez.)

    Haktopertorazonospriorits,akkoravgrehajtsukbalrljobbratrtnik.gyaz 59*100/60kifejezsbenelszraszorzst,majdeztkveten,az 5900/60osztstvgziel,aminekazeredmnyet98.Haelszrazosztstvgeznel,akkorazeredmny59lenne(emlkezznkr,hogyittegyegszosztsrllennesz).

    GrardSwinnen:TanuljunkmegprogramozniPythonnyelven 28.

    Forrs: http://www.doksi.hu

  • 2.10 KompozciEddig egy programozsi nyelv klnbz elemeit tanulmnyoztuk : a vltozkat, a kifejezseket s az

    utastsokat,deaztnemvizsgltuk,hogyhogyanlehetezeketegymssalkombinlni.

    Egy magasszint programozsi nyelv egyik erssge, hogy klnbz elemek kombinlsval sszetettutastsokathozhatunkltre.gypldul,hatudjukhogyanadunksszektszmotshogyanratunkkiegyrtket,akkoraktutaststegyetlenutastsskombinlhatjuk:>>> print 17 + 3>>> 20

    Ez a nyilvnvalnak tn tulajdonsg fogja lehetv tenni az sszetett algoritmusok vilgos s tmrprogramozst.Plda:>>> h, m, s = 15, 27, 34>>> print "az jfl ta eltelt msodpercek szma = ", h*3600 + m*60 + s

    Figyelem:vanegymegszortsarranzve,hogymiketlehetkombinlni:

    Amitegykifejezsbenazegyenlsgjelbaloldalnhelyeznkel,annakmindigegyvltoznakkelllenni,nempedigegykifejezsnek.Ezabblatnyblfakad,hogyazegyenlsgjelneknemugyanazajelentse,mintamatematikban.Mintmremltettem,egyrtkadsimveletjelrlvansz(egybizonyostartalmattesznkegyvltozba),nempedigegyegyenlsgjelrl.Azegyenlsgjelet(pldulegyfelttelellenrzsben)egykicsitksbbfogombemutatni.

    gypldulazm+1=butastsszablytalan.

    A matematikban viszont elfogadhatatlan a = a + 1 et rni, pedig ez az rsmd igen gyakori aprogramozsban. Az a = a + 1 utasts az a vltoz rtknek eggyel trtn megnvelst (msknt:incrementlst)jelenti.

    Hamarosan alkalmunk lesz visszatrni erre. Eltte azonban egy msik nagyon fontos fogalmat kelltisztznunk.

    29. GrardSwinnen:TanuljunkmegprogramozniPythonnyelven

    Forrs: http://www.doksi.hu

  • 3.Fejezet: AzutastsfolyamvezrlseAz els fejezetben lttuk, hogy az elemz programoz alaptevkenysge a problmamegolds. Egy

    informatikaiproblmamegoldshozatevkenysgeketmindigbizonyossorrendbenkellvgezni.Amegfelelstruktrbanssorrendbenlerttevkenysgeketalgoritmusnaknevezzk.

    A tevkenysgek vgrehajtsi sorrendjt meghatroz utastscsoportok a vezrl struktrk. A modernprogramozsbancsakhromvanbellk:aszekvenciasakivlaszts,melyeketebbenafejezetbenrokle,sakvetkezfejezetbentrgyaltismtls.

    3.1 Utastsszekvencia10

    Hanemmondunkmst,akkoregyprogramutastsaiegymsutnabbanasorrendbenlesznek vgrehajtva,ahogyanascriptbenlevoltakrva.

    Aztaztvonalat,amitaPythonaprogramvgrehajtssornkvet utastsfolyamnaknevezzk.Azeztmdostutastsokazutastsfolyamvezrlutastsok.

    NormlisanaPythonazutastsokatazelstlazutolsigvgrehajtja,kivvehaegyfelttelesutastssaltallkozik,mintamilyenazifutasts,amitezutnfogoklerni(aprogramhurkokkapcsnfogunkveletallkozni).Egyilyenutastslehetvfogjatenniaprogramnak,hogyakrlmnyektlfggenmsvgrehajtsiutakatkvessen.

    3.2 KivlasztsvagyfelttelesvgrehajtsHaigaznhasznosprogramokatszeretnnkrni,akkorolyantechnikkravanszksg,amiklehetvteszika

    programvgrehajts klnbz irnyokba trtn tirnytst attl fggen, hogy milyen felttelekkeltallkozunk.Ehhezolyanutastsokkellenek,amikkeltesztelnilehetegybizonyosfeltteltskvetkezmnykntmdostanilehetaprogramviselkedst.

    Az if utastsalegegyszerbbezekkzlafelttelesutastsokkzl.Ksrlet kppenrjukbeaPythoneditorbaakvetkezktsort:>>> a = 150>>> if (a > 100):...

    Azelsutastsazavltozhozhozzrendelia150rtket.Eddigsemmijnincs.Amikorviszontberjukamsodiksort, azttapasztaljuk, hogyaPythonjfajta mdonviselkedik. Hanemfelejtettk le a : karaktert a sor vgrl, akkor megllapthatjuk, hogy a fpromptot (>>>) most egymsodlagosprompthelyettesti,amihrompontblll11.

    Haazeditorunknemteszimegautomatikusan,akkormosttabullnunkkell(vagy4betkztkellrnunk)mielttberjukakvetkezsort,gyhogyazazelzsorhozkppestbeljebblegyen(vagyisbelegyenhzva).Kpernynknakvetkezknekkelllenni:

    10 Jelenesetbenaszekvenciakifejezsegymstkvetutastsoksorozattjelli.EbbenaknyvbeneztazelnevezstegyPythonfogalomszmratartjukfnn,amimagbafoglaljaa karakterkncokat, tuplekets listkat (lsdaksbbiekben).

    11 APythonwindowsoseditornakbizonyosverziibanamsodlagospromptnemjelenikmeg.

    GrardSwinnen:TanuljunkmegprogramozniPythonnyelven 30.

    Forrs: http://www.doksi.hu

  • >>> a = 150>>> if (a > 100):... print "a meghaladja a szzat"...

    Nyomjunkmgegyt.Aprogramvgrehajtdiksakvetkeztkapjuk:a meghaladja a szzat

    Kezdjkjraagyakorlatot,demosta=20szalazelssorban:mostaPythonsemmitsemrki.

    Aztakifejezst,amitzrjelekkztettnk,mostantlfogvafelttelneknevezzk.Azifennekafelttelnekatesztelstteszilehetv.Haafeltteligaz,akkora:utnbeljebbigaztottutaststhajtjavgreaPython.Haafelttelhamis,semmisemtrtnik.Jegyezzkmeg,hogyazittalkalmazottzrjelekopcionlisakaPythonban.Ezeketazolvashatsgjavtsardekbenalkalmaztam.Msnyelvekbenktelezklehetnek.

    Kezdjkjra,rjunkmgktsortazelzekhez,gyahogyanaztalbbltjuk.gyeljnkr,hogyanegyediksor bal szlen kezddik (nincs behzs), mg az tdik megint be van hzva (a harmadik sorral azonosmrtkben):>>> a = 20>>> if (a > 100):... print "a meghaladja a szzat"... else:... print "a nem haladja meg a szzat"...

    Nyomjunkmgegyszert.Aprogrammgegyszervgrehajtdiksezalkalommalkirja:a nem haladja meg a szzat

    Azolvas mrbizonyrakitalltaaz else (klnben)utastsegyalternatvvgrehajtsprogramozstteszilehetv, gyaprogramoznakkt lehetsgkztt kellvlasztani. Az elif (azelseifsszevonsa)utaststhasznlvamgjobbmegoldsttudunkadni:>>> a = 0>>> if a > 0 :... print "a pozitv"... elif a < 0 :... print "a negatv"... else:... print "a nulla"...

    31. GrardSwinnen:TanuljunkmegprogramozniPythonnyelven

    Forrs: http://www.doksi.hu

  • 3.3 RelcisopertorokAzifutastsutnkirtkeltfelttelakvetkezrelcisopertorokattartalmazhatja:

    x == y # x egyenl y -nalx != y # x nem egyenl y -nalx > y # x nagyobb, mint yx < y # x kisebb, mint yx >= y # x nagyobb, vagy egyenl mint yx >> a = 7>>> if (a % 2 == 0):... print "a pros"... print "mert 2-vel val osztsa esetn a maradk nulla"... else:... print "a pratlan"...

    Jljegyezzkmeg,hogyktrtkegyenlsgtaduplaegyenlsgjelopertorralteszteljk,nempedigazegyszeres egyenlsgjellel12. (Azegyszeres egyenlsgjel egy rtkad opertor.) Ugyanezt a szimbolizmustfogjuktallniaC++bansaJavaban).

    3.4 sszetettutastsokUtastsblokkokAz if utastssal hasznlt konstrukci az els sszetett utastsunk. Hamarosan msflkkel is fogunk

    tallkozni.APythonbanmindensszetettutastsnakmindigugyanazaszerkezete:egyfejsor,amikettspontravgzdik,ezalattkvetkezikegyvagytbbutasts,amiafejsoralattbevanhzva.Plda:Fejsor: a blokk els utastsa ... ...

    ... ...

    a blokk utols utastsa

    Haafejsoralatttbbbehzottutastsvan,akkormindegyiknekpontosanugyanannyirakellbehzvalenni(pldul 4 karakterrel kell beljebb lenni). Ezek a behzott utastsok alkotjk az utastsblokkot. Azutastsblokk: egy logikai egyttest kpez utastsok sorozata, ami csak a fejsorban megadott felttelekteljeslseesetnhajtdikvgre.Azelzbekezdspldjbanazifutaststtartalmazsoralattiktbehzottsoregylogikaiblokkotalkot:ezaktsorcsakakkorhajtdikvgre,haazifelteszteltfeltteligaz,vagyishaa2velvalosztsmaradkanulla.

    12 Emlkeztet:a%opertora modulo opertor:egyegszosztsmaradktszmolja.gypldul, a%2a2velvalosztsmaradktadja.

    GrardSwinnen:TanuljunkmegprogramozniPythonnyelven 32.

    Forrs: http://www.doksi.hu

  • 3.5 EgymsbagyazottutastsokKomplexdntsistruktrkltrehozshozegymsbagyazhattbbsszetettutasts.Plda:

    if torzs == "gerincesek": # 1 if osztaly == "eml sk": # 2 if rend == "ragadozk": # 3 if csalad == "macskaflk": # 4 print "ez egy macska lehet" # 5 print "ez minden esetre egy eml s" # 6 elif osztaly == 'madarak': # 7 print "ez egy kanri is lehet" # 8print"az llatok osztlyozsa sszetett" # 9

    Elemezzkapldt.Aprogramrszletcsakabbanazesetbenrjakiazezegymacskalehetet,haazelsngyfeltteligaz.

    Azezmindenesetreegyemlskirshozszksgesselgsges,hogyazelsktfeltteligazlegyen.Azutbbimondatot(6.sor)kiratutastsugyanazonabehzsiszintenvan,mintazifrend==''ragadozk''(3.sor).Aktsortehtugyanannakablokknakarsze,amiakkorhajtdikvgre,haaz1.s2.sorbanteszteltfelttelekigazak.

    Azeztalnegykanriszvegkirshozazszksges,hogyatrzsnevvltozagerincesekrtket,sazosztlynevvltozamadarakrtkettartalmazza.

    A9.sormondattmindenesetbenkirja,mivelugyanannakazutastsblokknakarsze,mintaz1.sor.

    3.6 APythonnhnyszintaktikaiszablyaAzelzekalapjnsszefoglalunknhnyszintaktikaiszablyt:

    3.6.1 AzutastsoksablokkokhatraitasortrsdefiniljaSzmosprogramozsinyelvbenmindensortspeciliskarakterrelkellbefejezni(gyakranpontosvesszvel).A

    Pythonbanasorvgejel13 jtszaeztaszerepet.(Aksbbiekbenmajdmegltjuk,hogyhogyanhghattezaszably,hogyegysszetettkifejezsttbbsorraterjessznkki.Egyutastssortkommenttelisbefejezhetnk.EgyPythonkommentmindiga#karakterrelkezddik.Amia#karaktersaLF(linefeed)karakterkzttvan,afordtfigyelmenkvlhagyja.

    Anyelvektbbsgbenazutastsblokkotspecilisjelekkelkellhatrolni(nhaabeginsendutastsokkal)AC++bansJavaban,pldul,azutastsblokkotkapcsoszrjelekkelkellhatrolni.Ezlehetvteszi,hogyaz utastsblokkokat egyms utn rjunk anlkl, hogy a behzsokkal s a sorugrsokkal foglalkoznnk.Azonbanezzavaros,nehezenolvashatprogramokrshozvezethet.Ezrtmindenprogramoznak,akiezeketanyelvekethasznljaazttancsolom,hogyalkalmazzkasorugrsokatsabehzsokatisablokkokjvizulishatrolsra.

    13 Ezakaraktersemakpernyn,semanyomtatottlistkonnemjelenikmeg.Ennekellenrejelenvansbizonyosesetekben problmkat okoz, mert nincs azonos mdon kdolva a klnbz opercis rendszerekben. Errlksbbfogokbeszlni,amikoraszvegfileokrltanulunk(116.oldal)

    33. GrardSwinnen:TanuljunkmegprogramozniPythonnyelven

    Forrs: http://www.doksi.hu

  • A Pythonban hasznlnunk kell a sorugrsokat s a behzsokat, viszont nem kell ms blokkhatrolszimblumokkal foglalkoznunk. Vgeredmnyben a Python olvashat kdok rsra s olyan j szoksokfelvtelreknyszertbennnket,amiketmegfogunkriznimsprogramozsinyelvekhasznlatasornis.

    3.6.2 sszetettutasts=Fej,kettspont,behzottutastsokblokkjaAkvetkezfejezettlkezdvesokszorleszalkalmunkazutastsblokkfogalmnakazelmlytsres

    gyakorlatokvgzsreebbenatrgykrben.

    Aszemkztismasszefoglaljaazelvet:

    Az utastsblokkok mindig egy jldefinilt utastst tartalmazfejsorhoz kapcsoldnak (if, elif, else, while, def, ...), ami kettspontravgzdik.

    Ablokkokatbehzs hatrolja: egyazonblokkmindensornakpontosanugyangykellbehzvalenni(vagyisugyanolyanszmbetkzzelkelljobbraeltolvalennik14).Abehzsraakrmennyiszkzthasznlhatunk, aprogramoktbbsgea4tbbszrseitalkalmazza.

    Jegyezzkmeg,hogyalegklsblokknak(1.blokk)abalmargnkelllenni(semmibesincsbegyazva).

    3.6.3 Aspaceeketsakommenteketrendszerintfigyelmenkvlhagyjaaz interpreterAsorelejn lv a behzsra szolgl szkzktl eltekintveazutastsokskifejezsekbelsejben

    elhelyezett szkzket majdnem mindig figyelmen kvl hagyjuk (kivve, ha ezek egy karakterlnc rsztkpezik).Ugyanezvonatkozikakommentekre:ezekmindiga#karakterrelkezddneksazaktulissorvgigtartanak.

    14Tabultorokkalisbehzhatunk,deakkornagyongyelnikellarra,hogyazokatkvetenugyanabbanablokkbanbehzsra ne hasznljunk hol szkzkeket, hol pedig tabultorokat. Mg ha az eredmny azonosnak is tnik akpernyn,aspaceeksatabultorokklnbzbinriskdak:aPythonezrtezeketasorokatgyfogjatekinteni,hogy klnbz kppen vannak behzva, igy klnbz blokkoknak a rszei. Ez nehezen debugolhat hibkateredmnyezhet.Kvetkezsknt a programozk tbbsge a tabullsokrl inkbb lemond. Ha egy ''intelligens'' szvegszerkesztthasznlunk,a''Tabulcihelyettestseszkzzel''opciaktivlsvalelkerlhetjkaproblmt.

    GrardSwinnen:TanuljunkmegprogramozniPythonnyelven 34.

    Forrs: http://www.doksi.hu

  • 4.Fejezet: Ismtldutastsok

    4.1 IsmteltrtkadsMg nem jeleztem explicit mdon: annyiszor rendelhetnk j rtket egy vltozhoz, ahnyszor csak

    akarunk.

    Azismteltrtkadsavltozrgirtktegyjrtkkelhelyettesti.>>> magassag = 320>>> print magassag320>>> magassag = 375>>> print magassag375

    Ezjrafelhvjaafigyelmnketarraatnyre,hogyazegyenlsgjeletaPythonbanrtkadsrahasznljukshogysemmiesetresemkellaztsszekeverniamatematikbanhasznltegyenlsgjellel.Csbtamagassag=320utaststegyenlsgrevonatkozlltskntinterpretlni,deaznemaz!

    Elszris,azegyenlsgkommutativ, mgazrtkadsnemaz.gyamatematikbanaz a=7s 7=arsaegyenrtk,mgazolyanprogramutasts,minta375=magassagilleglis.

    Msodszor, az egyenlsg lland, mg az rtkadst helyettesteni lehet, amint azt lttuk. Ha amatematikbanegylevezetselejnaz a=b egyenlsgetlltjuk,akkoraz a azelkvetkez egszokfejtsalattllandmarad.Aprogramozsbanazelsrtkadsktvltozrtkeitegyenlvtehetisegykvetkezutastsazutnazegyikvagyamsikrtktmegvltoztathatja.Plda:

    >>> a = 5>>> b = a # a s b egyenl rtkeket tartalmaz>>> b = 2 # a s b most klnbz ek

    Megismtlem,aPythonlehetvteszi,hogytbbvltoznakegyidbenadjunkrtket:>>> a, b, c, d = 3, 4, 5, 7

    APythonnakezatulajdonsgasokkalrdekesebb,mintamilyennekelspillantsratnik.Tegykfelpldul,hogymostmegszeretnnkvltoztatniazascvltozkrtkeit.(Pillanatnyilagartke3,scrtke5.Aztszeretnnk,hogyezfordtvalegyen.)Mittegynk?

    (4) Gyakorlat

    4.1. rjamegaszksgesazutastssorokat,amikakvnteredmnytadjk.

    Azgyakorlatsornazolvasbiztosantalltegymegoldsimdszert,satanravalsznlegmegfogjarkrni, hogykommentlja aztazosztlyban.Mivel egymegszokott mveletrl vansz, ezrt aprogramozsinyelvek gyakran egy rvidtst knlnak a vgrehajtsra (pldul specilis utastsokat, mint a Basic nyelvSWAPutastsa). APythonban, a tbbszrsrtkads lehetv teszi ennekacserneka rendkvl elegnsprogramozst:>>> a, b = b, a

    (Termszetesenugyanabbanazutastsbanmsvltozkrtktisfeltudnnkegyidejlegcserlni).

    35. GrardSwinnen:TanuljunkmegprogramozniPythonnyelven

    Forrs: http://www.doksi.hu

  • 4.2 CiklikusismtldsekawhileutastsAzegyikdolog,amitaszmtgpekalegjobbancsinlnak,azazazonosfeladatokhibanlkliismtlse.Az

    ismtld feladatok programozsra lteznek eljrsok. Az egyik legalapvetbbel fogjuk kezdeni: a whileutastssalltrehozottciklussal.

    rjukbeakvetkezutastst:

    >>> a = 0>>> while (a < 7): # (ne felejtsk el a kett spontot !)... a = a + 1 # (ne felejtsk el a behzst !)... print a

    Nyomjunkmgegyszert.Mitrtnik?

    Mielttelolvassaakvetkezoldalmagyarzatt,sznjonregykisidtsrjaleafzetbeeztazutastssorozatot.rjaleakapotteredmnytissprbljamegalehetlegrszletesebbenmegmagyarzni.

    MagyarzatokA while jelentse: amg. Ez azutasts jelzi a Pythonnak, hogy az utna kvetkez utastsblokkot

    mindaddigfolyamatosankellismtelnie,amgazavltoztartalma7nlkisebb.

    Mintazelzfejezetbentrgyaltifutasts,awhileutastsisegysszetettutaststkezdmeg.Akettspontasorvgnamegismtlendutastsblokkotvezetibe,aminekktelezenbeljebbigaztvakelllenni.Ahogyanaztazelz fejezetbenmegtanultuk, egyazonblokkvalamennyiutastsnakazonosmrtkbenkell behzvalenni(vagyisugyanannyiszkzzelkelljobbraeltolvalennik).

    Megkonstrultuk teht els programhurkunkat, ami bizonyos szm alkalommal megismtli a behzottutastsokblokkjt.Ezakvetkezkppenmkdik:

    AwhileutastsesetnaPythonazrjelbenlevfelttelkirtkelsvelkezdi.(Azrjelopcionlis.Csakamagyarzatvilgossttelerdekbenhasznlom)

    Haafelttelhamis,akkorakvetkezblokkotfigyelmenkvlhagyjasaprogramvgrehajtsbefejezdik15. Haafeltteligaz,akkoraPythonaciklustestetalkotteljesutastsblokkotvgrehajtja,vagyis:

    aza=a+1utastst,ami1gyelincrementljaazavltoztartalmt(ami azt jelenti, hogy az a vltozhoz hozzrendelnk egy j rtket, ami egyenl az a 1gyelmegnveltelzrtkvel).

    aprintutastst,amikiratjaazavltozaktulisrtkt amikorezaktutastsvgrehajtdott,akkortanivoltunkazelsiterrcinak,saprogramhurok,vagyisa

    vgrehajtsvisszatrawhileutaststtartalmazsorra.Azotttallhatfeltteltjrakirtkelisgytovbb.

    Hapldnkban,aza

  • Megjegyzsek: A felttelben kirtkelt vltoznak a kirtkelst megelzen lteznie kell. (Egy rtknek kell mr

    hozzrendelvelenni.) Haafeltteleredetileghamis,akkoraciklustestsohasemfogvgrehajtdni. Haafelttelmindigigazmarad,akkoraciklustestvgrehajtsavgnlklismtldik(delegalbbisaddig,

    amgaPythonmagamkdik).gyelnikellr,hogyaciklustestlegalbbegyolyanutaststtartalmazzon,amia whilelalkirtkeltfelttelbenmegvltoztatjaegybeavatkozvltozrtktgy,hogyezafelttelhamisstudjonvlnisaciklusbefejezdjn.

    Vgtelencikluspldja(kerlend):>>> n = 3>>> while n < 5:... print "hello !"

    37. GrardSwinnen:TanuljunkmegprogramozniPythonnyelven

    Forrs: http://www.doksi.hu

  • 4.3 TblzatksztsKezdjkjraazelsgyakorlattal,deazalbbikismdostssal:

    >>> a = 0>>> while a < 12:... a = a +1... print a , a**2 , a**3

    Az1tl12igterjedszmokngyzetnekskbneklistjtkellmegkapnunk.Jegyezzkmeg,hogyaprintutastslehetvteszi,hogyugyanabbaasorbatbbkifejezstrassunkki,egyiketamsikutn:elgvesszvelelvlasztaniket.APythonautomatikusanbeszregyszkztakirtelemekkz.

    4.4 EgymatematikaisormegalkotsaAzalbbikisprogramaFibonaccisorelstzelemtratjaki.Egyolyanszmsorrlvansz,amelynek

    minden tagja egyenl az t megelz kt tag sszegvel. Elemezzkezt a (tbbszrs rtkadst helyesenalkalmaz)programot.rjuklealehetlegjobbanazutastsokszerept.>>> a, b, c = 1, 1, 1>>> while c < 11 :... print b,... a, b, c = b, a+b, c+1

    Amikorelindtjukaprogramot,akvetkeztkapjuk:1 2 3 5 8 13 21 34 55 89

    AFibonaccisortagjaiugyanabbaasorbavannakkirva.Eztannakavessznekksznhetjk,amitaprintutaststtartalmazsorvgrertunk.Hatrljkavesszt,akkoraszmokegymsallesznekrva.

    Azolvasnagyongyakranfogaprogramjaibanolyanciklusokatrni,mintamilyeneketittelemznk.Fontosdologrl van sz, amit tkletesen kell tudni kezelni. Legyen benne biztos, a gyakorlatok segtsgvelfokozatosanelfogjutniodig.

    Amikoregyilyentermszetproblmtvizsglunk,termszetesenmegkellnznnkazutastssorokat,defkntaciklusbanrintettklnbzvltozkegymstkvetllapotaitkellelemeznnk.Ezkorntsemmindigegyszer. Hogysegtsekeztvilgosabb tenni, vegykafradsgotsrajzoljunkegy, azalbbihozhasonl,llapottbltaFibonaccisorprogramunknak:

    Vltozk a b cKezdrtkek 1 1 1Aziterrcisornegymsutnfelvettrtkek

    1 2 22 3 33 5 45 8 5... ... ...

    Helyettestkifejezsek

    b a+b c+1

    Egyilyentblzatbankzzelvgezzkelaszmtgpmunkjt,sorrlsorramegadvaazokatazrtkeket,amiketazegyesvltozkazegymst kvet iterrcikbanfl fognakvenni.Azzalkezdjk,hogya tblzattetejrefelrjukazrintett vltozknevt. Akvetkez sorbaezenvltozkkezd rtkeikerlnek(azokaz

    GrardSwinnen:TanuljunkmegprogramozniPythonnyelven 38.

    Forrs: http://www.doksi.hu

  • rtkek, amikkel a ciklus indulsa eltt rendelkeztek). Vgl legalulra azok a kifejezsek kerlnek, amiketmindenegyesciklusbanazegyesvltozkllapotnakmdostsrahasznltunk.

    Kitltjkazelsiterrciknakmegfelelnhnysort.Egysorrtkeinekameghatrozshozelgazelzsorrtkeit,sazegyesoszlopokaljntallhathelyettestkifejezstfelhasznlni.gyellenrizzk,hogyamitkapunkazakeresetteredmnye.Hanemezahelyzet,akkormshelyettestkifejezseketkellkiprblni.

    Gyakorlatok:4.2. rjonegyprogramot,amikiratjaa7esszorztblaels20tagjt.

    4.3. rjonegyprogramot,amieurbankifejezettpzsszegeketkanadaidollrbavlttsazeredmnyt egytblzatbarjaki. Atblzatbanapzsszegekgeometriai haladvnyszerintnvekedjenekgy,mintazalbbipldban:1euro=1.65dollar2euro=3.30dollar4euro=6.60dollar8euro=13.20dollar

    stb.(16384euronlkellmegllni)

    4.4. rjonegyprogramot,amikiregy12szmbl ll sorozatot, aminekmindentagjavagyegyenlazelztaggal,vagyannakhromszorosa.

    4.5 Azelsscriptek,avagy:Hogyanrizzkmegprogramjainkat?EddigaPythontmindiginteraktvmdbanhasznltuk(vagyisazutastsokatmindenalkalommalkzvetlenl

    azinterpreterbertukbeanlkl,hogyazokatksbbegyfilebamentettkvolna).Ezlehetsgetadottarra,hogykzvetlen ksrletezssel nagyon gyorsan megtanuljuk a nyelv alapjait. Ez az eljrs egy nagyknyelmetlensggel jr: mindenutastssorozat, amit bertunkhelyrehozhatatlanuleltnikamikor lezrjukazinterpretert.Mieltttovbbhaladnnkmegtanuljukprogramjainkmerevlemezenvagyfloppynlvfilebavalmentst,hogyegymstkvetfzisokbanttudjukketdolgozni,msgpekrettudjukketvinni,stb.

    Ehhezmostantlfogvavalamilyenszvegszerkesztvelfogjukazutastssorozatainkatszerkeszteni(pldulLinuxalattJoeval,Nedittel,Katetel,...MSDOSalattEdittel,...WindowsalattWordpaddel,vagymgjobbegyolyanfejlesztkrnyezetbeliszvegszerkeszt,mintazIDLEvagyaPythonWin).Tehtrunkegyscriptet,amitaztnelmenthetnk,mdosthatunk,msolhatunk,stb.,mintbrmilyenmsszveget,amitaszmtgppelkezelnk16.

    16 Szvegszerkeszttazzalafelttellelhasznlhatnnk,hogyamentsttisztaszvegknt(plaintext)vgeznnk(laptrdelsi tageknlkl). Kvnatosabbazonbanegyvaldi inteligensANSIszvegszerkesztt hasznlni,mintamilyenaneditvagyazIDLE.EzekaPythonszintaxisnakmegfelelensznezikaforrsszveget,amisegtiaszintaxishibkelkerlst.AzIDLEben:File Newwindow(vagyCTRLN)valmegnyitunkegyjablakot, amibeascriptnketfogjukrni.Avgrehajtshozascriptmentseutn:Edit Runscript(vagyCTRLF5).

    39. GrardSwinnen:TanuljunkmegprogramozniPythonnyelven

    Forrs: http://www.doksi.hu

  • AzalbbibraaNedithasznlattillusztrljaGnome(Linux)alatt:

    Utna,amikorszeretnnkaprogramunkattesztelni,elgleszelindtaniaPythoninterpretert,argumentumkntascriptettartalmazfilenevtmegadva.Pldul,haazEnScriptemnevfilebamentettnkelegyscriptet,akkorelgleszakvetkezparancsotberniegyterminlablakba,hogyascriptvgrehajtdjon:python EnScriptem

    Hogymgjobbancsinljuk,adjunkafilenakolyannevet,ami.pykiterjesztsrevgzdik.

    Hatiszteletbentartjukeztakonvencit,akkor(Windows,KDE,Gnome,alatt)afilemanagerben(ExploreraWindows vagy Konqueror a KDE alatt) a filenvre vagy a megfelel ikonra kattintva elindthatjuk a scriptvgrehajtst.Ezekagrafikusfilemanagerektudjk,hogymindenalkalommal,amikorafelhasznlmegprblmegnyitniegy.pykiterjesztsfilet,elkellindtskaPythoninterpretert.(Eztermszetesenaztfelttelezi,hogyezek megfelelen voltak konfigurlva.) Ugyanez a konvenci ezen kvl lehetv teszi az intelligensszvegszerkesztknekaPythonscriptekautomatikusfelismerstsaszintaktikussznezsalkalmazst.

    EgyPythonscriptolyanutastsszekvencikatfogtartalmazni,mintamilyenekkeleddigksrleteztnkMivelezeketazutastssorokatarrasznjuk,hogymegrizzksksbbakrmagunk,akrmsokjraolvassk,ezrtmelegen ajnlott, hogy scriptjeinket a lehet legjobban szvegezzk meg, bsgesen kommentezzk. Aprogramozs f nehzsge a korrekt algoritmusok elksztse. Ahhoz, hogy az algoritmusokat j felttelekmellett tudjuk ellenrizni, javtani, mdostani, stb., lnyeges, hogy szerzjk a lehet legteljesebben slegvilgosabbanrjaleket.Ezeknekalersoknakalegjobbhelyemagaascript(gyazoknemveszhetnekel).

    Egy j programoz mindig gyel arra, hogysok kommentet szrjon be a scriptjeibe. Ezzel az eljrssalnemcsakazesetlegesmsolvasknakknnytimegazalgoritmusaiolvasst,demagtisknyszertiarra,hogymgvilgosabbgondolatailegyenek.

    Egyscriptbeszintebrhovabrmilyenkommentetbeszrhatunk.Elgeljktenniegy#karaktert.AmikoraPython interpreter rtall erre a karakterre, ami utnakvetkezik azt figyelmen kivlhagyja az aktulis sorvgig.

    rtskmeg,hogyfontos,hogyaprogramozs menetesorn rjunkkommenteket.Nevrjukmegascriptbefejezst,hogymajdutnarjukhozzazokat.Azolvaslassankntrfogjnni,hogyaprogramozrendkvlsokidttltasajtkdjajraolvassval(azrt,hogymdostsa,hibt

    keressenbenne,stb.)Eztazjraolvasstnagybanegyszerstiaszmosmagyarzatsmegjegyzs.

    GrardSwinnen:TanuljunkmegprogramozniPythonnyelven 40.

    Forrs: http://www.doksi.hu

  • Nyissukmegaszvegszerkesztnketsrjukbeazalbbiscriptet:

    # Els Python script# Fibonacci-sort rat ki, azaz egy olyan szmsort, aminek minden tagja# az el z kt tag sszege.

    a, b, c = 1, 1, 1 # a & b az egymst kvet tagok szmolsra valk # c egy szmllprint 1 # az els tag kiratsawhile c

  • karakteregyttltezstugyanabbanadokumentumban.

    APythonmindkt rendszert tudja hasznlni, demegkell neki adnunk, hogymelyiket hasznljuk. Haazopercis rendszernk gy van konfigurlva, hogy a billentyletsek Utf8 kdokat generlnak, akkorkonfigurljukgyaszvegszerkesztnket,hogyaziseztakdothasznljastegykafntmegadottmsodikpszeudocommentetmindenscriptnkelejre.

    Ha az opercis rendszernk a rgi norma (ISO8859) szerint mkdik, akkor inkbb az els pszeudocommentetkellhasznlnunk.

    Hasemmitsemadunkmeg,akkoridnkntfigyelmeztetzeneteketfogunkkapniazinterpretertlsesetlegnmi nehzsgeket fogunk tapasztalni amikor az IDE krnyezetben szerkesztjk scriptjeinket (specilisanWindowsalatt).

    Fggetlenlattl,hogyegyik,vagymsiknormt,vagyegyiketsemhasznljuk,ascriptnkkorrektmdonfogvgrehajtdni.Ahhoz,hogyasajtrendszernkntudjukakdotszerkeszteni,amegfelelopcitkellvlasztani.

    Gyakorlatok:4.5. rjonegyprogramot,amikiszmoljaegyderkszgparallelepipedontrfogatt, aminek

    megvanadvaaszlessge,amagassgasahosszsga.

    4.6. rjonegyprogramot, amitszmoljaakiindulsknt megadott egszszm msodpercetvekk,hnapokk,napokk,percekksmsodpercekk.(Hasznljaamoduloopertort:%).

    4.7. rjonegyprogramot,amikiratjaa7esszorztblaels20tagjt,csillaggaljellveazokat,amelyek3naktbbszrsei.Plda:71421*283542*49

    4.8. rjonegyprogramot,amikiszmolja13asszorztblaels50tagjt,decsakazokatrjaki,melyek7nektbbszrsei.

    4.9. rjonegyprogramot,amiakvetkezjelsorozatotrjaki:

    ****************************

    GrardSwinnen:TanuljunkmegprogramozniPythonnyelven 42.

    Forrs: http://www.doksi.hu

  • 5.Fejezet: AfadattpusokA2.fejezetbenmrkezeltnkklnbztpusadatokat:egszsvalsszmokatskarakterlncokat.Ideje

    mostmregykicsitkzelebbrlismegvizsglniezeketazadattpusokatsmsokatisfelfedezni.

    5.1 NumerikusadatokAzeddigigyakorlatokbanmrhasznltunkktadattpust:egszsvalsszmokat(utbbiakatlebegpontos

    szmoknakisnevezik).Prbljukmegbemutatniezekjellemzit(skorltait):

    5.1.1 AzintegerslongtpusokTegykfel,hogy gy szeretnnkmdostaniazelz Fibonacci sorozatosgyakorlatunkat,hogytbbtagot

    rassunk ki. Apriori elegend a msodik sorban megvltoztatni a ciklus felttelt. A while c>> a, b, c = 1, 1, 1>>> while c

  • Aztmrtudjuk,hogyaPythondinamikusandefiniljaavltozinakatpust.

    Mivelaleghatkonyabbtpusrlvansz(mindszmolsisebessgben,mindmemriafoglalsbankifejezve),ezrtaPythonalaprtelmezsbenmindenalkalommal,amikorcsaklehetazintegertpusthasznlja,vagyishaakezeltrtkekafentebbmremltetthatrokkzttvannak(kb.2millird).

    Haakezeltrtkekezekenahatrokonkvlesnek,akkorakdolsukbonyolultabb vlikaszmtgpmemrijban.Azokavltozk,amelyekhezilyenszmokatrendelnk,automatikusanhosszegszekneklesznekdefinilva(eztatpustaPythonterminolgibanlongnaknevezzk)

    Ezalongtpusazegszrtkekmajdnemvgtelenpontossgkdolstteszilehetv.Egyilyenformbandefinilt rtk akrhny szignifikns szmjeggyel rendelkezhet, mivel ezt a szmot csak a szmtgp memrijnakmretelimitlja.

    Plda:>>> a, b, c = 3, 2, 1>>> while c < 15: print c, ": ", b a, b, c = b, a*b, c+1

    1 : 22 : 63 : 124 : 725 : 8646 : 622087 : 537477128 : 33435376680969 : 17970749964597539635210 : 60085879430566732227015542518579211 : 10797883156496691381438492294473845785924307043903078412 : 6488003054466075279073683736910497769500103428422804289182764945618623458261160742092813 : 700566989011183200292376413995762169216245450579726979173836923132717548836212350644346734002689652046961030088325062490084374247023784755214 : 454528076456265799856362940482493512051682398707229461514016556556583986422276163358151238257824601969802061415367471160941735505142279479530059170096950422693079038247634055829175296831946224503933501754776033004012758368256>>>

    Afentipldbanakirtszmokmretenagyongyorsann,mertmindegyikkazelzktszmszorzatvalegyenl.

    Kiindulskoraza, bs c integer tpusak,mertkisegszrtkeket:3,2s1: rendelnkhozzjuk.A8.iterrcitlkezdveazonbana b s a automatikusan long tpusakklesznekalaktva:a6oss7estagokszorzsnakeredmnyemrjvalafentebbemltett2millirdoshatrflttvan.

    Asor egyre nagyobbszmokkal folytatdik, de a szmols sebessgecskken. A long tpusknt troltszmokmretktlfggenvltozmennyisghelyetfoglalnakelaszmtgpmemrijban.

    GrardSwinnen:TanuljunkmegprogramozniPythonnyelven 44.

    Forrs: http://www.doksi.hu

  • 5.1.2 AfloattpusAvalsszm,vagylebegpontosnumerikusadattpussal,amitangolulfloatingpointnumbernek

    nevezneksamitemiattfloatnakfogunknevezniaPythonban,mrtallkoztunk.

    Ezatpusnagyonnagyvagynagyonkisszmokkal(pldultudomnyosadatokkal)trtnszmolsokatteszlehetvllandpontossggal.

    Ahhoz,hogyaPythonegynumerikusadatotfloattpusnaktekintsen,elegend,haaszmegytizedespontot,vagy10nekegyhatvnykitevjttartalmazza.

    Pldulakvetkezrtkeket:3.1410..0011e1003.14e10

    aPythonautomatikusanfloattpuskntrtelmezi.

    Prbljukkieztazadattpustegyjprogramocskban(amitazelzinspirlt):>>> a, b, c = 1., 2., 1 # => a s b 'float' tpusak lesznek>>> while c

  • (5) Gyakorlatok:

    5.1. rjonegyprogramot,amiakiindulsulfokokban,percekbensmsodpercekbenmegadottszgeketradinbaszmoljat.

    5.2. rjonegyprogramot,amiakiindulsulradinokbanmegadottszgeketfokokba,percekbesmsodpercekbeszmoljat.

    5.3. rjonegyprogramot,amiCelsiusfokokbaszmoljatakiindulsulFahrenheitfokokbankifejezetthmrskletetsafordtottirnytalaktstiselvgzi..Aztalaktskplete: T F=T C 1,832 .

    5.4. rjonegyprogramot, amiabankbanelhelyezett 4,3%oskamatozs tke20valattfelhalmozdottvikamataitszmoljaki.

    5.5. Egyrgiindiailegendaszerintasakkjtkotegyregblcstalltaki.Akirlymegakartaaztnekiksznnisaztmondta,hogyjutalmulbrmilyenajndkotmegadrte.Azregaztkrte,hogyadjonnekiegykevsrizsetregnapjaira,pontosanannyiszemrizset,hogyazltalafeltallt jtkelskockjra1szemet,2msodikkockrakettt, aharmadikrangyet,sgytovbbegszena64ikkockig.rjon egy Python programot, ami kiratja a sakktbla 64 kockjnak mindegyikreelhelyezettrizsszemekszmt.Szmoljakieztaszmotktflekppenarizsszemekpontosszma(egszszm)arizsszemekszmatudomnyosjellsmdban(valsszm)

    GrardSwinnen:TanuljunkmegprogramozniPythonnyelven 46.

    Forrs: http://www.doksi.hu

  • 5.2 AzalfanumerikusadatokEddig csak szmokat kezeltnk. Egy szmtgpprogram ugyangy kezelhet betkaraktereket, szavakat,

    mondatokat,vagybrmilyenszimblumsorozatot.Aprogramozsinyelvektbbsgbenerreaclraltezikegykarakterlnc(vagyangolulstring)nevadatszerkezet.

    5.2.1 Astring(karakterlnc)tpusAPythonban string tpus adatbrmilyenkaraktersorozat,amitvagy szimplaidzjelek (aposztrof),vagy

    duplaidzjelekhatrolnakPldk:>>> mondat1 = 'a kemny tojst.'>>> mondat2 = '"Igen", vlaszolta,'>>> mondat3 = "nagyon szeretem">>> print mondat2, mondat3, mondat1"Igen", vlaszolta, nagyon szeretem a kemny tojst.

    A3vltoz:mondat1,mondat2,mondat3tehtstringtpusvltoz.

    Jegyezzkmeg,hogyazolyanstringeket,melyekbenaposztrofokvannak,idzjelekkelhatroljuk,mgazidzjelekettartalmazstringeketaposztrofokkalhatroljuk.Aztisjegyezzkmeg,hogyaprintutastsakirtelemekkzegybetkztszrbe.

    A\(backslash)nhnykiegsztfinomsgotteszlehetv:

    Lehetvteszi,hogyegyparancsot,aminemfrelegysorban,azttbbsorbarjunk(ezbrmilyentpusparancsrarvnyes).

    Egykarakterlncbelsejbenabackslashspeciliskarakterek(sorugrs,aposztrofok,duplaidzjelek,stb.)beszrstteszilehetv.Pldk:

    >>> txt3 = "E\'meg kicsoda ? krdezte.">>> print txt3E'meg kicsoda ? krdezte.>>> hello = "Ez egy hossz sor\n ami tbb szvegsort\... tartalmaz (Azonos mdon \n m kdik, mint a C/C++.\n\... Jegyezzk meg,hogy a white space-ek\n a sor elejn lnyegesek.\n">>> print helloEz egy hossz sor ami tbb szvegsort tartalmaz (Azonos mdon m kdik, mint a C/C++. Jegyezzk meg,hogy a white space-ek a sor elejn lnyegesek..

    Megjegyzsek: A\negysorugrstidzel. A\'lehetvteszi,hogyaposztrofokkalhatroltkarakterlncbaaposztrofotszrjunkbe. Mgegyszermegismtlem:akis/nagybetlnyegesavltoznevekben(Szigorantiszteletbenkelltartanunk

    akezdetikis/nagybetvlasztst).

    47. GrardSwinnen:TanuljunkmegprogramozniPythonnyelven

    Forrs: http://www.doksi.hu

  • Hromszorosidzjelek:Hogyegykarakterlncbaknnyebbenszrjunkbespecilisvagyegzotikuskaraktereketanlkl,hogya

    backslashtalkalmaznnk,vagymagtabackslashttudjukbeszrni,akarakterlncot hromszorosaposztroffalvagyhromszorosidzjellelhatrolhatjuk:>>> a1 = """... Hasznlat: izee[OPTIONS]... { -h... -H host... }"""

    >>> print a1

    Hasznlat: izee[OPTIONS]{ -h -H host}

    5.2.2 HozzfrsegykarakterlncegyeskaraktereihezAkarakterlncokaz sszetett adatoknaknevezettltalnosabbadattpusegyspecilis esett kpezik.Egy

    sszetett adat egy olyan entits, ami egyszerbb entitsok egyttest egyetlen struktrban egyesti: egykarakterlnc esetben pldul ezek az egyszerbb entitsok nyilvn maguk a karakterek. A krlmnyektlfggenakarakterlncotholmintegyetlenobjektumot,holmintklnllkarakterekegyttestakarjukkezelni.Egyolyanprogramozsinyelvet,mintaPythonttehtelkellltniolyaneljrsokkal,amiklehetvteszikegykarakterlncegyeskaraktereihezvalhozzfrst.Ltnifogjuk,eznemolyanbonyolult:

    Egy karakterlncot a Python a szekvencik kategria egy objektumnak tekint. A szekvencik elemekrendezett egyttesei. Ez egyszeren azt jelenti, hogy egy string karakterei mindig egy bizonyos sorrendbenvannakelrendezve.Kvetkezskntastringmindenegyeskarakternekmeghatrozhataszekvenciabelihelyeegyindexsegtsgvel.

    Ahhoz, hogyegyadott karakterhezhozzfrjnk,a karakterlncottartalmaz vltoz neveutnszgleteszrjelberjukakarakterstringbelipozcijnakmegfelelnumerikusindexet.

    Figyelem: amint azt egyebtt ellenrizhetjk, az informatikban az adatokat majdnemmindig nulltl kezdveszmozzuk(nempedigegytl).Ezahelyzetegystringkaraktereiesetben:

    Plda:>>> ch = "Stphanie">>> print ch[0], ch[3]S p

    GrardSwinnen:TanuljunkmegprogramozniPythonnyelven 48.

    Forrs: http://www.doksi.hu

  • 5.2.3 ElemimveletekkarakterlncokonAPythonnakszmos, karakterlncokkezelsreszolglfggvnyevan(kis/nagybetstalakts,rvidebb

    karakterlncokravaldarabols,szavakkeresse,stb.).Aksbbiekbenelfogunkmlyedniebbenatrgykrben(lsd129.oldalt).

    Pillanatnyilag megelgedhetnkazzal, hogy tudjuk, klnklnhozzfrhetnkegy karakterlncmindenegyeselemhez,aminteztfentebbmagyarztam.Tudjunkrla,hogyakvetkezketismegtehetjk:

    tbbrvidkarakterlncblsszerakhatunkegyhosszabbat.Eztamveletetsszekapcsolsnak(concatenationak)nevezzksa+opertorthasznljukraPythonban.(Ezazopertorszmokraalkalmazvaazsszeadsmveletre,mgkarakterlncokraalkalmazvaazsszekapcsolsraszolgl).

    Plda:

    a='Akishalbl'b='nagyhallesz'c=a+bprintcAkishalblnagyhallesz

    meghatrozhatjukegykarakterlnchosszt(vagyisakarakterekszmt)alen()fggvnyhvsval:

    >>>printlen(c)29

    Egyszmotreprezentlkarakterlncotszmmalakthatunk.

    Plda:

    >>>ch='8647'>>>printch+45==>***error***nemadhatunksszeegystringetsegyszmot>>>n=int(ch)>>>printn+658712#OK:2szmotsszeadhatunk

    Ebbenapldbanazint()belsfggvnyastringetszmmalaktja.Afloat()fggvnysegtsgvelvalsszmmlehetalaktaniegykarakterlncot.

    49. GrardSwinnen:TanuljunkmegprogramozniPythonnyelven

    Forrs: http://www.doksi.hu

  • Gyakorlatok:

    5.6. rjon egy programot, ami meghatrozza, hogy egy karakterlnc tartalmazzae az ekaraktert.

    5.7. rjon egy programot, ami megszmolja az e karakter elfordulsainak szmt egystringben.

    5.8. rjonegyprogramot,amiegyjvltozbamsoltegykarakterlncotgy,hogycsillagotszrbeakarakterekkz.gypldul,gastonblg*a*s*t*o*nlesz.

    5.9. rjonegyprogramot,amiegyjvltozbafordtottsorrendbenmsoljategykarakterlnckaraktereit.gypldulzorglubblbulgrozlesz.

    5.10. Az elz gyakorlatbl kiindulva rjon egy scriptet, ami meghatrozza, hogy egykarakterlncpalindrome(vagyisamimindkt irnybl olvasvaugyanaz),mintpldulradarvagyss.

    GrardSwinnen:TanuljunkmegprogramozniPythonnyelven 50.

    Forrs: http://www.doksi.hu

  • 5.3 Alistk(elsmegkzelts)Azelzfejezetbentrgyaltstringekazsszetettadatokravoltakazelspldk.Azsszetettadatokatarra

    hasznljuk, hogy struktrltan csoportostunk rtkegytteseket. Lpsrllpsre fogjuk megtanulni mssszetettadattpusokhasznlatt:alistkt,atuplektsasztrakt(dictionnair)17.Ehromadattpuskzlmostcsakazelstfogjukelgrvidentrgyalni.Egymeglehetsenterjedelmestmrlvansz,amiretbbszrvisszakellmajdtrnnk.

    AlistadefincijaaPythonban:szgleteszrjelbezrt,vesszvelelvlasztottelemekcsoportja.Plda:>>> nap = ['htf ', 'kedd', 'szerda', 1800, 20.357, 'cstrtk', 'pntek']>>> print nap['htf ', 'kedd', 'szerda', 1800, 20.357, 'cstrtk', 'pntek']

    Ebbenapldbannapnevvltozrtkeegylista.

    Megllapthatjuk:avlasztottpldbanalisttalkotelemekklnbztpusaklehetnek.Azelshromelemstring,anegyedikegsz,aztdikvalstpus,stb.(Aksbbiekbenltnifogjuk,hogyegylistamagaislehetegylistnakeleme!).Ebbenatekintetbenalistafogalmameglehetsenklnbzikatmb(array)vagyazindexeltvltozfogalmtl,amivelmsprogramozsinyelvekbentallkozunk.

    Jegyezzk meg, hogy a listk is szekvencik, gy mint a karakterlncok, vagyis objektumok rendezettcsoportjai. A listt alkot klnbz elemek mindig ugyanabban a sorrendben vannak elrendezve,mindegyikkhz kln hozz tudunk frni, ha ismerjk a listabeli indexket. Ezeknek az indexeknek aszmozsanulltlindul,nempedigegytl,akarakterlncokhozhasonlan.

    Pldk:>>> nap = ['htf ', 'kedd', 'szerda', 1800, 20.357, 'cstrtk', 'pntek']>>> print nap[2]szerda>>> print nap[4]20.357

    Astringektl(amikegynemmdosthatadattpustkpeznek/erreaksbbiekbentbbszrleszalkalmunkvisszatrni/)eltrenegylistnakmegle