Sunteți pe pagina 1din 27

Introducere in Python

Cuprins 1. Primii pasi in Python 2. Ce este Python? 3. Unde se gaseste? 4. Cum se ruleaza un program Python? 5. Cateva precizari inainte de a scrie primul program . !ipuri de date si varia"ile #. $tringuri %. &iste si !upluri '. (ictionare 1). $tructuri conditionale 11. $tructuri repetitive 12. *unctii 13. Includerea de cod e+tern 14. Clase si o"iecte 15. ,+ceptii 1 . -lte particularitati Python 1#. ,+emple de programe rezolvate 1%. ,+ercitii propuse 1'. .esurse

Primii pasi in Python Python este un lim"a/ de scripting de nivel inalt. 0om prezenta in continuare primii pasi care tre"uie 1acuti pentru a scrie un program Python2 cateva e+emple si unele ponturi care sa va a/ute in depasirea pro"lemelor de inceput.

Ce este Python? Python este un lim"a/ de programare care castiga tot mai multa popularitate2 1iind comparat uneori cu Perl. Ce este de 1apt Python? ,ste un lim"a/ de scripting2 ceea ce inseamna ca este interpretat si nu compilat2 economisind mult timp in procesul de dezvoltare si depanare. Python este un lim"a/ de nivel inalt 3 permite scrierea de programe comple+e mult mai rapid si usor decat in lim"a/e de genul C sau C44. &im"a/ul com"ina o putere remarca"ila cu o sinta+a 1oarte clara. -re module2 clase2 e+ceptii si tipuri dinamice de nivel inalt. 51era inter1ete la multe apeluri sistem si li"rarii2 precum si la diverse sisteme de 1erestre 67112 8oti12 !92 8ac2 8*C:. Implementarea Python este porta"ila; ruleaza pe &inu+2 Uni+2 <indo=s2 5$>22 8ac 5$ 72 -miga si chiar pe unele tele1oane mo"ile de la ?o9ia. Python a 1ost portat2 de asemenea2 pe masinile virtuale @ava si .?,!.

