Gerard Swinnen Tanuljunk Meg Programozni Python Nyelven
-
Upload
toeroek-zoltan -
Category
Documents
-
view
65 -
download
18
description
Transcript of Gerard Swinnen Tanuljunk Meg Programozni Python Nyelven
-
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