Unde se gaseste? Python se poate do=nloada de pe site3ul o1icial2 sectiunea (o=nload. Pe un system &inu+2 e posi"il sa 1ie de/a instalat. 0eri1icati asta dintr3o consola; A python Python 2.3.4 6B22 $ep 24 2))42 )%;3';)': CDCC 3.3.4 6(e"ian 1;3.3.4312:E on linu+2 !ype FhelpF2 FcopyrightF2 FcreditsF or FlicenseF 1or more in1ormation.

GGG (aca nu il aveti instalat2 pasul urmator ar 1i sa3l cautati pe C(3urile distri"utiei de &inu+ cu care lucrati. 5 alternativa ar 1i 1olosirea serviciului apt3get de pe o distri"utie (e"ian 6sau yum pentru .edHat:. apt3get install python $au il puteti descarca2 apoi compila si instala manual; .>con1igure ma9e ma9e install Pe un system <indo=s se poate do=nloada de la (o=nload 1isierul Python 2.5.2 <indo=s installer 6versiunea 2.5.2 incepand cu 22 *e" 2))%:. $e ruleaza 1isierul; python32.5.2.msi 6apoi se urmeaza pasii de instalare:. (upa instalare se poate adauga calea catre e+ecuta"ilul python in glo"al P-!H2 pentru a putea 1i gasit de oriunde; IControl PanelJ 3G I$ystemJ 3GCin plus pt <indo=s 0ista; 3G I-dvanced $ystem $ettingsJ in partea superioara stangaE 3G !a"ul I-dvancedJ 3G I,nvironment 0aria"lesJ 3G In zona de I$ystem 0aria"lesJ se cauta varia"ila IpathJ in lista2 se da I,ditJ 3Gse adauga la s1arsitul randului I0aria"le valueJ caracterul IKJ urmat de calea catre e+ecuta"ilul Ipython.e+eJ 6de e+2 se adauga; IKc;LPython25J2 1ara ghilimele: 3G 3+5M. Cum se ruleaza un program Python? In <indo=s2 daca e+tensia .py este de/a inregistrata2 un du"lu3cli9 pe numele scriptului este su1icient. $e poate edita programul 1olosind I(&, 6Python DUI: si apasand tasta *5 pentru rulare sau se poate e+ecuta din consola 6$tart3G.un3Gcmd:. (aca 1olositi &inu+2 e+ista mai multe posi"ilitati; 1ie se lanseaza interpretorul cu numele scriptului; A cat hello.py print NHello <orldON A python hello.py Hello <orldO 1ie prima linie din program este de 1orma BO>calea>catre>interpretor iar scriptul se 1ace e+ecuta"il; A cat hello.py BO>usr>"in>python print NHello <orldON A chmod 4+ hello.py A .>hello.py Hello <orldO

Cateva precizari inainte de a scrie primul program Python este un lim"a/ interpretat. In Python2 o linie noua termina o declaratieK pentru a continua o declaratie pe mai multe linii2 se 1oloseste caracterul JLJ. In Python pe langa liniile noi2 indentarea este mai mult decat parte a stilului de programare2 este chiar parte din sinta+a 6identarea se re1era la spatiile>distanta intre inceputul unui rand si primul cuvant:. Un "loc de cod are toate liniile identate cu acelasi numar de spatii 6nu e+ista "egin si end sau PQ ca in C:. Instructiunile dintr3un "loc de cod vor 1i grupate unele su" altele2 pe acelasi nivel de identare. $tructurile de control2 de1inirea de rutine2 clase2 toate necesita o mai mare gri/a in scrierea codului. ,+emplu de 1olosire a identarii pentru a delimita "locurile de cod ; aR1 FFF

-1isam numerele de la 1 la 1) FFF =hile a SR 1); print a2 a 4R 1 B" R 1 "R2 print F-m terminatF (e1initiile neindentate intr3un program Python vor 1i de o"icei varia"ile glo"ale2 de1initii de clase2 proceduri2 1unctii sau parti ale Fprogramului principalF. (upa cum se o"serva si din e+emplul de mai sus2 dupa instructiuni nu se pune sim"olul FKF precum in alte lim"a/e de programare2 indentarea corespunzatoare 1iind su1icienta. ,ste 1oarte important sa nu uitati sim"olul F;F care precede de o"icei o indentare2 deoarece omiterea sa poate sa 1ie cauza multor erori2 cel putin la inceput. 5 singura linie se poate comenta in Python 1olosind sim"olul FBF. Pentru comentarii multiline se 1olosesc trei ghilimele succesive FFF 6sau NNN: la inceputul si respectiv la s1arsitul zonei de comentat.

!ipuri de date si varia"ile In Python se poate lucra cu numere intregi si numere in virgula mo"ila. ?umerele intregi dintr3o e+presie se convertesc automat in numere in virgula mo"ila daca este necesar. ?umele de varia"ile si 1unctii sunt case3sensitive. &a de1inirea varia"ilelor nu tre"uie precizat tipul acestora. Python asociaza numele unei varia"ile cu un o"iect2 care poate 1i numar2 string sau ceva mai comple+. Cand este 1olosita o varia"ila2 tipul acesteia este tipul o"iectului cu care este asociata. ,ste gresita 1olosirea intr3o e+presie a unei varia"ile care nu a 1ost asociata cu un o"iect. -st1el2 daca se scrie; iR5 i va 1i de tip intreg. (aca se scrie; i R FHelloF i va 1i de tip string. Python nu 1ace conversie automata intre tipurile string si integer. Pentru acest lucru se 1olosesc 1untiile int6someTstring: pentru trans1omarea din string in integer si respectiv; str6someTint: sau repr6someTint: sau UsomeTintU 6caracterul de pe tasta cu V: pentru trans1omarea din integer in string. $e poate 1olosi si scrierea 1ormatata 1olosind structura NCstringEWtypeCstringE N W 6varTname:. -tentieO In cazul trans1ormarii din string in integer2 daca stringul ce tre"uie convertit contine si alte caractere decat ci1re2 la rulare va aparea o eroare; 0alue,rror; invalid literal 1or int6: =ith "ase 1). (e e+emplu2 rularea instructiunilor; i R F1F / R F2F aR1 "R2 print FUn string;F2 i4/ print FUn numar;F2 int6i:4int6/: print FUn stringF2 str6a:4str6": print F-1isare 1ormatata;F2 Npersoana Ws are Wd aniN W 6/2 a: va a1isa;

Un string; 12 Un numar; 3 Un string 12 -1isare 1ormatata; persoana 2 are 1 ani -locarea si dealocarea de memorie se 1ace automat de catre Python. In Python se poate lucra direct cu numere comple+e2 1olosind sinta+a; a4"/ unde a R partea reala si " R partea imaginara. (e e+emplu2 rularea instructiunii; print 62.)43.)/:X62.13 .)/: va a1isa; 622.235.#/: In Python se poate 1ace atri"uirea de valori la mai multe varia"ile simultan; +2 y R 22 3 (atorita 1aptului ca partea dreapta a unei e+presii este evaluata inainte de a se 1ace atri"uirea2 valorile a doua varia"ile pot 1i 1oarte usor interschim"ate2 1ara a avea nevoie de o a treia varia"ila; +2 y R y2 + In Python2 se 1olosesc sim"olurile aritmetice standard2 cu W pentru operatia modulo.

$tringuri $tringurile sunt incluse intre ghilimele F 6sau N:. $tringurile ce contin mai multe linii sunt incon/urate de trei ghilimele succesive FFF 6sau NNN:. s R FstringF linie R FFFte+t pe mai multe liniiFFF $tringurile sunt tratate ca vectori2 cuvantCiE 1iind caracterul din sir ce are inde+ul iK i ia valori in intervalul C3length2length:. *olosirea unei valori in a1ara acestui interval va genera o eroare 6Inde+,rror; string inde+ out o1 range:. ?u e+ista un tip de date special pentru a de1ini un caracter 6acesta e vazut ca un sir de lungime 1:. &ungimea unui string se poate a1la cu a/utorul 1unctiei; len6someTstring:. stringul; s t r i n g inde+; ) 1 2 3 4 5 inde+ negativ; 3 35 34 33 32 31 Caracterul J;J speci1ica un su"string al unui sir 1olosing sinta+a; someTstringC+;yE. $u"stringul o"tinut contine toate caracterele din sirul initial 6someTstring: intre pozitiile + si y31 6inclusiv:. (aca nu se speci1ica + sau y2 acestea au implicit valorile )2 respectiv lungimea sirului. ?u se pot modi1ica caracterele unui sir 1olosind adresarea cu indici in atri"uire 6?U se poate 1ace de e+emplu; sC1E R F+F:. $irurile de caractere pot 1i concatenate 1olosind sim"olul J4J si pot 1i multiplicate 1olosind caracterul JXJ. (e e+emplu2 rularea instructiunilor; s R FstringF print sC);2E print sC;3E print sC3;E s2 R FoneF print F<rite F 4 2Xs2 4 F F 4 s va a1isa; st str ing <rite oneone string

8ai multe detalii despre metode de stringuri se pot gasi CaiciE. &iste si !upluri Python pune la dispozitie doua tipuri de structuri pentru a grupa mai multe elemente ; tupluri si liste. (i1erenta principala dintre cele doua tipuri este ca tuplul nu mai poate 1i modi1icat dupa ce a 1ost declarat. &ista se declara 1olosind paranteze drepte. !uplul se declara 1olosind paranteze rotunde. ,lementele unei liste sau ale unui tuplu pot 1i de tipuri di1erite. lista R CFstringF2 1)E tuplu R 6FstringF2 1): -ccesarea elementelor unei liste sau unui tuplu se 1ace la 1el ca in cazul sirurilor de caractere2 cu indecsi pozitivi2 negativi sau 1olosing operatorul J;J . $pre deose"ire de stringuri elementele unei liste pot si modi1icate cu a/utorul accesarii prin indecsi. $e pot adauga elemente intr3o lista 1olosind 1unctia append6: si se pot com"ina doua liste 1olosind 1unctia e+tend6:. lista.append65: lista.e+tend6altaTlista: ,lementele unei liste se pot sterge 1olosindu3se del. del listaC2E del listaC);2E 5 noua lista poate 1i creata din alta lista 1olosind Jlist comprehensionsJ 6o e+presie urmata de o clauza 1or2 apoi de ) sau mai multe clauze 1or sau i1. (e e+emplu2 rularea instructiunilor; listaTveche R C1222324E lista R C elemX2 1or elem in listaTveche i1 elemOR 3E print lista print C6+2 +XX2: 1or + in listaTvecheE va a1isa; C22 42 %E C612 1:2 622 4:2 632 ':2 642 1 :E In e+presia de mai sus2 i1 este optional. ?umarul de elemente dintr3o lista sau un tuplu se poate a1la 1olosind 1unctia len6:. ,lementele unui tuplu nu mai pot 1i modi1icate dupa ce au 1ost declarate. (in acest motiv nici o 1unctie prezentata mai sus ce modi1ica elementele unei liste nu poate 1i aplicata asupra tuplurilor.

(ictionare 5 structura dictionar este un set neordonat de chei si valori in care valoarea poate 1i cautata 1olosindu3se cheia. Cheile sunt de o"icei numere intregi sau stringuri. ,le pot sa 1ie in orice ordine si pot sa nu 1ie de acelasi tip. dictC)E R FprimulF dictCFunuFE R 2 Pentru a acesa un element al unui dictionar se procedeaza in 1elul urmator; var R dictC)E sau var R dictCFunuFE

(ictionarele sunt declarate 1olosind acolade2 elementele sunt de 1orma cheie;valoare despartite de virgule. dict R P); FprimulF 2 FunuF;2Q $e poate a1la dimensiunea unui dictionar 1olosindu3se 1unctia len6: 6cu sinta+a; len6someTdict: : si se poate sterge o intrare din dictionar 1olosindu3se del 6cu sinta+a; del someTdictCinde+E:. In plus se poate veri1ica daca e+ista o valoare pentru o cheie data. Pentru o versiune Python mai veche de 2.2. se 1oloseste 1unctia hasT9ey a o"iectului dictionar. 5 data cu versiunea 2.2. e+ista operatorul in care inlocuieste 1unctia de mai sus. i1 my9ey in dict; CcodeE *unctia 9eys6: a o"iectului dictionar returneaza o lista ce contine toate cheile din dictionar.

$tructuri conditionale i1 conditie1; instructiuni eli1 conditie2; instructiuni else; instructiuni Pot e+ista mai multe sectiuni eli1 sau nici una iar sectiunea else apare o data sau niciodata. ?umarul )2 liste si tupluri goale2 stringuri vide si valoarea ?one sunt considerate 1alse daca sunt 1olosite in evaluarea unei conditii.

$tructuri repetitive Instructiunea 1or 1unctioneaza dupa elementele unei secvente6string2 lista sau tuplu:. 1or el in lista; CinstrutiuniE 5peratorul range6: construieste o lista cu elemente in progresie aritmetica. -re urmatoarea sinta+a; range6+C2yC2pasEE: 3 1ormeaza o lista cu elemente mai mici ca y in progresie aritmetica2 cu ratia pas. Primul element al listei este +. Implicit + este ) si ratia este 1. 1or i in range6 len6s::; print sCiE Instructiunea =hile continua iteratia cat timp conditia speci1icata este adevarata. =hile conditie; CinstructiuniE Instructiunea "rea9 termina 1ortat orice "ucla =hile sau 1or2 iar instructiunea continue sare la urmatoarea iteratie. Instructiunile =hile si 1or pot avea o clauza else. -ceasta se e+ecuta cand se termina lista dupa care se 1ace iteratia 1or sau atunci cand conditia =hile a devenit 1alse. Instructiunile din clauza else nu se e+ecuta in cazul in care "ucla este terminata printr3o instructiune "rea9. =hile conditie; CinstructiuniE else;

CinstructiuniE *unctii *unctile sunt de1inite 1olosind cuvantul de1. .ularea instructiunilor; de1 1ractie6+2y:; i1 6yRR):; return else; return 1loat6+:>1loat6 y: print 1ractie6 24: va a1isa; 1.5 $e speci1ica doar numele argumentelor2 tipul lor 1iind cel trimis la apelarea 1unctiei. Pentru a accesa varia"ilele glo"ale ale programului2 tre"uie sa 1olosim cuvantul3cheie Fglo"alF cu sinta+a; glo"al someTvar. Prima instructiune din corpul unei 1unctii poate 1i un sir de caractere2 acest sir 1iind documentatia 1unctiei. *unctiile care se termina 1ara sa 1oloseasca instructiunea return sau care e+ecuta return 1ara argumente2 intorc o valoare ?one. $e pot speci1ica valori implicite pentru parametrii unei 1unctii. de1 1ractie6+2 yR1:; &a apelare se pot speci1ica doua valori sau doar una. (aca 1unctia se apeleaza cu doua valori nu se tine cont de valoarea implicita a lui y2 daca se apeleaza cu o valoare 6de e+ 1ractie64: :2 + va lua valoarea 42 iar y valoarea implicita 1. *unctiile mai pot 1i apelate 1olosind2 in loc de argumente2 cuvinte cheie de 1orma; cuvantTcheie R valoare. Pentru e+emplul de mai sus se poate mai apela 1unctia si ast1el ; 1ractie6yR#2 +R5: 1ractie6 2yR1: (aca o 1unctie are un parametru de tipul Xlista2 atunci la apelare 1unctia va primi o lista de argumente. .ularea instructiunilor; de1 suma6Xlista:; sR) 1or i in lista; sRs4i return s print suma622325: va a1isa; 1) B adica 24345 (aca o 1unctie are un parametru de tipul XXnume2 atunci la apelare 1unctia va primi o lista de cuvinte cheie de 1orma cuvTcheie R valoare. .ularea instructiunilor; de1 a1isare6XXnume:; 1or i in nume.9eys6:; print i2N;N2numeCiE va a1isa;

client ; -le+ vanzator ; -lina Includerea de cod e+tern In Python se pot include in alte programe 1unctii scrise in alt 1isier. Un ast1el de 1isier ce poate 1i importat poarta denumirea de modul. ,+emplu; import random Instructiunea import din e+emplul de mai sus nu incarca in ta"ela de sim"oluri numele 1unctiilor de1inite in modulul random2 ci doar numele modulului. *olosind acest nume se pot accesa 1unctii de1inite in interiorul modulului 1olosindu3se sinta+a numeTmodul.numeT1unctie6parametri:. random.random6: Clase si o"iecte !re"uie su"liniat ca in Python2 cuvantul Fo"iectF nu se re1era neaparat la instantierea unei clase. Clasele in sine sunt o"iecte2 iar2 in sens mai larg2 in Python toate tipurile de date sunt o"iecte. ,+ista tipuri de date care nu sunt clase; numerele intregi2 listele2 1isierele. !oate tipurile de date insa au apro+imativ acelasi comportament2 mai usor de e+plicat daca ne re1erim la aceste tipuri de date 1olosind cuvantul Fo"iectF. Un o"iect se creaza in Python prin 1olosirea cuvantului cheie class; class class?ame C6superTclass1 C2 superTclass2EX:E; C$uiteE Creaza un o"iect de tip clasa si ii da numele class?ame. $uite poate contine de1initii de metode locale si atri"uiri pentru varia"ile locale. Clasa este derivata din superTclass1 si din superTclass2. class 8yClass 6o"/ect:; ... Creaza o clasa de tip Fne=3styleF prin mostenire din o"/ect. 0echiul tip de clase nu mostenesc o"/ect. In lucrul cu clase2 tre"uie stiute urmatoarele reguli; Primul argument pentru metodele 6operatiile: de instanta ale unei clase este intotdeauna o"iectul sursa2 numit Fsel1F prin conventie. Cand ne re1erim la mem"ri ai clasei2 vom 1olosi sel1.mem"ru2 intr3un mod asemanator cu 1olosirea FthisF din @ava. 8etoda speciala TTinitTT6: este apelata la instantierea clasei 6crearea unui o"iect de tipul clasei: si poate 1i asemuita cu un constructor. 8etoda speciala TTdelTT6: este apelata cand nu mai sunt re1erinte la acest o"iect 6mecanism de gar"age collector: si poate 1i asemuita cu un destructor. Instantierea se 1ace prin apelarea o"iectului clasa2 posi"il cu argumente 6ast1el instanceRapply6aClass5"/ect2 args...: creaza o instanta:. $pre e+emplu; class Comple+; de1 TTinitTT6sel12 realpart2 imagpart:; sel1.r R realpart sel1.i R imagpart + R Comple+6 3.)2 34.5: (e multe ori vom implementa clase derivand din clasa !hread2 caz in care ar tre"ui respectate urmatoarele reguli; $u"clasati threading.!hread6: $uprascrieti TTinitTT6: si run6: ?u suprascrieti start6: In TTinitTT6:2 apelati !hread.TTinitTT6: ,+ceptii Unele apeluri de 1unctii pot arunca e+ceptii care tre"uie prinse. In Python e+ista mecanismul try3e+cept2 asemanator celui try3 catch din @ava. try;

+ R int6"u11er: e+cept60alue,rror:; print F(ate de intrare invalideF 8ecanismul 1unctioneaza in 1elul urmator; se e+ecuta instructiunile din "locul try. (aca apare o e+ceptie tratata de un "loc e+cept2 e+ecutia sare la instructiunile din "locul repectiv. (upa ce e+ceptia este tratata2 e+ecutia continua cu prima instructiune din "locul try. (aca apare o e+ceptie ce nu este tratata de nici un "loc e+cept2 aceasta este propagata ascendent in alte "locuri try si primeste denumirea de e+cetie netratata 6unhandled e+ception:. 5 e+ceptie poate 1i aruncata 1olosind instructiunea raise. -ceasta poate 1i 1olosita si 1ara argumente in interiorul unui "loc e+cept pentru a re3arunca e+ceptia prinsa de "locul respectiv. i1 6/G1)):; raise 0alue,rror2/ 5 instructiune try poate avea mai multe clauze e+cept. Ultima clauza e+cept poate sa nu ai"a speci1icata nici o e+ceptie de tratat 1iid ast1el 1olosita pentru a trata toate e+ceptiile netratate de celelalte clauze. Instructiunile try pot avea optional si o clauza else. Instructiunile din "locul else sunt e+ecutate atunci cand "locul try nu genereaza nici o e+ceptie.

-lte particularitati Python Denerarea de numere pseudo3aleatoare se 1ace la 1el de usor ca in alte lim"a/e. $e importa modulul random 6import random:2 se seteaza eventual seed3ul 1olosind random.seed2 iar random.randint6a2": spre e+emplu va intoarce un intreg cuprins in intervalul inchis Ca2"E. &ucrul cu liste este 1oarte comod in Python. &istele pot 1i 1olosite si su" 1orma de stiva sau coada prin intermediul 1unctiilor puse la dispozitie 6append6: si pop6: :. -1isarea unei liste se poate 1ace 1olosind un simplu print lista. 5 lista se initializeaza la 1el de simplu; lista R CE Putem re1eri o su"lista a unei liste2 a/utandu3ne de doi indecsi; su"lista R listaCinde+1;inde+2E Inde+area se 1ace de la zero. 8ai sus2 se vor intoarce elementele listei initiale de la inde+1 la inde+231. -st1el2 listaCn; 6n41:E va intoarce o lista care contine un singur element2 cel de pe pozitia n2 iar listaCn;nE va intoarce CE. In plus2 e+ista o suita de 1unctii 1oarte utile pentru o"iectele de tip lista. Cele mai 1olosite sunt; len6lista: intoarce numarul de elemente din lista lista.append6+: adauga un element la s1arsitul listei lista.e+tend6altaTlista: concateneaza altaTlista la lista lista.sort6: sorteaza elementele listei reverse6: inverseaza ordinea elementelor din lista Unele apeluri de 1unctii pot arunca e+ceptii care tre"uie prinse. ,+ista mecanismul try3e+cept2 asemanator celui try3catch din @ava. &ucrul cu 1isiere este2 de asemenea2 simplu. Pentru a o"tine un o"iect de tip 1isier2 se apeleaza 1unctia open2 de o"icei cu doi parametri; numele 6calea: 1isierului si modul de acces 6r 3 read onlyK = 3 =rite only si daca e+ista va 1i suprascrisK a 3 appendK r4 3 citire si scriereK r"2 ="2 r4" 3 deschide 1isierul in mod "inar:; 1 R open6Ninput.t+tN2N=N: 5data o"tinut o"iectul 1isier 12 se vor putea 1olosi 1unctiile pentru lucrul cu 1isiere; read2 readline2 readlines2 =rite2 see9 sau close ca metode ale clasei 1ile 6e+emplu; 1.read6::. Uneori2 pentru a scrie o"iecte Python in 1isiere2 acestea tre"uie trans1ormate intr3un string2 proces numit pic9ling 6iar procesul invers; unpic9ling:. *olosind modulul pic9le cu 1unctiile pic9le.dump si pic9le.load2 acest lucru poate 1i realizat cu usurinta. Urmatorul e+emplu este concludent; B $alvam un dictionar intr3un 1isier 1olosind pic9le

import pic9le culoareT1avorita R P FcaisaF; Fgal"enaF2 FportocalaF; ForangeF2 FcireasaF; FrosieF Q print culoareT1avorita pic9le.dump6 culoareT1avorita2 open6 Fsave.pF2 F=F : : B Incarcam dictionarul inapoi din 1isier 1olosind pic9le culoareaTmeaT1av R pic9le.load6 open6 Fsave.pF : : print culoareaTmeaT1av B culoareaTmeaT1av e acum P FcaisaF; Fgal"enaF2 FportocalaF; ForangeF2 FcireasaF; FrosieF Q Pentru lucrul cu siruri de caractere e+ista 1unctii a/utatoare precum rstrip2 lo=er2 etc.

,+emple de programe rezolvate 1: Calculul sumelor partiale a primelor ? numere naturale

Iata un e+emplu simplu de script Python2 in care se de1ineste o rutina si se apeleaza. BO>usr>"in>python B de1inim o 1unctie care a1iseaza numerele de la 1 la n si calculeaza suma lor de1 calcTsuma6 n:; B n este parametru al 1unctiei B virgula de la print suprima aparitia lui Ln dupa te+tul tiparit print 12 suma R 1 iR2 B nu uitati de N;N de la s1arsitul liniilor care preced su"3"locuriO B adica dupa 1or2 =hile2 i12 de1 etc. =hile i SR n; print F4F2 i2 suma 4R i i 4R 1 print FRF2 suma B ra=Tinput citeste un string de la tastatura a1isand promptul dat B acest string se converteste la un intreg cu int6..:. (aca nu se introduce un B numar valid2 se va genera o e+ceptie. n R int6ra=Tinput6F(ati nRF:: B range6a2 ": intoarce o lista ce contine Ca2 a412 ...2 "31E 1or i in range612 n41:; calcTsuma6 i: ,+emplu de e+ecutie;

10

A chmod 4+ sumeTpartiale.py A .>sumeTpartiale.py (ati nR4 1R1 142R3 14243R 1 4 2 4 3 4 4 R 1)

2:

Calculul numerelor prime pana la un ? dat

import math B import modulul math 1rom sys import argv B din modulul sys import lista argv 6argumente in linia de comanda: de1 isPrime6+:; B de1inesc o 1unctie care decide daca + e prim 1or i in range622 int6math.sYrt6+:41::; B range6a2 ": RG lista Ca2 ...2 "31E i1 + W i RR ); B nu uita de N;N O return ) return 1 de1 "uildPrimes6ma+ R 1)):; B se poate da o valoare implicita pentru parametru result R CE B initializez lista 1or i in range612 ma+41:; i1 isPrime6i:; result.append6i: B adaug la s1arsitul ei un nou element return result B pentru ca parametrul are o valoare implicita2 vom putea apela si asa; "uildPrimes6: i1 len6argv: RR 2; B argvC)ERnume scriptK len6argv:RR2 inseamna un argument in plus n R int6argvC1E: print "uildPrimes6 n: else; B daca nu am un parametru try; nRint6ra=Tinput6F(ati ?R F:: B ra=Tinput citeste un string de la tastatura B daca a 1ost FprinsaF o e+ceptie; e+cept60alue,rror:;

11

print F-steptam un numar intreg.F else; 1or 9 in "uildPrimes6 n:; B tiparesc 1iecare numar din lista print 92 print B print simplu inseamna de 1apt ne=line ,+emple de e+ecutie; A python prim.py 3) C12 22 32 52 #2 112 132 1#2 1'2 232 2'E sau A python prim.py (ati ?R 5) 1 2 3 5 # 11 13 1# 1' 23 2' 31 3# 41 43 4# Pe <indo=s2 pentru a da un argument din linia de comanda2 sunt su1iciente numele scriptului si argumentul; c;LG prim.py 3)

Exemple Python 1.
''' program ce determina oglinda unui numar creat de Vasile Cioban 11.10.2012 ''' def Citeste(): n=int(input("dati un numar natural:")) return n; def glinda(a): g=0 !"ile (a#0):

12

$ltCifra=a % 10 g= g&10'$ltCifra a=a((10 return g; a=Citeste(); d= glinda(a); print (" glinda="'str(d)); print ("program terminated");

2.

''' program ce determina daca un numar este prim creat de Vasile Cioban 11.10.2012 ''' def )rim(n): i=2; !"ile (i&i*=n) and (n % i +=0): if i==2: i'=1; else: i'=2; if i&i # n: return 1; else: return 0; n=int(input("dati un numar natural:")); if ()rim(n)==1): print (n," este prim"); else: print (n," nu este prim");

-.
''' program ce determina daca cel mai mare dic.i/or comun numar a doua numere creat de Vasile Cioban 11.10.2012 ''' def Citeste(): n=int(input("dati un numar natural:")) return n; def C001C(a,b): !"ile (a+=b): if a#b: a2=b else: b2=a;

3a=a2b 3b=b2a

13

return a; a=Citeste(); b=Citeste(); d=C001C(a,b); print ("cmmdc("'str(a)'","'str(b)'")="'str(d)); print ("cmmdc(",a,",",b,")=",d);

4.

def gcd(a, b): """ Compute t"e greatest common di.isor of t!o positi.e integers a, b integers a,b #=0 5eturn t"e greatest common di.isor of t!o positi.e integers. """ if a == 0: return b if b == 0: return a !"ile a += b: if a # b: a = a 2 b else: b = b 2 a return a def test6gcd(): assert gcd(2, -) == 1 assert gcd(2, 4) == 2 assert gcd(7, 4) == 2 assert gcd(0, 2) == 2 assert gcd(2, 0) == 2 assert gcd(24, 8) == test6gcd()

9.
''' program ce determina 2 numere prime gemene strict mai mici decat un numar natural dat creat de Vasile Cioban 1:.10.2012 ''' def )rim(n): i=2; !"ile (i&i*=n) and (n % i +=0): if i==2: i'=1; else: i'=2;

14

if i&i # n: return 1; else: return 0; n=int(input("dati un numar natural:")); if (n%2==0): p1=n21 p2=n2else: p1=n22; p2=n24; if (n*=9): print ("nu e;ista numere prime gemene mai mici"); else: !"ile (()rim(p1)==0) or ()rim(p2)==0)): p1=p2; p22=2; print (p1," ",p2); input("dati un <nter:");

7.
''' program ce determina 2 numere prime gemene p si = cu >p2=>=2 strict mai mari decat un numar natural dat creat de Vasile Cioban 1:.10.2012 ''' def )rim(n): i=2; !"ile (i&i*=n) and (n % i +=0): if i==2: i'=1; else: i'=2; if i&i # n: return ?rue; else: return @alse; n=int(input("dati un numar natural:")); if (n%2==0): p1=n'1 p2=n'else: p1=n'2;

15

p2=n'4; !"ile (()rim(p1)) or ()rim(p2))): p1=p2; p2'=2; print (p1," ",p2); input("dati un <nter:");

A.
''' program ce determina 2 numere prime gemene strict mai mari decat un numar natural dat creat de Vasile Cioban 1:.10.2012 ''' def )rim(n): i=2; !"ile (i&i*=n) and (n % i +=0): if i==2: i'=1; else: i'=2; if i&i # n: return 1; else: return 0; n=int(input("dati un numar natural:")); if (n%2==0): p1=n'1 p2=n'else: p1=n'2; p2=n'4; !"ile (()rim(p1)==0) or ()rim(p2)==0)): p1=p2; p2'=2; print (p1," ",p2); input("dati un <nter:");

:.

''' Created on

ct 1:, 2012

Baut"or: Vasile Cioban ''' stri = 'CelloDorld+' print (stri) print (striE0F) print (striE2:9F) 3 )rints complete string 3 )rints first c"aracter of t"e string 3 )rints c"aracters starting from -rd to 7t"

16

print (striE2:F) 3 )rints string starting from -rd c"aracter print (stri & 2) 3 )rints string t!o times print (stri ' "?<G?") 3 )rints concatenated string list = E 'abcd', A:7 , 2.2-, 'Ho"n', A0.2 F tinIlist = E12-, 'Ho"n'F print print print print print print (list) 3 (listE0F) 3 (listE1:-F) 3 (listE2:F) 3 (tinIlist & 2) 3 (list ' tinIlist) )rints complete list )rints first element of t"e list )rints elements starting from 2nd to 4t" )rints elements starting from -rd element )rints list t!o times 3 )rints concatenated lists

dict = JK dictE'one'F = "?"is is one" dictE2F = "?"is is t!o" tinIdict = J'name': 'Ho"n','code':7A-4, 'dept': 'sales'K print print print print print (dictE'one'F) (dictE2F) (tinIdict) (tinIdict.LeIs()) (tinIdict..alues()) 3 3 3 3 3 )rints )rints )rints )rints )rints .alue for 'one' LeI .alue for 2 LeI complete dictionarI all t"e LeIs all t"e .alues

8.

''' Created on ct 1:, 2012 MNG?5$C?M$N<O if Baut"or: Vasile Cioban ''' .ar1 = 100 if (.ar1): print ("1 2 Pot a true e;pression .alue") print (.ar1) else: print ("1 2 Pot a false e;pression .alue") print (.ar1) .ar2 = 0 if (.ar2): print ("2 2 Pot a true e;pression .alue") print (.ar2) else: print ("2 2 Pot a false e;pression .alue") print (.ar2) print ("Pood bIe+")

17

.ar = 100 if (.ar * 200): print ("<;pression .alue is less t"an 200") if (.ar == 190): print ("D"ic" is 190") elif (.ar == 100): print ("D"ic" is 100") elif (.ar == 90): print ("D"ic" is 90") elif (.ar * 90): print ("<;pression .alue is less t"an 90") else: print ("Could not find true e;pression") print ("Pood bIe+")

10.

''' Created on ct 1:, 2012 MNG?5$C?M$N<O !"ile Baut"or: Vasile Cioban ''' count = 0 !"ile (count *= 8): print ('?"e count is:', count) count '= 1 print ("Pood bIe+") .ar = 1 !"ile (.ar == 1) : 3 ?"is constructs an infinite loop num = input("<nter a number :") print ("Qou entered: ", num) print ("Pood bIe+")

11.

''' MNG?5$C?M$N<O for Created on ct 1:, 2012

Baut"or: Vasile Cioban ''' for letter in ')It"on': 3 @irst <;ample print ('Current Retter :', letter) fruits = E'banana', 'apple', 'mango'F for fruit in fruits: 3 Gecond <;ample

18

print ('Current fruit :', fruit) tinIlist=E'orange'F fruits=fruits ' tinIlist for inde; in range(len(fruits)): print ('Current fruit :', fruitsEinde;F) for inde; in fruits: print ('Current fruit :', inde;) print ("Pood bIe+")

12.

''' Created on ct 1:, 2012 Baut"or: Vasile Cioban ''' def fibo(;): if (;==0 or ;==1): return ; return fibo(;21)'fibo(;22) def CreRist@ibo(n): R=EF i =0 !"ile (i*=n): ;=fibo(i) R=R'E;F 3print(R) i'=1 return R n=int(input("dati un natural:")) Rista=CreRist@ibo(n) print(Rista);

1-.

''' Created on ct 29, 2012 RMG?< Baut"or: Vasile Cioban ''' def suma)are(;): ''' face suma numerelor pare din ; ; este o lista de nr. returnea/a un numar ''' sum=0

19

for el in ;: if el%2==0: sum=sum'el print ("el=",el,"suma partiala=",sum) return sum s =suma)are(E1,2,4,-,9,:,11,14F) print ("suma finala:",s) def citirelista(): """ citeste lista de la tastatura """ ;=int(input("dati lungimea listei:")) re/=EF for i in range (0, ;): nr =input( "da un numar pentru po/itia "'str(i)'":" ) re/.append(nr) return re/ ;=citirelista() print (;) def citirelista2(): """ citeste lista numere de la tastatura returnea/a lista de numere """ l=EF ;=int(input("dati un numar:")) !"ile (;+=21000): 3terminare cu 21000 print (l, ;) l =l'E;F ; =int(input("mai da un nr:")) return l ;=citirelista2() print (;)

14.

''' Created on ct 29, 2012 RMG?< Baut"or: Vasile Cioban ''' def citirelista2(): """ citeste lista numere de la tastatura returnea/a lista de numere """ l=EF ;=input("dati un numar:")

20

!"ile (;+=""): ; = int(;) l = l'E;F print (l) ; =input("mai da un nr:") return l lista=citirelista2() print (lista)

3terminare cu <N?<5

19.

''' Created on

ct 29, 2012

Baut"or: Vasile Cioban ''' def Citire(): lista=EF ;=input("1a un numar:") !"ile (;+=""): ; =int(;) lista=lista'E;F print("lista partiala:"'str(lista)) ;=input("1a un numar:"); return lista def Negati.e(R): RNeg=EF for i in R: if i*0: RNeg=RNeg'EiF return RNeg R=Citire() print("lista citita:"'str(R)) R=Negati.e(R) print("lista citita:"'str(R))

17.

''' Created on

ct 29, 2012

Baut"or: Vasile Cioban ''' def Citire(): lista=EF ;=input("1a un numar:") !"ile (;+=""):

21

; =int(;) lista=lista'E;F print("lista partiala:"'str(lista)) ;=input("1a un numar:"); return lista R=Citire() print("lista citita:"'str(R))

1A.
''' Created on No. 1, 2012 produs polinoame Baut"or: Vasile Cioban ''' ''' Olgoritmul )rodus <ste : J 5:=)&S K 1ate m,()EiF , i=0,m), m=gradul lui ) n,(SEHF , H=0,n); n=gradul lui S K )entru L:=0,m'n <;ecuta J m'n=gradul lui 5 K 5ELF:=0 Gf)entru; )entru i:=0,m <;ecuta )entru H:=0,n <;ecuta 5Ei'HF:=5Ei'HF')EiF&SEHF Gf)entru; Gf)entru; 5e/ultate (5ELF, L=0,m'n) GfOlgoritm. ''' def )rodus(),S): 5=EF; m=len()) n=len(S) L=0 !"ile (L*m'n21): 5=5'E0F L=L'1 for i in range(len())): for H in range (len(S)): 5Ei'HF=5Ei'HF')EiF&SEHF return 5 def Cit)ol(): lista=EF ;=input("1a un Coef:") !"ile (;+=""): ; =int(;) lista =lista'E;F print ("lista partiala:"'str(lista))

22

;=input("1a un Coef:"); return lista def Ofis)ol()): Ofis="" i=0 !"ile (i*len()) and ()EiF==0)): i'=1 !"ile (i*len())): if ()EiF==1): if (i==0): Ofis=Ofis'"1" else: Ofis=Ofis'"';T"'str(i) if (i==1): Ofis=Ofis'"';" else: if()EiF+=0): if()EiF#0): Ofis=Ofis'"'"'str()EiF)'";T"'str(i) else: if ()EiF==21): Ofis=Ofis'"2;T"'str(i) else: Ofis=Ofis'str()EiF)'";T"'str(i) i=i'1 return Ofis ''' 1,1 1,1,1 1,21,1 21,0,1 '''

1'; 1';';T2 12U';T2 21';T2

)=Cit)ol() print(")olinomul ):"'Ofis)ol())) print(" ") S=Cit)ol() print(")olinomul S:"'Ofis)ol(S)) print(" ") 5=)rodus(),S) for i in range(len(5)): print(str(5EiF)'" ",end="") print(" ") print("polinomul produs:"'Ofis)ol(5))

23

)robleme propuse
S se scrie un algoritm care rezolv problema de mai os !olosind limba ul "#t$on% 1. S se determine primul numar prim mai mare dec&t un numar natural n dat% 2. 'etermina(i v&rsta )*n numr de zile+ pentru o persoan% 3. 'etermina(i o dat calendaristic )sub !orma an, luna, zi+ pornind de la dou numere *ntregi care reprezint anul -i numrul de ordine al zilei *n anul respectiv% 4. '&ndu.se numrul natural n par, determina(i numerele prime p1 -i p2 )p1 p2 ) ast!el ca n / p 1 0 p2 )veri!icarea ipotezei lui 1oldbac$+% 5. 'etermina(i numerele prime p1 -i p2 gemene imediat superioare numrului natural nenul n dat% 'ou numere prime p -i 2 sunt gemene dac 32.p3 / 2% 6. 'etermina(i primele n ci!re din scrierea !rac(iei subunitare k4m / 0.c1c2c3%%%cn,%%%, pentru k -i m numere naturale date% 7. 5ie n un numr natural dat% 6alcula(i produsul p al tuturor divizorilor proprii ai lui n% 8. "entru un numr natural n dat gsi(i numrul natural minim m !ormat cu acelea-i ci!re% 78emplu n=3658, m=3568% 9. "entru un numr natural n dat gsi(i numrul natural ma8im m !ormat cu acelea-i ci!re% 78emplu n=3658, m=8653% 10. 9glinda unui numr este numrul ob(inut prin scrierea ci!relor *n ordine inversa )78emplu oglinda)237+ / 732+% "entru un n dat determina(i dac este palindrom )numrul -i oglinda sa au aceea-i valoare+% 11. :umerele n1 -i n2 au proprietatea P dac scrierile lor *n baza 10 con(in acelea-i ci!re )e8% 2113 -i 323121+% 'etermina(i dac dou numere naturale date au proprietatea P% 12. 1enera(i cel mai mic numr per!ect mai mare dec&t un numar n dat% ;n cazul *n care nu e8ist, se a!i-eaz un mesa corespunztor% <n numr este per!ect daca este egal cu suma divizorilor si, e8cept&ndu.l pe el *nsu-i% )6/10203+% 13. 1enera(i cel mai mare numar prim mai mic decat un numar n dat% ;n cazul *n care nu e8ist, se a!i-eaz mesa corespunztor% 14. 1enereaz toate numerele prime strict mai mici decat un numr natural n dat%

24

15. 1enereaz primele n )n natural dat+ numere prime% 16. 'etermina(i toate reprezentrile posibile ale unui numr natural n, ca sum de numere naturale consecutive% 78emplu n=15=1+2+3+4+5= 3+4+5=7+8 )3 variante+ 17.1enereaz primele n )n natural dat+ numere prime, mai mari ca m, dat de asemenea% 18. =!i-a(i triung$iul lui "ascal, cu toate combinrile C(m,k) de m obiecte luate c&te k, > / 0, 1, %%%, m, *n linia m, pentru m / 1, 2, %%%, n, n dat% 19. 6alcula(i o valoare apro8imativ a numrului e^ pentru real dat, cu o precizie !i8at%

20. 6alcula(i o valoare apro8imativ a rdcinii ptrate a unui numr real pozitiv, cu o precizie dat% 21. =!i-a(i e8ponentul la care numarul prim p apare *n descompunerea *n !actori primi ai numrului 1?2?%%%?n )n natural nenul dat+% 78emplu dac n/100 -i p/3, atunci n! are ca divizor pe 3@48% 22. Se cite-te un -ir de numere naturale nenule )terminat cu 0+ s se determine numrul ci!relor 0 *n care se termin produsul numerelor citite% 23. 6alcula(i o valoare apro8imativ pentru ln(1+ ) cu o precizie dat% 24. =!i-a(i un numar precizat de sume par(iale din dezvoltarea sin)8+ / 8 . 8@343A 0 8@545A . 8@747A 0 %%% 25. 'escompune *n !actori primi un numar natural nenul dat% 26. 'etermina(i toate numerele naturale mai mici decat un numr natural nenul dat n -i care sunt relativ prime cu n% 27. 'escompune(i un numar natural dat ca sum de termeni distinc(i ai -irului lui 5ibonacci% 28. 'escompune(i un numar natural dat n ca suma de puteri distincte ale lui 2% 29. 'etermina(i toate numerele naturale cuprinse *ntre doua limite m -i n, care au acela-i numr de ci!re 1 *n scrierea binar a lor -i a ptratului lor% 30. Bipari(i un numr precizat de termeni din -irul 1, 2,1, 3,2,1, 4,2,2, 5,4,3,2,1, 6,2,2,3,3,3, 7,6, %%% ob(inut din -irul numerelor naturale prin *nlocuirea !iecrui numr natural n printr.un grup de numere ast!elC numrul prim p este inlocuit prin numerele p,p"1,%%%3,2,1, iar numrul compus n este *nlocuit prin n urmat de to(i !actorii si proprii, un !actor # repetandu.se de # ori%

25

31. 5ie n un numr natural dat% 6alcula(i suma $ a tuturor !actorilor proprii ai lui n% 32. 'etermina(i numerele prime p1 -i p2 gemene imediat in!erioare numrului natural nenul n dat% 'ou numere prime p -i % sunt gemene dac &%"p& = 2% 33. 5ie n un numr natural dat% 6alcula(i produsul p al tuturor numerelor prime cu n, -i mai mici ca n% 34. 5ie n un numr natural dat% 6alcula(i suma $ a tuturor numerelor prime cu n, -i mai mici ca n% 35. 6alcula(i suma $ a primelor n numere prime, n dat% 36. 'eterminati to(i divizorii unui numr n dat% 78emplu n/18 '18=D1,2,3,6,9,18( 37. 'etermianti toate numerele relativ prime cu n dat, -i strict mai mici ca n% 38. 'eterminati toate numerele strict mai mici ca n -i cu care n nu este divizibil% 39. S se determine primele n )dat+ numere impare din -irul lui 5ibonacci% 40. S se determine numerele pare din -irul lui 5ibonacci, strict mai mici ca un n dat% 41. S se determine sume de numere consecutive care dau e8act n, n dat% 78emplu 15=1+2+3+4+5=4+5+6=7+8 42. S se determine produsul de numere consecutive care dau e8act n, n dat% 43. "rogram care determin cel mai mare divizor comun )6EE'6+ al dou numere naturale date a -i )% 44. S se determine C**'C al unei secven(e de numere date% 45% S se detemine sublista de numere prime dintr.o list dat% 78empluC F23,4,5,34,6,7,9,11,12,14,16G F23,5,7,11G 46% S se determine sublista de numere palindromice dintr.o list dat% 78empluC F23,4,5,34,616,7,9,11,12,14,16G F4,5,616,7,9,11G 47% S se determine sublistele )consecutive din lista ini(ial+ de numere strict cresctoare dintr.o list dat% 78empluC F1,2,3,5,5,5,4,3,6,8,9,10G F1,2,3,5G F3,6,8,9,10G 48. S se determine sublistele )consecutive din lista ini(ial+ de numere strict descresctoare dintr.o list dat% 78empluC F1,2,3,5,5,5,4,3,6,5,2,10G F5,4,3G F6,5,2G 49. S se determine sublistele de tip platou )mai lungi sau egale cu 2+ dintr.o list dat% 78empluC F1,2,3,3,3,5,5,5,4,3,6,8,9,9G F3,3,3G F5,5,5G F9,9G% 50. S se determine sublistele )consecutive din lista ini(ial+ de numere negative dintr.o list dat% 78empluC F1,2,.3,5,5,.55,.4,4,3,6,.8,.9,.10G F.3G F.55,.4G F.8,.9,.10G 51% S se determine sublistele )consecutive din lista ini(ial+ de numere strict cresctoare -i pare dintr.o list dat% 78empluC F1,2,12, 24,5,5,5,4,3,6,8,9,10G F2,12,24G F6,8G 52. S se determine sublistele )consecutive din lista ini(ial+ de numere strict descresctoare -i impare dintr.o list dat% 78empluC F1,2,13,5,5,5,4,3,6,15,11,1,2,10G F13,5G F15,11%1G 53. S se determine sublistele de tip platou )mai lungi sau egale cu 2+ de numere prime dintr.o list dat% 78empluC F1,2,3,3,3,5,5,5,4,3,6,8,9,9G F3,3,3G F5,5,5G % 54. S se determine sublistele )consecutive din lista ini(ial+ de numere negative strict cresctoare dintr.o list dat% 78empluC F1,2,.3,.2,.1, 5,5,.55,.4,4,3,6,.8,.9,.10G F.3,.2,.1G F.55,.4G % 55. S se determine sublistele )consecutive din lista ini(ial+ de numere palindromice dintr.o list 26

dat% 78empluC F1,2,3,21,11, 55, 121,4,3,6,.81,9,10G F1,2,3G F11,55,121,4,3,6G F9G 56. S se determine sublistele )consecutive din lista ini(ial+ de numere prime dintr.o list dat% 78empluC F1,2,3,21,11, 55, 121,4,3,6,.81,9,10G F2,3G F11G F3G 57. S se determine C**'C -i C***C al unei liste de numere *ntregi% 78empluC F45,90,75,30G C**'C=15 iar C***C=450%

27

S-ar putea să vă placă și