Programare in Python: Ghidul complet pentru incepatori

Programare cu Python - Ghid complet pentru incepatori teachbit ramon nastase

Acesta este un articol complet care te va invata cum sa programezi in Python de la zero fara sa ai nevoie de experienta de programare anterioara sau notiuni de matematica avansata. Enjoy!

De ce sa incepi cu programarea in Python?

Avantajul limbajului Python este ca ofera foarte multa flexibilitate din partea programatorului. In comparatie cu C++, care necesita multe linii de cod pentru a executa o singura comanda, Python necesita o singura linie. De asemenea, programare in Python se face la fel, indiferent de sistemul de operare (Windows, Linux). Toate acestea te ajuta sa te axezi pe logica problemei, pe algoritmul construit de tine, scazand sansele de a face greseli de sintaxa. Recomand ca acest limbaj sa fie printre primele limbaje de programare pe care tu le inveti, tocmai pentru ca face trecerea de la teorie la practica fara a te obliga sa insisti pe primul element (teoria :D). Odata ce ai scris un program in Python, atunci cand il recitesti, iti dai imediat seama despre ce a fost vorba in problema, ceea ce e vital atunci cand inveti bazele programarii. Te vei putea axa pe logica solutiei, evitand analiza complexitatii codului in sine. Studiind intens acest limbaj intuitiv si usor de inteles, poti ajunge programator in Python.

Ce poti face cu limbajul Python?

Ca sa incepem cu ce este mai simplu, vom vorbi despre un limbaj de programare pe cat de popular, pe atat de simplu. Si anume, Python. Apropo, stiai ca pana si Netflix sau Instagram  foloseste limbajul de programare in Python? Nu glumesc. Compania Netflix a detaliat ca foloseste acest limbaj de programare de la operatiunile de management si analiza, pana la securitate si retea.

Python este un limbaj excelent pentru cei care sunt la inceput cu programarea si vor sa faca primii pasi. Dar te rog sa nu subestimezi puterea si utilitatea acestui limbaj. El este extrem de folosit in zilele noastre, cu o sintaxa usoara si cu o flexibilitate in a scrie codul, cu mult peste fata de alte limbaje cunoscute (Java, C++, JavaScript, etc). Marea intrebare este ce poti face cu acest limbaj de programare? Python, fiind un limbaj interpretat, are un avantajul fata de limbajele compilate, tip C/C++, deoarece necesita mai putin cod pentru a realiza anumite instructiuni. Python este un limbaj de programare cheie atunci cand vine vorba de dezvoltarea si testarea sistemelor automotive (ex: parcare inteligenta, scaderea riscului de accidente la depasiri, semnalarea si evitarea obstacolelor pe timp de noapte). Urmand explicatiile din aceasta carte de Introducere in Python, vei invata sa gandesti cursiv in acest limbaj de programare prin rezolvarea unor probleme intuitive care iti vor dezvolta logica si te vor ajuta sa inveti Python pe parcurs. Google, alaturi de un pix si o foaie sunt cei mai buni prieteni ai unui programator. Asa ca nu trebuie sa iti fie frica sa cauti pe Google moduri de rezolvare, dar nu trebuie sa cauti raspunsul direct, asterne-ti pe o foaie ideile tale de rezolvare, si incearca sa transpui acele idei in cod, vei reusi sa observi problemele mult mai repede in acest fel, si de asemenea, iti vei dezvolta gandirea logica. Totusi, nu uita ca acest limbaj este unul puternic, folosit in multe arii si dispune de numeroase biblioteci. Python este unul dintre cele mai cunoscute si cele mai practice limbaje de programare, fapt care il incadreaza in topul limbajelor de prezent si de viitor. Foarte multe tehnologii folosesc Python tocmai pentru ca e accesibil, lumea intreaga gaseste diferite “inventii” prin care se poate bucura de flexibilitatea lui. 

Poate ai auzit de testare in general. Acesta este un procedeu de verificare prin care nu doar calitatea produsului software sau hardware poate fi cunoscuta, ci se pot gasi si diferite functii anormale ale unui produs. Un exemplu simplu ar fi apasarea unui buton de pe un aparat de cafea, care, in loc sa iti faca o cafea dubla, face o cafea scurta (asta daca eliminam alte posibilitati a functionalitatii defectuoase). Testarea este atat de vasta, incat fara Python ar fi greu de rulat anumite programe pe un produs ce urmeaza sa fie lansata pe piata. Gandeste-te de exemplu la domeniul automotive. Poate ai stat intr-o masina care are sistem de identificare a imaginilor. Atunci cand acesta detecteaza un obstacol (unul real, de exemplu un om pe carosabil), activeaza sistemul de franare a masinii, astfel evitand producerea unui accident. Sunt mari sanse ca anumite functii cheie ale acelui sistem sa fi fost testate in Python, unele teste au rulat zile intregi, iar altele au fost rulate de zeci de mii de ori. Un alt exemplu, mai simplu decat aceasta este urmatorul, cunoscand Python (si folosind cateva fire si microfon), poti sa analizezi datele captate in urma detectarii sunetelor de catre microfon, poti inregistra datele si apoi le poti cripta intr-un fisier. Despre robotei nici nu mai deschid subiectul, pur si simplu sunt prea multe de spus. Python e ca o usa care iti deschide multe alte usi, atata timp cat inveti bine bazele si continui cu nivelul intermediar. Avantajul tau, cel care inveti programare incepand chiar cu limbajul Python, este ca vei depune mult mai putin efort pentru a invata bazele, in comparatie cu alte limbaje de programare. Fiind un limbaj intuitiv, da impresia ca scrii ceea ce logica iti dicteaza, fara a-ti mai face griji pentru spatii, linii, lipsa unei bilbioteci, etc.. Ariile in care limbajul Python este des intalnit sunt cele de: 

  • Automatizare – Aceasta este des intalnita in partea de retelistica prin scripturi pentru administrarea a mai multe device-uri.
  • Cyber-Security – Python ajuta la principiile de Pen-Testing prin realizarea automata de diferite atacuri asupra unui target.
  • Web Development – Aici Python poate fi utilizat cu ajutorul framework-urilor precum Pyramid sau Django pentru realizarea Backend-ului unui website.
  • Quality Assurance (Controlul Calitatii) – Poate fi realizata testarea modulelor software ce urmeaza sa fie lansate pe piata, in vederea functionarii corecte si a vulnerabilitatii feature-urilor.
  • GUI (Graphical User Interface) – In Python pot fi create meniuri interactive pentru diferite programe. Un program foarte cunoscut pentru simularea retelelor creat in Python este GNS3.
  • Embedded si Internet of Things – Un bun exemplu sunt placutele de tip Raspberry Pi si programarea senzorilor si sistemelor de securitate din industria automotiva.

In capitolele ce vor urma, iti voi prezenta cat mai multe din aceste arii ca sa le exploram impreuna. Exista numeroase domenii care cer cunostinte de Python. De ce oare? Python are una dintre cele mai mari procente de crestere in ultimii ani. Ca sa iti insir cateva motive bune, cu Python poti face:

• Programarea robotilor

• Programare in Arduino

• Build-uirea unor aplicatii web (pe Django sau Flask)

• Creare de web scraper (scripturi care culeg date de pe site-uri, scanand paginile unui site sau mai mai multor site-uri)

• Analiza de statistici

• Sisteme automate

• Manipulare de imagini (folosit mai ales in automotive)

• Manipularea de sunete si de texte.

Din cate poti vedea, acest limbaj il poti folosi atat daca iti place hardware, cat si software. Multi programatori au inceput initial cu Python pentru ca e un limbaj simplu de invatat, intuitiv, dupa care au ramas pe acesta, l-au studiat intens si s-au specializat pe o nisa bine definita, in domeniul in care ei au lucrat.

Doresti in continuare sa-ti aprofundezi cunostiintele de Programare? Atunci te invit sa apesi pe acest LINK si sa programezi o discutie de ghidare in IT cu colegii nostri de la TeachBit.ro care te vor indruma catre urmatoarea etapa in Programare.

Echipa TeachBit.ro

Cum sa aprofundezi programarea folosindu-te de Google?

In acesta sectiune vom discuta despre Google si cum poate acesta sa te dezvolte pe tine ca si programator. Un skill foarte important pentru majoritatea celor care lucreaza in domeniul IT este sa cunoasca metode de rezolvare a problemelor si cel mai important, sa stie ce sa caute. Este foarte important sa stii ce cauti pentru o rezolvare mai rapida a problemei iar Google este unul dintre cei mai buni prieteni ai omului cand vine vorba de rezolvarea problemei. 

Nu trebuie sa te temi sa iti cauti problema si sa iti spui ca un “programator adevarat” isi rezolva singur problemele, deoarece aceasta este o conceptie gresita si trebuie eliminata, de ce trebuie sa treci prin aceeasi pasi pentru a rezolva o problema daca un om a facut deja treaba grea pentru tine. Cel mai mare avantaj al Internetului este ca prin el putem afla multe raspunsuri care devin solutii pentru problemele noastre. Google aici face partea “magica” de cautare. Acum e timpul sa iti spun si tie cum abordez eu si cum te sfatuiesc si pe tine sa abordezi o anumita situatie: 

1. “Nu stiu ceva?”

2. “Caut pe Google punand intrebarea (keyword-urile corecte) – how to X.”

3. “Gasesc ceea ce ma ajuta. O aplic.” Done 🙂

Frumusetea in cursurile de programare e ca poti invata logic fara a toci si fara a memora exact totul. Ideea principala e ca Google are toate raspunsurile. Aici e fix invers in comparatie cu scoala: daca auzim “nu cautati pe Internet”, aici in programare tocmai acesta e skill-ul necesar. Nu exista programator care sa nu foloseasca Google de zeci si chiar de sute de ori pe zi, nici in firmele mai mici si nici in corporatii.

In cazul nostru putem spune ca orice nu cunosti in Python are o solutie pe Internet. El este si un limbaj accesibil, usor de descifrat chiar si la prima vedere si folosit de un numar considerabil de programatori din toate domeniile. Ce se intampla de exemplu daca doresti sa lucrezi cu listele in Python? Sa spunem ca nu cunosti in detaliu proprietatile listelor si cum poti accesa o valoare din ele. Scrii pe Google un “how to access values in lists” (sau ceva relevant pentru problema ta; daca nu stii engleza la acest nivel begginer, nu-i nici o problema, foloseste Google Translate) si iti vor aparea o gramada de solutii. 

Google constituie o librarie enorma de documentatie pentru limbajele de programare existente si cu siguranta te va ajuta sa te dezvolti pe plan profesional asa cum m-a ajutat si pe mine. Nimic nu trebuie invatat pe de rost, totul merge pe logica in programare, iar astazi ti-am explicat in detaliu ce trebuie sa faci pentru a intelege mai bine acest lucru. Ai vazut si un exemplu despre o cautare bine structurata pe Google si despre ce indicii cheie trebuie sa introduci pentru a reusi sa gasesti ceea ce iti doresti. 

In continuare iti voi da sfaturi si despre ce platforme de rezolvare a problemelor sa incerci prima oara pentru a gasi o solutie mai rapida si pertinenta impedimentului tau. Important este in ziua de azi sa poti sa fii cat mai independent si sa gasesti singur rezolvare la obstacolele tale fara a astepta ajutor din partea celorlalti. Asta te va ajuta sa te dezvolti pe tine si iti va oferii un avantaj in fata celorlalti competitori din industrie.  Sunt multe site-uri care contin si explicatii si chiar exemple de cod. Ce recomand eu personal sunt:

https://stackoverflow.com – un site pentru comunitatea de developeri, care share-uiesc intre ei cunostintele de programare, is gasesc greselile sau chiar optimizarile unei secvente de cod. Practic, unii dintre ei chiar il folosesc 80% din timpul de lucru atunci cand scriu cod la serviciu. Conform surselor din https://insights.stackoverflow.com/survey/2017, peste 40 de milioane de programatori, studenti, angajati si freelanceri, viziteaza aceasta platforma in fiecare luna, iar in 2017 Python a fost cel mai dorit limbaj de catre programatori.

https://www.tutorialspoint.com – e un site care iti arata cum sa programezi unele lucruri de la zero, te ajuta daca esti blocat pe ceva peste care nu stii cum sa treci, explicand in detaliu, teoretic, fiecare notiune dintr-un limbaj de programare.

Bineinteles ca exista multe alte site-uri de unde poti gasi raspunsurile. Tot ce trebuie sa faci este sa cauti pe Google, adresand intrebarea corect. Ce iti recomand este sa treci la treaba (asta daca nu ai facut-o deja) si sa incepi sa aplici ceea ce am studiat in acest capitol, rezolvand exercitiile din sectiunile urmatoare.

Capitolul 1 – Introducere in Python

In primul capitol mi-am propus sa te ajut sa intelegi din discutiile despre Python de ce inveti acest limbaj. Vei vedea de ce setari ai nevoie pentru a-ti rula primul program scris in Python. Incepand de aici, la finalul fiecarui capitol vei gasi cate un set de exercitii, care te ajuta sa asimilezi si sa iti dezvolti logica si tehnica proprie de “problem-solving”. Prin asta iti vei imbunatati cunostintele practice de programare (pentru ca, probabil stii si tu, teoria poate uneori e greu de invatat, insa la practica se vede intr-adevar cat progresezi). Da, stiu ca tocmai citesti o carte, deci focusul principal este pe teorie, de aceea facand exemplele (chiar in mediul tau din PC) si prin diferite exercitii care vor fi la finalul fiecarui capitol (si pe care te rog sa le parcuri si sa le rezolvi), vei invata si practic bazele limbajului Python. Hai sa trecem la treaba!

Cum incepi sa programezi in Python?

Presupun ca esti nerabdator sa incepi sa programezi. Pentru a incepe sa programam in Python, avem nevoie de un program special, denumit IDE (Integrated development environment) care reprezinta un mediu de dezvoltare al programelor. Putem folosi un astfel de IDE in mai multe moduri:

Interpretor – aplicatie instalata pe laptop/PC si folosita printr-un terminal

Online – printr-o aplicatie cloud – exemplu Repl.it

Aplicatie instalat pe PC/laptop – exemplu PyCharm

In sectiunile urmatoare iti voi prezenta ambele variante, iar tu decizi cea pe care o vei folosi. Scopul este sa alegi una dintre cele 3 variante de mai sus astfel incat sa faci scrierea codului tau cat mai rapida si mai usoara.

I. Folosirea unui IDE Online – Repl.it

Vom incepe cu cea mai simpla si rapida metoda pentru a incepe sa scriem codul in Python, folosind un IDE online. IDE-ul pe care ti-l recomand se numeste Repl.it si il poti accesa apasand AICI (https://replit.com). Iti recomand sa-ti faci un cont pe site-ul lor, dupa care, odata logat la ei in platforma te vei regasi in situatia din figura 1.1:

Figura 1.1

Apasa pe butonul “new repl.it” din partea de sus (butonul albastru). Creaza-ti un proiect, selectand Python ca limbaj de programare. Ofera un nume proiectului tau si apasa pe butonul de creare. Acum, proiectul fiind creat, ti se va deschide o fereastra unde vei putea scrie codul. Partea din stanga este rezervata ierarhiei de fisiere (in viitor probabil vei avea mai multe fisiere care vor contine cod), la mijloc va fi locul unde vei scrie codul, iar in partea din dreapta va aparea rezultatul odata ce rulezi codul (apasand pe butonul RUN, de sus).

Figura 1.2

Prima linie de cod in Python

Si acum a sosit momentul sa trecem la treaba si sa scriem prima linie de cod in Python. Vom folosi un exemplu clasic, extrem de intalnit in programare, pe care il poti vedea mai jos:

print(“Hello World”)

Click pe run, iar rezultatul afisat va fi:

Hello World

Acest lucru poti vedea si in figura 1.3 de mai jos (codul in partea din stanga, iar rezultatul in partea din dreapta):

Figura 1.3

De acum inainte ai tot ce-ti trebuie sa scrii cod. Folosind acest IDE online iti va fi extrem de usor sa inveti programare rapid si usor. Pe termen lung, cand vei dori sa creezi proiecte mai complexe care implica mai multe fisiere, module si framework-uri, iti recomand sa folosesti varianta #2 despre care vom discuta in sectiunea urmatoare.


II. Folosirea unei aplicatii IDE – PyCharm

In aceasta sectiune iti voi arata cum sa folosesti un IDE (local – pe laptop sau PC) pentru a programare in Python. IDE-ul pe care ti-l recomand eu se numeste PyCharm si il poti descarca de AICI (http://www.jetbrains.com/pycharm). Iti recomand sa alegi varianta Community pentru ca aceea este gratuita.

Cum instalez si cum pornesc PyCharm?

Odata ce ai reusit sa descarci PyCharm, te poti apuca de instalare. Incepi prin a da dublu click pe executabilul descarcat, iar apoi treci prin procesul de instalare care este destul de simplu si intuitiv. La pornirea chitului de instalare vei intampina o fereastra similara cu cea din figura de mai jos:

Figura 1.4

Mai departe vei avea de facut cateva setari mici, asadar te invit sa urmaresti figurile 1.3, si 1.4 de mai jos si sa bifezi casutele exact asa cum vezi in imagini:

Figura 1.5

Figura 1.6

Pe parcurs PyCharm te va intreba daca doresti sa instalezi anumite plugin-uri. Deocamdata poti sa treci peste si poti sa dai skip, deoarece acelea nu sunt necesare in aceasta faza. In figura de mai jos iti poti alege tema pe care o doresti de la IDE-ul tau. Eu personal am mers pe cea inchisa (aka. “Darcula”), dar tu decizi cea pe care o doresti:

Figura 1.7

Cum creezi un proiect in PyCharm?

Odata ce instalarea a avut loc este timpul sa pornesti PyCharm si sa iti creezi primul proiect (vezi figura 1.8) astfel incat sa poti coda in Python:

Figura 1.8

Acum urmatorul lucru pe care il vom face este sa cream un proiect nou (sau sa deschidem unul deja existent). Vei merge la “Create New Project”, unde poti vedea ca ai mai multe optiuni. Ceea ce tu vei face este sa creezi un proiect in care vei pune codul tau. Dar nu vei pune acolo cod pur si simplu. Python functioneaza in felul urmator, ai nevoie de un proiect (gandeste-te la acest proiect ca la un folder), dupa care ai module (in acest proiect – aka. fisierele proiectului cu terminatia .py). Acestea contin codul pe care tu il vei scrie pentru ca programul sa indeplineasca scopul dorit.

Figura 1.9

Creeaza proiectul si ofera-i o denumire specifica cu ce urmeaza sa faci in el. In cazul acesta, eu am ales denumirea “PrimulProiect”. Acum se va deschide fereastra default, a proiectului curent, dupa cum poti vedea in figura de mai jos:

Figura 1.10

Odata ce am creat primul nostru proiect, urmeaza sa cream fisierul in care vom scrie codul sursa. Acest procedeu il poti vedea in cele doua figuri de mai jos:

Figura 1.11

Figura 1.12

Acum te afli in locul in care poti incepe sa scrii cod in Python, in IDE-ul PyCharm. Hai sa vedem in sectiunea urmatoare cum arata acest cod si cum il poti executa.

Doresti in continuare sa-ti aprofundezi cunostiintele de Programare? Atunci te invit sa apesi pe acest LINK si sa programezi o discutie de ghidare in IT cu colegii nostri de la TeachBit.ro care te vor indruma catre urmatoarea etapa in Programare.

Echipa TeachBit.ro

Primele linii de cod in PyCharm

Odata ce setupul de baza al PyCharm-ului a avut loc, tot ce trebuie sa facem mai departe este sa incepem sa scriem cod. Reluam codul de baza pe care l-am scris si mai devreme.

 print(“Hello World”)

Dupa asta trebuie sa apesi din bara meniului de sus “Run”, apoi pe butonul verde de “Run”, care va interpreta si va rula programul pe care l-ai creat (vezi in figura 1.13 de mai jos).

Figura 1.13

Dupa aceea te va pune sa selectezi fisierul pe care doresti sa-l rulezi (figura 1.14). Il selectezi, iar apoi in consola se va afisa rezultatul in urma executarii codului (figura 1.15).

Figura 1.14

Figura 1.15

In secventa de cod de mai jos am folosit de 3 ori functia print si vreau sa te uiti putin la rezultatul afisat. Dupa cum poti sa vezi textul este afisat de 2 ori, de fiecare data pe un rand nou (vezi figura 1.16). Acest lucru este important pentru ca Python face asta by default prin aceasta functie. Alte limbaje de programare (precum C sau C++) nu fac acest lucru si vor scrie intregul text pe o singura linie. De ce este acest lucru important? Vei vedea in sectiunea cu exercitii.

 print(“Hello World!”)

 print()

 print(“Text2”)

Rezultatul afisat:

 Hello World

 Text2

Figura 1.16

Iata mai jos o lista cu beneficiile majore care ti le ofera un astfel de IDE:

• Organizeaza mai buna a codului

• Are feature de auto-complete si sugestii de utilizare a functiilor si a claselor

• Identifica rapid greselile de sintaxa aparute in cod

• Usureaza adaugarea de framework-uri si module noi 

•Are posibilitatea integratii aplicatiei cu Git & GitHub pentru versionarea codului.

Totodata, in timp ce ai scris acest cod cu functia print, banuiesc ca ai descoperit si feature-ul de autocomplete al lui PyCharm. Este un feature pe care eu il consider extrem de util si care iti va salva mult timp pe masura ce vei incepe sa-ti creezi propriile programe si proiecte, precum si la job. Vei vedea pe parcurs ce inveti sa programezi mai bine si faci mai mult cat de util iti va fi. Astfel poti programa mult mai usor fara a avea nevoie de cunostinte legate de sintaxa exacta a liniei de cod. Python si PyCharm ne permit sa facem astfel de lucruri.

Figura 1.17

III. Folosirea unui interpretor din Windows

Daca folosesti Windows, iti poti instala Python descarcand de pe python.org (https://www.python.org/downloads/windows/) executabilul cu versiunea 3.6 (sau orice alta versiune mai noua doresti). Urmatorul pas este sa-l instalezi si sa-l pornesti. Python este acum instalat si iti recomand sa folosesti functia Search din Windows si sa-l pornesti pentru a putea incepe sa scrii cod in interpretor:

Figura 1.18

Odata pornita consola, putem scrie mai multe linii de cod care vor fi rulate odata ce apasam Enter. Iata mai jos un exemplu concret care contine si cateva elemente pe care le vom studia in capitolele urmatoare:

Figura 1.19

Dezvantajul principal in cazul folosirii unui interpretor consta in faptul ca, codul tau nu va fi salvat, ceea ce inseamna ca nu il vei putea refolosi. Aici intervin scripturile (asa cum vei vedea in sectiunea urmatoare), ca o alternativa excelenta si, bineinteles, programele scrise in cadrul unui IDE.

IV. Folosirea unui interpretor din Linux sau macOS

Un alt mod prin care poti face programare in Python este prin folosirea unui terminal (pe Linux sau macOS). In aceasta sectiune iti voi arata cum iti poti folosi terminalul pentru a scrie cod in Python. In cazul in care folosesti Linux sau macOS, cel mai probabil ai Python instalat pe PC-ul tau pentru ca aceste OS-uri folosesc multe aplicatii care au la baza limbajul. In cazul in care nu il ai instalat, foloseste urmatoarea comanda pentru a-l instala:

Pe Linux: sudo apt-get install python3.5

Pe macOS: sudo brew install python

Prima interactiune cu Python din terminal

Acum iti recomand sa scrii in terminal comanda prin care vei porni interpretorul Python: python3.5 sau python. Acum poti incepe sa scrii linii de cod, iar interpretorul le va executa una dupa alta. Mai multe detalii poti vedea in figura de mai jos. Aici cel mai simplu lucru pe care il poti face sunt operatiile de baza: adunari, scaderi, impartiri, etc. si anumite afisari simple. Dupa cum poti observa in figura urmatoare, pentru a folosi functia print, nu e nevoie de includerea unei biblioteci in mod explicit, pentru ca print este built-in in Python.

Figura 1.20

Ceva putin mai complex este folosirea anumitor variabile care retin diferite tipuri de date. In figura urmatoare, in a doua parte a imaginii am incercat sa adunam a + b, variabilei a fiind atribuit sirul de caractere Nume, iar b avand valoarea 3. Operatia de adunare nu s-a putut face in acest caz pentru ca sunt doua variabile de tipuri diferite. In ultima parte a figurii, variabilei a i-am atribuit sirul de caractere Ramon, iar %s pana la urma va tine locul pentru acel sir de caractere. Observa ultima linie de print si rezultatul ei final.

Figura 1.21

In continuare iti voi arata in ce sa lucrezi daca ai nevoie de scripturi si de ce iti este folositor tie, ca programator, din punct de vedere al timpului, sa te folosesti de acest script.

De ce avem nevoie de scripturi in Python?

Un script te poate ajuta in automatizarea muncii tale, astfel tu nu trebuie sa faci task-uri repetitive si enervante. Sa spunem ca ai un joc in care trebuie sa minezi aur. Daca vrei sa faci si altceva, iar aurul sa se mineze singur pentru tine, poti crea un script care sa te ajute in acest sens. Multi gameri folosesc aceasta metoda care este de fapt un cheat, dar de mare folos cand vrei sa duci gaming-ul la un alt nivel. De asemenea, daca iti doresti o cariera in IT, vei vedea ca nu poti rezista fara script-uri. Pur si simplu de foarte multe ori va fi necesar sa repeti aceleasi activitati, iar acest lucru este imposibil de realizat fara un script. Toti programatorii aleg sa foloseasca script-uri pentru ca astfel nu mai pierd timpul cu lucruri marunte si nu mai scrie din nou 70% dintr-un cod scris ieri.

Cum sa creezi un script in Python (pe Linux sau macOS)?

Crearea unui script in Python este adesea extrem de simplu de facut. Creezi un fisier, il salvezi, creezi un executabil si rulezi codul. In cazul nostru, aici, in Python, vom folosi un interpretor, care ia fiecare linie in parte si o executa. Un aspect important in acest caz, (al limbajelor de programare interpretate – adica asa cum este Python) sa zicem ca avem de exemplu un cod de 20 de linii, iar pe linia 13 interpretorul gaseste o eroare. Programul tau va fi executat de la linia 1 pana la linia 12, chiar daca dupa aceea executia se opreste. Vei vedea ca sunt doar cateva linii de cod pe care trebuie sa le scrii si script-ul in sine, pentru ca lucrurile sa mearga exact cum vrei si ca munca ta sa devina mai usoara. Pe Linux, daca vrei sa faci un script si nu ai mai creat asa ceva, iata cum poti face. In linia de comanda, optional, mergi in locatia (exemplu pe Desktop) in care vrei sa ti se salveze scriptul, apoi introduci urmatoarele comenzi pentru crearea fisierului:

cd ~/Desktop/

touch scriptul_meu.py

Si comanda pentru deschiderea lui cu editorul vim. Daca doresti sa folosesti orice alt editor text (fie el din GUI sau din terminal), feel free to do it:

vim scriptul_meu.py

Odata deschis fisierul, e timpul sa introduci prima linie de cod care e specifica unui script: 

#!/usr/bin/python3.8

Aceasta linie de cod se numeste shebang si specifica locatia unde se afla executabilul Python. Tine minte aceste lucruri si exerseaza-le, pentru ca de acum incolo de cate ori vei scrie un nou script, va fi nevoie sa faci acest lucru. Acum tot ce a ramas de facut este sa scrii in script, pentru inceput, o simpla adunare:

a = 2
b = 3
print(a + b)

Apoi ca sa rulezi scriptul, foloseste in linia de comanda:

python3.8 scriptul_meu.py

NOTA: Daca ai o alta versiune de Python instalata, atunci foloseste comanda cu acea versiune, de exemplu:

python3.6 scriptul_meu.py

sau aceasta comanda care va apela versiunea default, setata:

python scriptul_meu.py

Acum vine acel avantaj al Python-ului de care tot ti-am povestit, poti refolosi codul scris anterior. Cum? Scriind in linia de comanda vim scriptul_meu.py (sau folosind orice alt editor text), dupa care poti modifica continutul scriptului. Odata ce vei trece si tu peste acesti pasi pe calculator, de a face fisierul, a scrie in el si a-l executa, poti spune ca ai invatat procesul.

Concluzii

Cateva sugestii pentru tine inainte de a merge mai departe:

  1. Fiind la inceput iti recomand sa te “joci” cu interpretorul din Windows (sau Linux/macOS) exact asa cum am vorbit in sectiunea III. al acestui capitol
  2. Odata ce avansezi si te obisnuiesti cu sintaxa limbajului, poti merge mai departe sa folosesti un IDE (exact asa cum am facut in sectiunea I.)
  3. Cand esti pregatit sa faci aplicatii/programe cu o complexitate mai mare, iti recomand sa folosesti un IDE (cum este PyCharm, studiat in sectiunea II.) pentru ca iti va usura mult munca si iti va oferi foarte mare flexibilitate in scrierea aplicatiilor.

Codul scris in Python vs. alte limbaje de programare (si primul program in Python)

Ok, acum ca ti-ai facut o mica idee legata de cum arata o secventa de cod scrisa in Python, da-mi voie sa-ti faca o paralela intre acest limbaj si alte limbaje programare pentru a vedea simplitatea si eficienta de a scrie cod. Iar bun exemplu pentru a demonstra cat de simplu este acest limbaj, este numarul de linii necesar pentru a printa o propozitie pe ecran, in C++, Java sau JavaScript este necesar un numar de aproximativ 4 sau 6 linii, Python scurteaza acest proces la doar o linie. Fiecare program in parte face acelasi lucru, dar diferenta o face complexitatea si cantitatea de cod necesara intre fiecare limbaj in parte. Priveste exemplele urmatoare:

~ C++ 

In C++ secventa de cod arata in felul urmator:

 #include <iostream>

 using namespace std;

 int main()

 {

   cout << “Hello, World!”;

   return 0;

 }

~ Java 

In Java secventa de cod arata in felul urmator:

 public class HelloWorld {

    public static void main(String[] args) {

        System.out.println(“Hello World”);

    }

 }

~ JavaScript

In JavaScript, codul trebuie sa faca parte dintr-o pagina web (cu o structura HTML):

<!DOCTYPE HTML>

<html>

<body>

 <p>Before the script…</p>

 <script>

   alert( ‘Hello, world!’ );

 </script>

 <p>…After the script.</p>

</body>

</html>

~ Python

Iar Python secventa de cod arata in felul urmator (dupa cum poti vedea este mult simplificata):

print(“Hello World!”)

Exercitii

Incepand cu acest capitol, la fiecare final de capitol iti voi pune la dispozitie un set de exercitii pe care tu sa le practici. Ele te vor ajuta sa-ti intaresti in minte conceptele deja studiate si astfel vei aprofunda si mai mult studiul programarii.

Setul de Exercitii #1 

  1. Scrie un program care sa afiseze prenumele tau pe primul rand, iar pe urmatorul rand numele.
  2. Acum, modifica codul de la punctul anterior, astfel incat la afisare, prima linie (adica primul rand) sa fie goala, a doua linie sa contina prenumele, a treia linie sa fie goala, iar pe a patra linie sa apara numele.

Setul de Exercitii #2

  1. Daca ar trebui sa scrii un program care afiseaza cate o litera din numele si prenume tau, cum l-ai scrie folosind doar cunostintele din acest capitol (fara a te complica cu alte functii sau metode):

 P

 o

 p

 a

 A

 d

 r

 i

 a

 n

Setul de Exercitii #3

  1. Afiseaza prenumele astfel incat literele sa apara pe diagonala, in felul urmator:

 P

  o

   p

    a

      A

       d

        r

         i

          a

           n

Doresti in continuare sa-ti aprofundezi cunostiintele de Programare? Atunci te invit sa apesi pe acest LINK si sa programezi o discutie de ghidare in IT cu colegii nostri de la TeachBit.ro care te vor indruma catre urmatoarea etapa in Programare.

Echipa TeachBit.ro

 Capitolul 2 – Variabile in Python

In acest capitol trecem mai departe si incepem serios conceptele de programare, vorbind despre variabile. Vei vedea teoretic si practic cum se folosesc acestea pentru diferite operatii simple, cum ar fi calcule matematice si actiuni mai complexe de manipulare a valorilor in Python.


Ce este o variabila?

Atunci cand vine vorba de programare, o variabila este o locatie de memorie in care tu poti stoca valori (de acelasi tip). (Colocvial vorbind, e ca si cum ai avea un cos cu fructe, unde tu desigur poti pune diferite tipuri de fructe.) Practic, imediat ce creezi o variabila, automat rezervi un anumit spatiu de memorie. Frumusetea variabilelor in Python este ca poti defini tipul lor, urmand ca interpretorul sa decida cum sa salveze in memoria alocata anterior. Poti asigna astfel diferite tipuri de date: caractere, numere (intregi, reale), expresii booleane (True sau False), etc. Pe langa aceste tipuri de date mai sunt si cele de tipul: String, lista, tuple, dictionar despre care vom discuta in capitolele viitoare. In cele ce urmeaza le vom lua pe rand pe fiecare in parte si vom vedea cum le putem defini si cum se folosesc in programare.

Variabile de tip numere (intregi, reale)

Pentru inceput vom discuta despre variabilele de tip numar si vom invata cum sa le folosim in functie de tipul lor. In programarea “clasica” variabilele sunt impartite pe tipuri, iar in momentul crearii (declararii) unei variabile, specificarea titlului este obiligatorie. Iata mai jos un exemplu cu o parte din tipurile de variabile:

  • Numere intregi – integer (-19 sau 21)
  • Numere reale – float/double (10.9)

Pe langa tipul acestor numere trebuie sa avem in vedere si valoarea pe care o stocam intr-o variabila. Anumite numere consuma un procent mai mic de memorie (cum ar fi x = 23), iar altele au un consum de memorie mult mai mare (exemplu: x = 82124692L). 

Exemple de tipuri de date numerice folosite in Python: 

a) tipuri de date de tip int: variabila stocheaza numere intregi, sunt numerele intregi precum: 2; 34; -189; 700; -0x260; etc

b) tipuri de date de tip float: numere cu punct zecimal, sunt numerele reale, cele cu virgula: 2.5; -1.5; 700.3; 10.0; -32.54e100; 70.2-E12  etc

c) tipuri de date de tip complex sau imaginare: fac parte din multimea numerelor complexe, imaginare: 3.14j; 3e+26J; 4.53e-7; 45j

d) tipuri de date de tip long: sunt numerele ce necesita o capacitate de memorie       mai mare, sunt numere mari: 82124692L; -0x24331L; -052318172735L; -4721885298529L;

Python este construit de asa natura incat isi da seama singur de ce tip este variabila pe care noi o declaram. Cand vine vorba de numere, in Python acestea pot fi intregi (pot avea valoare peste 0 sau sub 0) sau pot fi reale (au valoare cu virgula). Daca intr-un limbaj de programare precum Java trebuie sa specificam in mod exact tipul variabilei, de exemplu: int x = 5, in Python nu este deloc necesar sa facem acest lucru. Mai jos poti sa vezi cum se declara aceste variabile si cum le putem atribuii o valoarea.

 x = 5

 y = -10

Acestea sunt exemple de variabile de tip integer (numar intreg) pe care tu le poti folosi in Python sau in alte limbaje de programare. Acest tip de variabile, dupa cum spuneam, pot fi atat pozitive cat si negative. Daca dorim sa avem numere reale (adica numere cu virgula), le putem declara astfel:

 a = 5.1

 b = 6.2

Pentru a afisa aceste numere, codul complet va fi:

 x = 5

 y = -10

 a = 5.1

 b = 6.2

 print(x)

 print(y)

 print(a)

 print(b)

Se va afisa:

 5

 -10

 5.1

 6.2

Acum, hai sa facem o operatie (matematica) cu aceste variabile, si anume sa calculam suma dintre x si y:

 suma = x + y

Printam ceea ce am scris mai devreme pe ecran:

 print(suma)

Ruland programul, rezultatul afisat va fi 15.  Acum hai sa scriem putin mai frumos. Tot ceea ce scriem cu ghilimele in Python este un sir de caractere. Astfel, vom printa in consola:

 print(“Suma este:”, suma)

In final codul va arata astfel:

 x = 5

 y = 10

 suma = x + y

 print(“Suma este:”, suma)

Si se va afisa:

 Suma este: 15

Operatori in Programare

In aceasta sectiune vom vorbi despre operatori. Sunt absolut convins ca te-ai mai intalnit cu acesti operatori pana acum (cel mai probabil in timpul scolii), ei ne ajuta sa facem acele operatii matematice de baza. Scopul operatorilor este sa atribuie (=), sa compare (exemplu: > sau <) sau sa dea o logica programelor noastre si nu numai. Dar lucrurile nu se opresc aici. Mai jos poti vedea o lista intreaga cu operatorii existenti in programare. O parte dintre acestea se aplica si in Python.

Operatorul de atribuire:=
Operatori matematici:+ (adunare), – (scadere), * (inmultire), / (impartire)% (modulo – restul impartirii) ++ (incrementarea) //NOT IN PYTHON-–(decrementarea) //NOT IN PYTHON
Operatorii de comparare:== (egal), != (diferit) < (mai mic), > (mai mare) <= (mai mic sau egal), >= (mai mare sau egal)

Operatorii logici:

and (SI logic)or (SAU logic)not (NOT –negare logica)
Operatori pe biti:& (SI), | (SAU), ^ (XOR), ~ (complement)<< (left shift), >> (right shift), >>> (zero fill right shift)

Operatori combinati: (operatie + atribuire)

+=, -=, /=, *=, %=, &=, |=, ^=, <<=, >>=, >>>=

Deja dupa cum ti-ai dat seama, acesti operatori au rolul de a face operatii matematice. Nu-ti fa griji, nu trebuie sa cunosti matematica la un nivel inalt pentru a intelege aceste elemente de baza. Pentru inceput poti folosi in exercitiile tale operatorii matematici simpli: 

+ (adunare),  2 + 3

(scadere),  2 – 3 

* (inmultire), 2 * 3

/ (impartire),  2 / 3

(atribuire de valoare),  a = 2, b = 3

== (comparatie), a == b (rezultatul intors va fi de tip boolean – True sau False)

ATENTIE: Atribuirea de valoare (=) difera de comparatie (==)!

Prima este folosita pentru a asigna valoarea din partea dreapta (mai explicit, daca este cazul, valoarea finala in urma operatiilor din partea dreapta) in variabila din partea stanga.

A doua este folosita pentru a verifica daca doua valori sunt sau nu egale. In cazul in care conditia este adevarata (True), deducem ca cele doua valori sunt egale, altfel ele sunt diferite, iar prin verificare se va returna false.

Acum ca am invatat operatiile de baza, hai sa ne focusam pe operatia % (pronuntat “mod”). Aici ma voi referi la o operatie matematica. Operatia a % b intoarce valoarea restului impartirii lui a la b. Daca folosim if a % b, se va verifica daca restul impartirii lui a la b este sau nu egala cu 0 (zero). Daca da, valoarea expresiei va fi True, asltfel daca exista un rest diferit de 0, oricare ar fi ea, valoarea va fi False. Iata mai jos o lista mai lunga de exemple:

 >>> 10 + 1

 11

 >>> 10 – 9

 1

 >>> a = 2

 >>> b = 3

 >>> a * b

 6

 >>> a / b

 0.6666

 >>> a % b

 2

 >>> b % a

 1

 >>> a > b

 False

 >>> a < b

 True

 >>> a == b

 False

 >>> a += 2

 >>> a

 4

O alta expresie pe care o putem face este += sau -=, *=, /= sau %=.

Cu varianta += putem face o adunare, in cazul nostru, variabilei x i se va da o noua valoare rezultata din valoarea lui plus elementul din dreapta. Astfel pentru:

 x = 5

 y = 10

 suma = x + y

 print(suma)

 suma += 2

 print(“Suma este:”, suma)

Se va afisa:

 15

 Suma este: 17

Iti recomand sa iei acelasi exemplu, dar sa inlocuiesti operatia matematica efectuata pe variabila suma cu ceilalti operatori, pe rand, pentru a vedea rezultatul final:

 suma -= 2

 suma *= 2

 suma /= 2

 suma %= 2

Printeaza rezultatul dupa fiecare operatie pentru a vedea si a intelege mai bine procesul care a avut loc.

Variabile de tip String (siruri de caractere) in Python

In aceasta sectiune vom vorbi despre siruri de caractere (aka. String-uri), un tip de variabila extrem de des intalnit si folosita in programare. Daca stam sa ne gandim, cand vine vorba de calculatoare cuvintele sunt peste tot, deci implicit si String-urile vor fi peste tot. Google este un motor de cautare care se bazeaza exclusiv de cuvintele care sunt introduse de catre un utilizator pentru a oferi cele mai buna rezultate (in urma unei analize semantice si a unui algoritm extrem de sofisticat). 

 trei_litere = “Abc”

 print(trei_litere)

Daca rulam tot ceea ce am scris pana acum in program, va aparea pe ecran:

 Abc

Daca ar fi sa scriem:

 trei_litere = trei_litere + ‘a’

 print(trei_litere)

vom vedea pe ecran ca lui Abc i se va mai adauga inca o litera, inca un string care va fi a. Astfel, ceea ce va aparea printat pe ecran va fi:

Abca

NOTA: in Python toate variabilele (int, float, string, obiecte) sunt scrise cu litere mici

String-urile ne ajuta foarte mult sa operam cu date de tip text. In cadrul acestora exista numeroase functii built-in pe care le putem folosi pentru a ne face viata mai usoara. Una dintre acestea este functia len() care ne ofera numarul de litere din cadrului unui string. Iata mai jos un exemplu de folosire a acesteia:

 print(len(trei_litere))

si vom primi numarul de caractere din acest sir trei_litere. In final pentru codul (atentie, ultimul print se intinde pe doua linii):

 trei_litere = “Abc”

 print(trei_litere)

 trei_litere = trei_litere + ‘a’

 print(trei_litere)

 print(len(trei_litere))

 print(“String-ul nostru este”, trei_litere, “si are lungimea de”, len(trei_litere))

Rezultatul afisat va fi:

 Abc

 Abca

 4

 String-ul nostru este Abca si are lungimea de 4

String-urile pot fi foarte utile in comunicarea dintre program si utilizator pentru ca sunt constituite din caractere si pot forma propozitii. Chiar si un simpu “Yes” sau “No” pot face schimbari radicale intr-un program. Elementele primare din string-uri sunt caracterele, iar acestea pot forma siruri de caractere, de exemplu in momentul in care sunt organizate in cuvinte si propozitii. Iata mai jos modul in care creeam o variabila de tipul String.

 sirA = “Dimineata am baut”

 sirB = ‘cafea’

 sirC = ‘ceai’

Ele pot fi asignate unei variabile utilizand si ghilimele, dar si apostroafe. Avand o astfel de variabila String, poti avea acces la fiecare caracter dintr-un sir de caractere cu ajutorul unui index (care este folosit pentru a identifica valoarea unui caracter dintr-un sir aflat la o anumita pozitie – index). Primul caracter (deci si prima pozitie din sir) va avea intotdeauna valoarea 0, urmatorul caracter va avea pozitia 1, apoi pozitia 2 si asa mai departe. Pentru a lucra cu caracterele dintr-un String, vom folosi aceste paranteze [ ] si valoarea indexului, dupa cum urmeaza:

 print(“sirA[0] este “, sirA[0])

Care ne va afisa:

 sirA[0] este D

Observa cum dupa apelarea de print se va afisa ceea ce exista in ghilimele (care contin si un spatiu imediat dupa cuvantul este), dupa care afiseaza litera D, fiind primul caracter pozitionat pe indexul 0. Pentru a afisa ultimul caracter din sirul sirA, va fi nevoie sa accesam ultima pozitie din sir. Putem face asta prin mai multe metode, cea mai simpla fiind:

 print(sirA[16])

care va afisa: t

Daca dorim ca doar cuvantul neata sa fie afisat putem folosi parantezele patrate impreuna cu doua punte in felul urmator:

 print(sirA[4:9])

Partea interesanta este ca nu apare eroare (poate la asta te-ai asteptat) atunci cand scrii 

 print(sirA[-4:-1])

Ce sa va intampla? Ce se va afisa? Se va afisa al 4-lea element numarand de la capatul cu indexul maxim (din dreapta), catre stanga (catre indexul 0). Se va afisa bau, unde b se afla pe pozitia -4, a se afla pe pozitia -3, u se afla pe pozitia -2, iar la -1 se incheie afisarea caracterelor din sir (fara a lua in calcul litera t). Daca vrem sa cream un al patrulea sir de caractere denumit propozitie care sa fie o propozitie compusa, iar rezultatul dorit sa fie Dimineata am baut cafea, putem incerca urmatoarea secventa de cod:

 sirA = “Dimineata am baut”

 sirB = “cafea”

 propozitie = sirA + sirB

 print(propozitie)

Ce se va afisa mai exact?

 Dimineata am bautcafea

Pentru a adauga un spatiu poti sa pui cu plus in felul urmator:

 propozitie = sirA + ‘ ‘ + sirB

Incearca si tu pe propriul PC. Ce va afisa secventa urmatoare?

 print(“Ieri” + ” d” + sirA[1:] + ‘ ‘ + sirB)


De asemenea, daca doresti ca afisarea sa aiba o anumita vizualizare, poti afisa cu aceeasi functie print pe mai multe linii folosindu-te de ‘\n’. 

 trei_litere = “Abc\n”

 print(trei_litere)

Se va afisa:

Abc

Alte utilitati ale functiei print

Poate ca se ruleaza un program, iar pana cand se ajunge acolo vrei sa folosesti un mesaj intermediar:

 mesaj=”Please wait while the program is loading”

 print(mesaj)

Legat de concatenarea sirurilor de caractere, trebuie specificat faptul ca acestea trebuie sa fie de acelasi tip, mai multe detalii in exemplul ce urmeaza

 a=42

 print(‘My age is’ + a)

acest program urmand sa semnaleze o eroare de tipul

 Traceback (most recent call last):

File “<input>”, line 1, in <module>

‘My age is ‘ + a

TypeError: can only concatenate str(not “int”) to str

Iar dupa cum observi, daca citesti cu atentie eroarea, iti poti da seama foarte usor care este problema codului. Aceasta regula nu se aplica pentru orice eroare, uneori nu iti poti da seama exact care este greseala, dar este un prim pas important in depanarea posibilelor erori. Iar pentru a depana aceasta eroare te poti folosi de urmatorul format: 

 a=42

 print(‘My age is’+str(a))

Poti folosi si separator, ca in exemplul de mai jos

 print(‘My age’,’ is 21’, sep=’\n’)

Cu rezultatul:

My age

is 21

La fel cum este utilizatorul sep, la fel se poate face si cu cel de tip end:

 print(‘Prima propozitie’, end=’.’)

 print(‘A doua propozitie’, end=’.’)

 print(‘A treia propozitie.’)

Afisandu-se: 

 Prima propozitie.A doua propozitie.A treia propozitie

Poti folosi si o combinatie intre aceste separatoare, precum:

print(‘A’,’B’,’C’, sep=’, ‘, end=’.’)

cu rezultatul: 

 A,B,C

Exerseaza si vezi cat de multe poti face cu lucruri atat de simple. String-urile, deci atribuirea de caractere unei variabile, sunt folosite in toate limbajele de programare. Daca vei invata totul despre cum functioneaza ele specific in Python, iti va fi mult mai usor sa le folosesti in Java, C++ sau alte limbaje. Nu uita ca programarea se invata numai prin practica, iar exercitiile pe care le-am pregatit pentru tine iti pot fi foarte utile.

Exemplu #2

Si acum hai sa iti explic ceea ce ziceam in capitolul anterior, si anume, de ce Python este un limbaj accesibil si usor de scris. Atunci cand creezi o variabila in Python, nu e nevoie sa specifici explicit rezervarea unei spatii de memorie sau tipul ei. Nu trebuie sa te complici sa “ii spui codului” ca variabilele nume si prenume vor contine cate un sir de caractere, in variabila varsta va fi un numar intreg, iar variabila salariu va contine un numar real, ci pur si simplu aloci valorile. Iata exemplul descris:

 nume = “Pop”

 prenume = “Mihaela”

 varsta = 23

 salariu = 3800.98

Daca vrei de asemenea sa afisezi aceste variabile, in print-ul lor nu trebuie sa precizezi care este tipul de variabila care urmeaza sa fie afisata, ci doar variabila:

 print(nume)

 print(prenume)

 print(varsta)

 print(salariu)

Dupa asta se va afisa:

 Pop

 Mihaela

 23

 3800.98

Vezi cum, desi numele si prenumele au fost alocate in varibile cu ajutorul ghilimelelor, la afisare ghilimelele au lipsit, iar pentru Python cu versiunea 3.5 s-au afisat numele si prenumele cu apostroafe. Reamintesc, modul de memorare a unor siruri de caractere intr-o variabila se face folosind ghilimele, iar daca e vorba de un numar (intreg, real, etc) atunci doar se specifica valoarea.  Un alt aspect important de mentionat aici este ca variabilele isi pot schimba valoarea. Exemplu concret: Daca in cazul nostru personajul Mihaela se casatoreste si isi schimba numele din Pop de exemplu in Stan, in cod vom putea introduce o noua linie in care alocam numelui o noua valoare: nume = “Stan”.

Daca trece un an, Mihaela Stan implineste 24 de ani. Cum ii adaugam in plus un an? 

varsta = varsta + 1 sau o alta metoda simpla ar fi: varsta += 1 sau si mai simplu, schimbam direct 23 in 24: varsta = 24

Continuand pe acest exemplu: Daca vrem sa aflam restul impartirii salarului (care in cazul nostru este de tip float, fiind numar real) la 1000, scriem salariu % 1000, iar asta ne va afisa: 800.98. Asta facem prin operatie MOD (%).

Acum poti trece si tu prin acesti pasi pentru a exersa. Te poti juca in foarte multe moduri pentru a “testa” limitele. Vor urma alte exercitii mai complexe. Pana atunci, poti incerca sa faci alte lucruri: adaugare de elemente, scaderi, diferite operati, etc. Tine minte, valoarea variabilelor se poate schimba in functie de conditiile si informatia introdusa in programul la care lucrezi. Practic, orice program are in spate multe variabile ce lucreaza intre ele sa faca posibila functionarea. Odata ce vei invata sa lucrezi cu variabile, logica din spatele programarii ti se va parea destul de simpla si mai ales interesanta. 

Comentarea codului in Python

In Python, precum si in marea majoritate a limbajelor de programare, avem la dispozitie sa comentam diverse aspecte ale codului. Aceste comentarii pot fi extrem de benefice din mai multe puncte de vedere: 

unul dintre ele ar fi faptul ca poti lasa comentarii despre ce face o secventa de 

cod – o functie, o clasa, etc (astfel documentezi codul, iar tu sau alte persoane veti 

intelege ceea ce face acesta chiar si dupa cativa ani). 

un alt motiv ar fi sa invalidezi o secventa de cod deja existenta (adica vei face 

ca acea secventa sa nu fie compilata si executata). 

Acum propun sa iti arat 2 exemple astfel incat tu sa intelegi mult mai bine la ce ma refer:

 # Linie cu comentariu

 print(“Se va afisa acest text”) # afisare

 “””

 print (Nu se vor afisa aceste linii)

 Bla-bla

 “””

Dupa cum poti vedea in cele 2 exemple de mai sus, avem 2 moduri prin care putem lasa un comentariu: primul fiind cel cu # (diez), iar cel al 2-lea fiind cel cu ””” (3 ghilimele pentru a incepe sectiunea comentata si alte 3 ghilimele pentru a indica finalizarea sectiunii comentate). Ambele variante sunt folosite, doar ca varianta a doua ne permite sa comentam secvente mult mai lungi (care se intind pe mai multe randuri) de text.

Citirea datelor de la tastatura in Python

Inainte de a incepe sa citim datele dintr-un fisier, vreau sa-ti arat cum o poti face de la tastatura. Probabil ca ai mai interactionat cu citirea datelor de la tastatura in capitolul 2, in sectiunea de exercitii, iar daca nu ai reusit sa faci acel exercitiu, nici o problema pentru ca iti voi explica in cele ce urmeaza ce inseamna si cum o poti face. Citirea datelor de la tastatura (aka. Citirea datelor scrise de catre utilizator direct prin consola) inseamna sa rulezi un program, iar aceasta sa-ti ceara introducerea datelor direct de la tastatura. Este o metoda foarte buna de antrenament si de verificare a faptului ca programul tau functioneaza corect. In aplicatii reale nu vei interactiona foarte mult cu acest mod, decat atunci cand ii ceri utilizatorului sa o faca (in rest vei opera cu fisere sau date transferate prin retea). Iata mai jos un exemplu de citire a datelor de la tastatura pe care te incurajez sa-l exersezi si sa-l adopti in programele tale pentru ca poate fi o metoda foarte buna de testare a programelor lor. Modul prin care putem citi dintr-un program in Python datele user-ului este prin folosirea functiei input()in felul urmator:

 question = input (“Salut! Cum te simti astazi? “)

 print(“Raspunsul user-ului este:”,question)

In urma folosirii codului input(), programul va stoca in variabila question prima linie de text care va fi introdusa in consola. Un aspect important consta in faptul ca liniile citite sunt de tipul String, iar asta iti ofera multa flexibilitate pentru ca astfel le poti interpreta si modifica asa cum doresti tu. Functia input() o poti folosi si fara sa scrii un mesaj intre paranteze.

Exercitii

Felicitari pentru faptul ca ai ajuns la sectiunea de exercitii din acest capitol. Iata programele pe care te rog sa le creezi:

1) Creeaza cate o variabila de tipul: string, int si float, dupa cum urmeaza:

  • Variabila de tip int va retine valoarea 20
  • Variabila de tip int va retine valoarea 5
  • Variabila de tip float va retine valoarea 8.73
  • Variabila de tip string retine valoarea “Python
  • Variabila de tip string retine valoarea Imi place programarea in
  • Variabila de tip string retine valoarea pentru ca suma acestor 2 numere este:

Avand aceste variabile, afiseaza pe ecran un mesaj (care sa aiba cat de cat sens 😀 ) cu acestea.

2) Scrie un program care calculeaza valoarea pentru urmatoarele variabile de tip double:
x = -7 + 4/3*5
y = -7 + 4/(3*5)

z = (-7 + 4/3)*5

Afiseaza aceste valori in felul urmator pe ecran:

x = …valoare care se va calcula pentru x…

y = …valoare care se va calcula pentru y…

z = …valoare care se va calcula pentru z…

Observa care sunt diferentele dintre cele trei valori afisate.

Doresti in continuare sa-ti aprofundezi cunostiintele de Programare? Atunci te invit sa apesi pe acest LINK si sa programezi o discutie de ghidare in IT cu colegii nostri de la TeachBit.ro care te vor indruma catre urmatoarea etapa in Programare.

Echipa TeachBit.ro

Capitolul 3 – Instructiuni conditionale (if, for, while)

In acest capitol vom discuta despre elementele de baza din programare care dau logica programelor noastre. Aceste instructiuni ne contureaza programele si le ofera logica, pe baza careia sa iau decizii cu privire la rezultatul pe care il vor genera. Cand vorbim despre instructiunile conditionale ale limbajelor de programare, avem la dispozitie urmatoarele:

Instructiunea if –  daca se respecta conditia X, atunci se intampla Y

Instructiunea for –  pentru o anumita conditie X, cat timp aceasta este respectata se intampla Y

•  Instructiunea while –  cat timp se respecta conditia X, se intampla Y

1) Instructiunea if

Daca ai mai avut de-a face cu programarea, atunci cel mai probabil te-ai intalnit cu aceasta instructiune if. Ea este una dintre cele mai folosite si cunoscute instructiuni si este intalnita in marea majoritate a limbajelor de programare (C/C++, Java, Python, PHP, Ruby, Bash, etc). Scopul ei: sa verifice valoarea de adevar a unei expresii (ex: “5 > 3?”, aceasta expresie este adevarata). In cazul in care expresia este adevarata se va merge mai departe cu executarea instructiunilor din blocul IF, iar daca este falsa, se sare peste tot ce apare in acel bloc. Asadar, sintaxa de cod arata in felul urmator:

 if conditie:

    instructiune_1

    instructiune_2

 if conditie_2:

    instructiune_3

    instructiune_4

La nivel de baza asa se foloseste instructiunea if. Va exista o conditie care va rezulta o valoare de adevar (fie ea adevarata sau falsa). In cazul in care aceasta valoare este adevarata (ex: 5 > 3), se vor executa instructiunea 1, instructiunea 2 (si celelalte daca exista in bloc). Altfel, in cazul in care nu este adevarata conditia (de exemplu pentru 5 > 8), programul va trece de blocul de date if si nu se vor executa cele 2 instructiuni. Poate te intrebi ce reprezinta aceste conditii. Ei bine, conditiile din instructiunea IF pot fi operatii (comparatii) matematice, precum cele de mai jos:

A > B – se verifica daca A este mai mare ca B

A < B – se verifica daca A este mai mic ca B

A >= B – se verifica daca A este mai mare SAU egal ca B

A <= B – se verifica daca A este mai mic SAU egal ca B

A == B – se verifica daca A este egal cu B

A != B – se verifica daca A este diferit de B

Toate acestea sunt operatii matematice care vor rezulta o valoarea de adevar: fie ea falsa sau adevarata. Daca instructiunea IF are o conditie ADEVARATA, atunci va continua cu executarea instructiunilor dupa doua puncte “:”, aliniate corespunzator, in caz contrar (daca acea conditie este FALSA), se va trece peste acele instructiuni. Da-mi voie sa-ti dau un exemplu pentru a intelege mai bine :

 a = 5

 res = 0

 if a > 3:

    res = a + 1

 print(res)

Acum, care crezi ca va fi rezultatul afisat al secventei de cod de mai sus? Dupa cum probabil ai intuit, rezultatul este 6. Iar acum haide sa vedem de ce. Initial am declarat doua variabile (a si res), dupa care am creat un bloc de instructiuni folosind if. Prin el am testat (am verificat) daca valoarea lui a este mai mare decat numarul 3

Expresia aceasta este adevarata pentru propozitia “5 este mai mare decat 3, ceea ce inseamna ca programul nostru merge mai departe si intra in blocul de date if, unde are loc acea operatie matematica. Acolo se atribuie lui res rezultatul adunarii lui 1 cu 5, adica 6. Astfel, in momentul afisarii, rezultatul res va fi 6.

NOTA: Un aspect foarte important la codul precedent consta in : (semnul doua puncte) aflate dupa expresia logica din cadrul if si spatiul (echivalentul unui TAB) din fata instructiunilor 1, respectiv 2. In programarea “clasica” se folosesc acolade { } pentru a indica continutul unui bloc de instructiuni. In Python, pentru a pastra lucrurile cat mai simple cu putinta, se foloseste acest spatiu la inceputul fiecarei instructiuni din cadrul unui bloc de date. Daca nu apare spatiu la inceputul instructiunii dintr-un bloc conditional (if, for, while), atunci se va considera faptul ca acea instructiune nu apartine blocului. 

In exemplul de mai jos voi modifica conditia din cadrul instructiunii if, iar rezultatul va fi unul diferit:

 a = 5

 res = 0

 if a > 8:

    res = a + 1

 print(res)

Atunci rezultatul ar fi fost total diferit: valoarea afisata a lui res, in acest caz, este 0. De ce? Pentru ca aici a (care are valoarea 5) este mai mic fata de 8, iar expresia a > 8 devine falsa, deci programul nu va mai executa codul dintre acolade dupa cele doua puncte, aliniate corespunzator, ci va merge mai departe la afisarea valorii lui res. La executare se va afisa 0. In sectiunea de exercitii de la sfarsitul acestui capitol vei avea ocazia sa practici mai mult instructiunea if pentru ca vei avea mai multe programe pe care sa le creezi.

Instructiunea else

Instructiunea if este extrem de benefica in programare pentru ca ne permite sa comparam sau sa luam anumite decizii logice pe baza rezultatului conditiei (adevarat sau fals). De multe ori in programare vor exista situatii in care trebuie sa verificam mai multe conditii si sa luam decizii pe baza lor. Unele conditii sunt adevarate intr-o anumita situatie, iar altele nu. Forma generala a acestor conditii alternative poate arata in felul urmator:

 if conditie:

    instructiune_1

    ….

 else:

    instructiune_2

    …

Dupa cum poti sa vezi, avem if cu prima conditie (care daca este adevarata va fi executata instructiunea 1), iar in cazul in care aceasta conditie nu este adevarata se ajunge la executarea instructiunii 2 din else. Hai sa luam un exemplu prin care sa intelegi mult mai bine ce vreau sa spun:

 a = 2

 res = 0

 if a > 3:

    res = a – 1

 else:

   res = a + 1

 print(res)

In acest exemplu poti sa vezi ca in cazul in care a este mai mare decat 3, atunci res va avea valoarea a – 1. Daca aceasta conditie este falsa (a nu este mai mic decat 3, ceea ce in acest exemplu asa este), programul va trece de instructiunile din blocul if si va merge mai departe in blocul else. Aici va executa instructiunea de adunare res = a + 1, iar apoi va afisa rezultatul 3. Orice valoarea a lui a care nu respecta a > 3, va ajunge sa execute instructiunea din blocul else. Daca ar fi sa mergem mai departe si sa fim si mai specifici in alegerea rezultatului dorit, putem structura if in formatul urmator:

 if conditie_1:

    instructiune 1

    …

 elif conditie_2:

     instructiune_2

     …

 else:

    instructiune_3

     …

 …

Iar mai jos poti sa vezi exemplul:

 a = 2

 res = 0

 if a > 3:

    res = a – 1

 elif a == 3:

   res = a

 elif a < 3:

   res = a+1

 else:

   print(“Nu exista un rezultat pentru res.”)

 print(res)

In exemplul de mai sus poti sa vezi in detaliu cum poti sa folosesti instructiunea if, combinand si instructiunea else. Indiferent daca este vorba de elif sau pur si simplu else, putem executa instructiuni diferite daca conditia initiala (din primul if) nu a fost indeplinita. Acesta este o metoda foarte buna pe care o putem folosi cand vrem sa rezolvam anumite probleme (cu programul nostru) pentru ca ne va fi mult mai usor sa filtram si sa executam instructiunile corecte. In final se va afisa 3.

 

Exemplul #2

Inainte de a merge mai departe propun sa mai luam un exemplu. De data aceasta iti vom rezolva o problema de programare care suna cam asa:

“Fiind data nota unui elev să se afișeze dacă acesta este corigent, promovat sau premiant.”

Pentru a rezolva aceasta problema trebuie sa ne gandim la toate scenariile posibile:

Q1: In ce situatie ramane un elev corigent la o materie?

A: In situatia in care media lui este sub 5.

Q2: In ce situatie va fi un elev promovat la o materie?

A: In situatia in care media lui este o nota mai mare sau egala cu 5.

Q3: In ce situatie va fi un elev premiant la o materie?

A: In situatia in care media lui este 10 la materia respectiva.

Acum ca am spart aceasta problema in mai multe bucati, haide sa le punem cap la cap folosindu-ne de instructiunile invatate anterior:

 notaElev = 10

 materie = “Matematica”

 if notaElev < 5:

    print(“Elevul este corigent la materia: “, materie)

 elif notaElev >= 5 and notaElev < 10:

    print(“Elevul a promovat materia: “, materie)

 elif notaElev == 10:

    print(“Elevul este premiant la materia: “, materie)

 else:

    print(“Nota introdusa nu este corecta”)

Care crezi ca va fi mesajul afisat pe ecran? Ai ghicit, este vorba despre mesajul din cel de-al treilea bloc if

 Elevul este premiant la materia: Matematica

Daca vei incerca sa modifici notaElev, vei putea vedea cum rezultatul va fi diferit in functie de valoarea pe care o atribui.

2) Instructiunea for

Mergand mai departe cu subiectul legat de instructiunile conditionale din programare, am ajuns la instructiunea for. O instructiune care ne permite sa-i spunem programului nostru sa execute un cod in mod repetat (atat timp cat se respecta o conditie). Gandeste-te in felul urmator: cum ar fi daca am avea 100 operatiuni de verificat, iar in urma fiecareia sa efectuam un anumit calcul sau sa afisam un rezultat. Cu cele invatate pana acum, am vazut ca se poate face asta, doar ca mica problema ar consta in faptul ca ar trebui sa facem totul manual. Practic, pentru fiecare operatiune de verificare (folosind cate un if), ar trebui sa scriem manual fiecare secventa de cod. Problema cu metoda asta e ca necesita mult timp, nu e scalabila, iar in timp va consuma multa memorie. Hai sa-ti dau un exemplu concret. Iata mai jos o secventa de cod scrisa intr-un mod “clasic”:

 i = 0

 suma = 0

 a = 5

 if i == 0:

   suma = suma + a

   i += 1

 if i == 1:

   suma = suma + a + i

   i += 1

 if i == 2:

   suma += a + i

   i += 1

 if i == 3:

   suma += a + i

   i += 1

 print(“Suma este: “, suma)

In aceasta secventa poti sa vezi ca am calculat o anumita suma in functie de variabila a si i. Rezultatul acestei sume este: 26. In aceasta situatie, a este pur si simplu o variabila int careia i-am asignat o valoare, iar i este un iterator (o variabila care contorizeaza numarul de procesari). Dupa fiecare calculare a sumei, acest iterator i va fi incrementat (prin i+=1), este echivalenta cu i = i + 1 iar valoarea acestuia va creste cu 1. 

ATENTIE: In Python nu putem folosi i++. In programarea in Java, C++, expresia i++ este echivalenta aici in Python cu i = i + 1;. Acum hai sa-ti arat aceeasi secventa de cod, dar de data asta scrisa cu for:

 suma = 0

 a = 5

 ii = [0, 1, 2, 3]

 for i in ii:

   suma += a + i

 print(“Suma este: “, suma)

Dupa cum poti sa vezi in aceasta secventa de cod, lucrurile au fost mult simplificate cu ajutorul lui for specificand urmatoarele:

1. In el am declarat o variabila de tip lista (mai multe detalii in capitolul 5) denumit ii care contine valori de la 0 la 3.

2. In cadrul instructiunii for, cu ajutorul keywordului in, am specificat faptul ca variabilei nou create i se vor aloca (pe rand) fiecare valoare in parte existenta in lista.

3. Aceasta bucla se va executa pana cand variabila i a parcurs fiecare element din lista ii.

Dupa cum poti sa vezi, in aceasta situatie for face diferenta dpvd. al codului, al executiei acestuia si al memorie consumate. Ideea aici consta in task-uri repetitive. Prin for putem crea bucle (loops) care sa verifice/opereze diferite secvente de cod, in mod repetat. 

Vei vedea putin mai tarziu in aceasta carte, cum putem folosi for atunci cand vine vorba de structuri de date (parcurgerea, modificarea, verificarea lor), de clase si obiecte, iar astfel vei avea o idee mult mai buna despre utilizarea acestei instructiuni. Dupa cum am spus si la inceputul acestui capitol, instructiunile conditionale (if, for, while) stau la baza majoritatii limbajelor de programare si este modul prin care noi putem programa calculatorul, astfel incat sa ne folosim intr-un mod cat mai simplu si eficient de resursele acestuia. Mai jos poti sa vezi cum arata secventele de cod exemplificate mai devreme.

Pe langa acest exemplu de folosire a unei liste in cadrul for,se mai poate folosi functia range(). Aceasta functie va genera un sir de numere in functie de parametrul acordat. Iata un exemplu din interpretorul Python:

 >>> range(4)

 [0, 1, 2, 3]

 >>> range (8)

 [0, 1, 2, 3, 4, 5, 6, 7]

Asadar, avand acest gand in minte, putem optimiza codul de mai devreme, astfel:

 suma = 0

 a = 5

 for i in range(4):

   suma += a + i

 print(“Suma este: “, suma)

Dupa cum poti sa vezi, am eliminat lista precedenta ii si am folosit functia range() in cadrul for. Rezultatul acestei secvente va fi acelasi:

 Suma este: 26

 

Exemplul #2

Acum vom lua un alt exemplu de problema de programare pe care o vom putea rezolva cu ajutorul instructiunii invatate anterior:

“Se dau trei numere naturale a b x. Sa se verifice daca numarul x apartine intervalului [a,b].”

In cazul acesta ne vom seta un interval aleator (in exemplul de mai jos am ales de la 3 la 9) si vom parcurge fiecare numar intreg din interval pana in momentul in care il gasim pe x. Daca x apartine intervalului vom afisa un mesaj afirmativ si vom intrerupe parcurgerea buclei mai departe, iar in cazul in care x nu apartine intervalului, atunci vom afisa un mesaj corespunzator. Iata rezolvarea acestei probleme in secventa de cod de mai jos:

 a = 3

 b = 9

 x = 4

 for i in range(a,b+1):

  if x == i:

    print (“x se afla in intervalul [a,b]”)

    break

  if i == b:

   print (“x nu se afla in interval”)

Dupa cum poti vedea, am creat o bucla for pe care o iteram de la 4 la 9 prin functia range (care primeste ca argument o valoare de start si una de final). Apoi in interiorul for comparam valoarea lui x cu valoarea lui i din momentul iteratie, iar in cazul in care rezultatul este adevarat (x == i) se va afisa mesajul pe ecran si bucla se va opri (prin instructiunea break). De ce folosim break pentru a opri bucla? Pentru odata gasita valoarea lui x in interval, nu mai are sens sa cautam mai departe (astfel “economisim” consum de memorie si procesare). Rezultatul afisat in acest caz va fi:

 x se afla in intervalul [a,b]

Mai departe te invit pe tine sa testezi cu valori diferite ale lui x. Incearca cu x = 1, x = 8, x = 10, x = -1, x = 5.6. Ce rezultate ai obtinut si de ce? Noteaza raspunsul in caietul tau de notite.

3) Instructiunea while

Instructiunea while are o functionalitate similara cu cea de for, doar ca se foloseste putin diferit. Cand folosim while putem gandi problema in felul urmator: cat timp se intampla X, executa Y. Pe de alta parte, cand folosim for, gandim problema in urmatorul mod: pentru o anumita conditie X, se intampla Y. Cele 2 abordari seamana, dar sunt usor diferite (sunt folosite in contexte diferite). Buclele for sunt folosite mai des in momentul in care se cunoaste numarul fix de iteratii care trebuie sa aiba loc pe parcursul rularii programului, iar while folosim cand nu cunoastem acest numar. O bucla while se poate folosi cand dorim sa rulam un program la infinit (prin while True). Deci formatul standard pentru aceasta bucla este: 

 contor = 0

 while contor < 100:

        instructiune 1

        …

        contor += 1

In cazul instructiunii while (sau orice bucla in general) trebuie sa fim atenti sa nu generam o bucla infinita (un program care ruleaza la nesfarsit si consuma resurse fara un scop). In exemplul de mai sus, acest lucru s-ar fi produs daca instructiunea contor += 1 nu ar fi fost introdusa (contor ar fi ramas la valoarea 0 si bucla ar fi rulat in continuu pentru ca valoarea acestei variabile nu se modifica). Sa reluam secventa de cod de mai devreme:

 suma = 0

 a = 5

 ii = [0, 1, 2, 3]

 for i in ii:

   suma += a + i

 print(“Suma este: “, suma)

Iar acum iata aceeasi varianta, dar cu instructiunea while:

 suma = 0

 a = 5

 i = 0

 while i <= 3:

       suma += a + i

       i += 1

 print(“Suma este: “,suma)

Exemplul #2

In aceasta sectiune propun sa luam exemplul #2 de la sectiunea precedenta (cea cu instructiunea for) si sa “convertim codul” din for in while. Iti reamintesc enuntul problemei si iata mai jos si rezultatul acestui cod:

“Se dau trei numere naturale a b x. Sa se verifice daca numarul x apartine intervalului [a,b].”

 a = 3

 b = 9

 x = 5

 i = a

 while i <= b:

  if x == i:

      print (“x se afla in intervalul [a,b]”)

      break

  if i == b:

      print (“x nu se afla in interval”)

  i += 1

Rezultatul in urma executarii secventei de cod va fi acelasi ca in cazul folosirii for. Intentia mea a fost sa-ti arat inca odata cum poti folosi si cum poti sa interschimbi cele doua instructiuni. Vei vedea si in exercitiile urmatoare (si in capitolele viitoare) ca exista situatii in care folosirea while are mai mult sens fata de for (si este chiar mai eficient dpvd. computational) si invers.

Exercitii

Felicitari! Acum ai ajuns la sectiunea in care e timpul sa creezi tu (cu cele invatate) propriile programe folosind Python. Te rog sa incerci pe cat posibil sa faci singur aceste exercitii, sa faci research pe Google doar daca lipseste ceva esential (fara sa cauti direct solutia) sau daca nu stii ce ai gresit.

1) Creeaza un program care determina daca un numar (introdus de la tastatura) este par sau impar. Se va afisa (print) in terminal un mesaj similar cu: “Numarul introdus X este par”, in cazul in care numarul este par, iar “Numarul nu este par” in rest.

NOTA: un numar este par daca se poate imparti la 2. Exemplu (2, 4, 8, 24150, etc.)

2) Creeaza un chestionar de intrebari pe care o persoana din departamentul de resurse umane le poate adresa la interviul de angajare. Vor exista 5 intrebari (similare cu cele de mai jos) pe care le vei adresa persoanei care va rula programul si care va putea sa le raspunda prin inputul sau de la tastatura. In timpul executiei programului, acesta stocheaza datele, iar la sfarsitul acestor intrebari se vor afisa sub forma urmatoare: 

“Canditatul X a raspuns astfel la intrebarile de mai sus: …”

Intrebarile: “Cum te numesti ?”, “Ce job iti doresti ?”, “In cat timp crezi ca poti obtine acest job ?”, “Care sunt pasii pe care trebuie sa-i urmezi pentru a te putea angaja ?”, “De cand doresti sa incepi ?”

3) Creeaza un program care determina daca un cuvant (string) introdus de catre utilizator (de la tastatura) este Palindrom sau nu. Un palindrom este un sir de caractere care citit de la stanga la dreapta sau de la dreapta la stanga ramane neschimbat.

Exemplu: lupul, capac, apa, cojoc – toate se citesc la fel din ambele parti.

WHILE  / FOR

In aceasta parte a sectiunii practice ne vom juca putin si vom face putina matematica (de fapt, calculatorul, nu noi… 😀 ):

4.1) Calculeaza suma tuturor numerelor de la 1 la 100. Creeaza o varianta a programului folosind bucle FOR, iar alta varianta folosind bucle WHILE. Afiseaza rezultatul pe ecran intr-un format precum: “Suma numerelor de A la Z este… “.

4.2) Dinamizeaza programul prin adaugarea optiunii de introducere a celor 2 numere (nr. de inceput si cel de sfarsit) de la tastatura, de la punctul anterior.

5) Creaza un joc “Hartie-Piatra-Foarfece” la care participa 2 persoane. (Nota: foloseste-te de functia “input()” pentru a cere date de la jucatori; in momentul cand cineva castiga, afiseaza un mesaj de felicitare si intreaba utilizatorii daca doresc sa inceapa un joc nou) Amintiti-va regulile: Piatra bate foarfeca; Foarfeca bate hartia; Hartia bate piatra.

PS: foloseste-te de conditile logice discutate in lectile anterioare (if, for sau while)

Doresti in continuare sa-ti aprofundezi cunostiintele de Programare? Atunci te invit sa apesi pe acest LINK si sa programezi o discutie de ghidare in IT cu colegii nostri de la TeachBit.ro care te vor indruma catre urmatoarea etapa in Programare.

Echipa TeachBit.ro

Capitolul 4 – Functii in Python

Continuam drumul nostru spre a invata programare cu un capitol in care vom vorbi despre functii. Vom vedea ce sunt functiile, de ce avem nevoie de ele si cum le putem folosi. La sfarsitul acestui capitol vei avea o sectiune cu exercitii pe care te rog sa le rezolvi dupa ce termini de citit si de aplicat conceptele care vor fi explicate in urmatoarele randuri. Nu uita faptul ca, pentru a deveni programator ai nevoie de foarte multa practica. Nu ajunge doar sa stii si sa intelegi conceptele, ci ai nevoie sa le si faci. Sa trecem la treaba!

Ce este o Functie?

O functie este o modalitate prin care putem grupa codul nostru astfel incat sa poata fi folosit de mai multe ori (fara a necesita rescrierea acestuia). Practic, este o forma de a grupa, de a structura codul nostru, astfel incat noi sa scriem cod mai eficient, mai rapid si cu mult mai multa usurinta. Putem spune ca este un subprogram. Acest lucru este bine atat pentru noi cat si pentru program pentru ca astfel va consuma mai putine resurse si va fi mai usor de inteles datorita structurii sale. Exista mai multe tipuri de functii:

functii (grupari de cod) care nu intorc nici un rezultat, adica functii void (ex:

 efectueaza o operatie “in spate”)

functii (grupari de cod) care intorc un anumit rezultat (ex: numele unei persoane)

Mai intai vom vorbi despre primul tip de functii, cele void, care nu intorc un rezultat.

1) Functii care nu intorc un rezultat

Acum vom lua un exemplu de program in care iti voi arata cum functioneaza aceste functii. Ce vom face este sa cream o functie, iar modul in care vom face asta este exprimat in secventa de cod de mai jos:

 def primaFunctie():

    pass

In exemplul precedent am definit o functie (denumita primaFunctie) care in momentul de fata nu contine nici o instructiune (in afara de pass). Instructiunea pass specifica interpretorului sa mearga mai departe. Ea se pune de obicei intr-o functie sau intr-o clasa goala cu scopul de a fi completata mai tarziu, astfel programul poate sa ruleze in continuare. Pentru a extinde functia precedenta putem introduce urmatoarele linii de cod:

 def primaFunctie():

    print(“Salut!”)

    print(“Aceasta este prima mea functie”)

    print(“Ma simt bine, progresez :)”)

Functia a fost definita, dar nu va face nimic daca nu va fi apelata, iar pentru asta vom adauga o linie noua de cod astfel:

 primaFunctie()

iar rezultatul generat va fi:

 Salut!

 Aceasta este prima mea functie

 Ma simt bine, progresez 🙂

Atat! Lucrurile nu sunt deloc complicate si dupa cum ai vazut, functiile reprezinta blocuri de cod cu scopul de a-l reutiliza in viitor. Deci, practic noi putem creea o functie care sa o folosim in n (zeci, sute) de situatii, cum de exemplu este functia print() din Python care este o functie built-in pe care am folosit-o de foarte multe ori pana acum.

Argumentele unei functii in Python

Functiile noastre nu trebuie sa fie secvente banale de cod care sa faca lucruri marunte si care sa fie total lipsite de contextul programului nostru. Pentru asta exista anumite argumente (variabile) care pot fi atribuite functiilor ca in exemplul de mai jos:

 def functieArgumente(nume, varsta):

    print(“Numele meu este “, nume,” si am varsta de “, varsta,” ani”)

 functieArgumente(“Ramon”, 25)

Iar rezultatul afisat va fi: 

 Numele meu este  Ramon  si am varsta de  25  ani

De asemenea putem adauga si variabile ca parametrii ale functiei, nu doar valori, iar rezultatul va fi acelasi:

 def functieArgumente(nume, varsta):

    print(“Numele meu este “, nume,” si am varsta de “, varsta,” ani”)

 name = “Ramon”

 age = 25

 functieArgumente(name, age)

In urmatoarea sectiune vom discuta despre metodele care pot intoarce un rezultat pe care noi sa-l putem folosi.

Exemplul #2

Vom lua urmatoarea problema si o vom rezolva folosindu-ne de ceea ce am invatat mai devreme:

“Scrie un program care sa afiseze numarul maxim dintre doua numere aleatoare.”

Solutia pentru aceasta problema este urmatoarea:

 def valoareaMaxima( x, y ):

    if x > y:

        print(x)

    else:

        print(y)

 valoareaMaxima(31, 7)

Iar rezultatul afisat va fi: 31. Exemplul este destul de simplu, dar vei vedea in sectiunile urmatoarea cum vom construi pe baza lui. Acum, te invit sa testezi acelasi cod cu mai multe variante, modificand valorile variabilelor.

2) Functii care intorc un rezultat

O functie (dupa cum am spus si mai devreme) reprezinta o grupare structurata a unei secvente de cod cu scopul de a face codul reutilizabil si usor de inteles (fapt care duce la edificentizarea volumului de munca depusa). Ca exemplu practic ne putem gandi la un blender care contine multe fructe. Ele toate vor ramane acolo. Nu vor putea fi turnate intr-un pahar. Acum vrem sa le si turnam intr-un pahar, astfel incat sa ne si putem folosi de rezultatul pe care aceasta metoda sau functie il genereaza. In cele ce urmeaza vom lua exemplul de mai devreme pentru ati arata concret cum sa folosesti acest tip de functii in Python:

 def valoareaMaxima( x, y ):

    if x > y:

        return x

    else:

        return y

 res = valoareaMaxima(31, 7)

 print(“Rezultatul final este”, res)

Dupa cum poti sa vezi, singura diferenta (semnificativa) intre acest tip de functie si cel precedent are de a face cu keywordul return, care specifica valoarea variabilei care sa fie intoarsa ca rezultat in momentul in care functia este apelata. O functie poate fi folosita pentru a ne oferi un anumit rezultat (de care noi sa ne folosim ulterior) sau pentru a face anumite modificari in cadrul ei, neavand nevoie de rezultatul specific. In final se va afisa: 

 Rezultatul final este 31

Daca nu am fi folosit secventa res = valoareaMaxima(31, 7) nu am fi putut sa stocam rezultatul si sa ne folosim de el ulterior pentru a face alte operatiuni.

Exemplu #2 

Acum ca ai inteles principiile de baza, iti propun sa facem ceva putin mai complex. Vom creea un program care va prelua datele de la utilizator (nume, username, parola) si va cripta (securiza) parola astfel incat ea sa nu poate fi descifrata de catre un hacker. Pentru asta vom avea nevoie de doua functii: una care obtine si stocheaza informatia oferita de catre user si cealalta care securizeaza (cripteaza) parola. Codul nostru pentru prima parte va arata in felul urmator:

 def getNume():

   nume = input(“Introdu numele tau:”)

   return nume

 def getUser():

   user = input(“Introdu usernamul pe care il doresti:”)

   return user

 def getParola():

   parola = input(“Introdu parola pe care o doresti:”)

   while len(parola) < 5:

     print(“Parola ta e prea scurta. Mai incearca”)

     parola = input(“Introdu parola pe care o doresti:”)

   return parola

 nume = getNume()

 user = getUser()

 parola = getParola()

In secventa de mai sus am creat trei functii, fiecare avand rolul de a obtine datele specifice de la utilizator. Functiei getParola(), i-am adaugat o masura mai mare de securitate in sensul in care nu va permite stocarea parolelor mai mici de 5 caractere (incearca sa introduci o parola de 3 caractere si observa rezultatul 😀 ). 

Codul nostru pentru partea de securizarea a parolei va arata in felul urmator:

 def securizareParola(parola):

    parolaSecurizata = hash(parola)

    return parolaSecurizata

 def getDateUser(nume, user, parola):

    “””Datele user-ului pot fi returnate ca un dictionar si folosite    

    ulterior, dar de dragul exemplului eu le voi afisa in consola”””

    print(“Datele de identificare ale user-ului sunt”, nume, user, parola)

In functia de securizarea a parolei folosim o functie built-in in Python care se numeste hash(). Aceasta genereaza o valoarea unica pentru orice sir sau numar pe care il primeste ca argument si este o modalitate extrem de folosita pentru securizarea parolelor stocate in bazele de date. Daca esti interesat de partea de Securitate si vrei sa inveti mai multe iti recomand cartea mea de Introducere in Securitate Cibernetica. Mai multe detalii poti afla aici. Dupa ce este apelata functia hash(), aceasta va genera un rezultat sub forma unui sir de numere, ireversibil (din acest sir nu se poate regenera parola) care va fi intors de catre functia principala. Urmatoarea functie va afisa datele intr-un format simplu si usor de vizualizat. Iar in secventa de mai jos am pus lucrurile cap la cap pentru a ne afisa un rezultat valid:

 parolaSec = securizareParola(parola)

 print(“Parola”, parola, “a fost securizata si este”, parolaSec)

 getDateUser(nume, user, parolaSec)

Si rezultatul afisat va fi:

 Introdu numele tau: Adi

 Introdu usernamul pe care il doresti: adiuser

 Introdu parola pe care o doresti: python2019

 Parola python2019 a fost securizata si este 748367380273021697

 Datele de identificare ale user-ului sunt: Adi adiuser 748367380273021697

3) Functii recursive 

Functia recursiva este o functie care se apeleaza pe sine pentru a produce rezultatul dorit. In aceasta sectiune iti voi da doua exemple despre cum poti sa folosesti functiile recursive.

Exemplu #1 – Maximul dintre 3 numere

Avem problema cu urmatoarea cerinte care se doreste a fi rezolvata intr-un mod mai eficient:

“Scrie un program care sa afiseze numarul maxim dintre trei numere aleatoare.”

Solutia este urmatoarea:

 def valoareaMaxima( x, y ):

    if x > y:

        return x

    else:

        return y

 def numarMax( x, y, z ):

    return valoareaMaxima( x, valoareaMaxima( y, z ) )

 print(numarMax(2, 7, -2))

Dupa cum poti sa vezi am definit doua functii: prima functie (valoareaMaxima) determina valoarea maxima dintr-o doua numere, iar a doua functie (numarMax) se foloseste de prima pentru a determina valoarea cea mai mare dintre cele 3 numere. Cum face asta? Din secventa: valoareaMaxima(x, valoareaMaxima(y,z))mai intai se va determina rezultatul functiei date ca parametru (adica se vor compara valorile lui y si z si se va stabili cea mai mare valoarea – in cazul acesta 7), dupa aceea se va executa aceeasi functie, dar folosindu-se de valoarea lui x (in cazul acesta 2), respectiv cea a rezultatului dintre y si z (adica 7 in acest exemplu). Rezultatul acestei secventa va fi: 7

Exemplu #2 – N! (n factorial)

Acest exemplu va fi unul putin mai complex dpvd al conotatiei matematice, dar invitatia mea pentru tine este sa dai la o parte ideile si parerile (adesea) negative pe care le-ai putea avea fata de matematica si sa urmezi cu mine exemplul. Iti mai aduci aminte cum erau la matematica operatiile factoriale (studiate la liceu)? Daca nu, iti explic aici. Notatia era aceasta: n! si se citea n factorial. Cat este 5! ? Conform formulei n! = n * (n – 1)! rezultatul pentru 5! va fi: 

5 * 4 * 3 * 2 * 1 = 120

Detaliez aici rezolvarea:

5! = 5 * (5 – 1)! = 5 * 4!

unde 4! = 4 * (4 – 1)! = 4 * 3!

unde 3! = 3 * (3 – 1)! = 3 * 2!

unde 2! = 2 * (2 – 1)! = 2 * 1!

unde 1! = 1

Acum daca inlocuim:

5! = 5 * (5 – 1) * (4 – 1) * (3 – 1) * (2 – 1) = 5 * 4 * 3 * 2 * 1

De aici ajungem la: 5! = 120

Cum poti face asta in programare?

Creand o metoda care este recursiva. O metoda recursiva este o functie care se apeleaza pe ea insasi, adica se autoapeleaza. Atunci cand cream o astfel de metoda, primul lucru de care trebuie sa tinem cont este ca aceasta metoda sa contina cel putin o conditie de oprire. Odata ce se ajunge la indeplinirea conditiei de oprire, metoda nu se va mai apela, astfel se va opri recursivitatea.

 def fact(n):

   if n == 1:

     return 1

   else:

     return (n * fact(n – 1))

 print(fact(5))

Aici in cod am aplicat exact rezolvarea unui factorial. Daca am apela 1!, adica in loc de fact(5) am scrie fact(1) functia recursiva nu ar avea sansa sa se autoapeleze. Daca in schimb am apela 2!, functia s-ar autoapela singura o data (pentru ca prima apelare are loc dupa functia de print). Astfel atunci cand se apeleaza functia pentru 5! pana cand se ajunge la apelarea fact(1), iar aici functia va returna 1.

4) Functia main()

Exista mai multe moduri de a rula un program:

a) Sub forma unui script – parcurgand secvential: un script in Python este un fisier pe care vrei sa il executi din linia de comanda pentru a realiza o sarcina.

Modul in care ii spui calculatorului sa execute cod din linia de comanda este usor diferit in functie de sistemul de operare al fiecaruia. Pe Linux si macOS, linia de comanda arata ca in exemplul de mai jos:

user@python:~/Documents$

Partea dinaintea semnului $ poate arata diferit, in functie de numele de utilizator. Comenzile pe care le tastati vor fi dupa $

Pe Windows, linia de comanda arata de obicei ca in exemplul de mai jos:

C:\Users\user\Documents>

Partea de dinainte de semnul > poate arata diferit, în functie de numele de utilizator. Comenzile pe care le tastati vor fi după acest semn >

b) Import din module si folosire functii: un modul in Python este un fisier pe care doresti sa il importi intr-un alt modul sau intr-un script. De multe ori, este necesar sa importam module construite deja pentru a ne face munca mai usoara, iar aceasta se face prin cuvantul cheie: import. In timpul procesului de importare, Python executa instructiunile definite in modulul specificat.

c) Rularea programului printr-un fisier in care exista o ordine specifica a lucrurilor de executie. Acest mod se face prin folosirea functiei main(). Este un fisier care contine cod si are extensia: .py

 def main():

    print(“main code”)

 def func():

    print(“func”)

 func()

 if __name__ == “__main__”:

   main()

Python nu atribuie nicio semnificatie unei functii numite “main”, dar tinand cont ca alte limbaje de programare folosesc functia main pentru a defini functia principala, cea mai buna practica este de a defini functia principala din cod: main, iar functia main trebuie sa contina orice cod pe care doresti sa il rulezi, atunci cand Python executa fisierul. Ca idee principala, ar trebui denumita functia principala: “main”  pentru a comunica intentia functiei, chiar daca Python nu atribuie vreo semnificatie acestui nume, iar ca structura pentru cod, daca doresti sa refolosesti o anumita functie din cod, ii poti defini logica in afara functiei main, iar apoi sa o apelezi in interiorul functiei main ca in exemplul de mai jos:

 def produs():

    print(2*3)

 def func():

    print(“func1”)

 def main():

produs()

func()

 main()

Utilizarea buclelor

Exercitii

Dupa cum te-ai obisnuit pana acum, la fiecare final de capitol iti pun la dispozitie un set de exercitii pe care tu sa le practici.

1) Scrie un program ce foloseste o functie care gaseste cel mai mare numar dintre 3 numere date. 

2) Scrie un program ce foloseste o functie cu ajutorul careia putem obtine inversul unui String dat.

3) Scrie un program ce testeaza daca un numar este prim sau nu. Un numar prim este acela care nu se poate imparti exact la niciun numar.

Doresti in continuare sa-ti aprofundezi cunostiintele de Programare? Atunci te invit sa apesi pe acest LINK si sa programezi o discutie de ghidare in IT cu colegii nostri de la TeachBit.ro care te vor indruma catre urmatoarea etapa in Programare.

Echipa TeachBit.ro

Capitolul 5 – Structuri de Date in Python

In acest capitol si in urmatorul vom discuta despre elementele fundamentale din programare care ne fac viata mai usoara atunci cand lucram cu date: structurile de date. La sfarsitul acestui capitol iti va fi mult mai clar ce sunt acestea, unde si cand le poti folosi si mai ales de ce sa le folosesti.

Ce sunt structurile de date si algoritmii in programare?

Ce sunt structurile de date?

Structurile de date sunt fix ceea ce sugereaza titlul: structuri de date. Sunt anumite tipuri de date speciale care ne ajuta pe noi sa le structuram si sa le manipulam in functie de  obiectivul nostru. Mai exact, structurile de date reprezinta o grupare de date care sunt organizate, stocate si manage-uite cu scopul de face accesul si modificarea (datelor) cat mai eficienta si mai usoara. Fiecare structura de date (ex: stive, cozi, vectori etc.) are un comportament, un mod de acces la date si functii specifice. Utilizarea acestora depinde foarte mult de context si, bineinteles, de problema care se doreste a fi rezolvata. In cele ce urmeaza vom discuta mai multe despre acestea, dar mai intai hai sa vedem de cate tipuri pot fi aceste structuri de date.

Tipuri de structuri de date

Cand vine vorba de structuri de date, avem mai multe tipuri din care putem alege in functie de nevoie. Iti voi enumera cateva dintre cele mai des folosite, dupa care vom incepe sa discutam (si sa le folosim)  pe fiecare in parte:

Listele reprezinta un tip de structuri de date care permit ordonarea si 

schimbarea elementelor din cadrul ei. Aici pot exista elemente duplicate.

Tuple (perechi) reprezinta un tip de structuri de date ordonata si neschimbabile. 

In cadrul ei pot exista elemente duplicate.

Dictionarul reprezinta un tip de structuri de date care nu este ordonata, 

modificabila si indexata. In cadrul ei nu pot exista elemente duplicate.

Set-ul (multimile) reprezinta un tip de structuri de date neordonata si 

neindexata. In cadrul ei nu pot exista elemente duplicate.

Acestea reprezinta structurile de date existente by default in Python. Pe langa acestea mai exista multe altele care fie au fost implementate deja, fie necesita implementare proprie (cum ar fi grafurile, arborii, cozile si altele). In general vei gasi module existente prin care te poti folosi de implementari eficiente ale acestora. Un aspect important pe care trebuie sa-l avem in considerare este faptul ca fiecare structura de date are rolul sau si utilitatea potrivita in anumite contexte.  

De exemplu, daca dorim sa stocam mai multe elemente si sa le accesam recurent (prin cautare), ar fi mai util sa utilizam un anumite structuri (dictionare sau multimi), in schimbul altora. De ce? Pentru ca timpii de accesare/cautare sunt mult redusi fata de alte structuri (liste, dictionare, set-uri etc.). Acum haide sa le luam pe rand si sa vorbim despre fiecare in parte.

1) Liste

Lista este o structura de date care poate retine mai multe valori. Spre exemplu, intr-o lista, variabila a poate sa fie un integer, un string, dar nu ambele in acelasi timp. Declararea acestor siruri este foarte simpla, fiind asemanatoare cu declararea unei simple variabile. Deosebirea dintre o variabila si o lista, este ca variabila poate sa aiba alocata o singura valoare pe cand unei liste ii pot fi alocate mai multe valori. Intr-o lista, variabila a poate avea valorile 1, 2, 3, 4 (aka. de tip numeric) si asa mai departe, dar si valoarea “Salut”, “bun venit”, “next level”, (aka. de tip string) etc. Cel mai bun exemplu de lista este feed-ul de Facebook si contactele din dreapta, ce sunt asezate intr-o ierarhie. Mai poti identifica o lista si intr-o baza de date, unde un sir de intrari, fiecare cu elementele lui, este de fapt, o lista.  Elementele din cadrul unei liste sunt numerotate de la 0 si pot fi accesta printr-un index (numarul pozitiei pe care acesta se afla). Daca lista are 10 elemente in cadrul ei, atunci acestea vor fi numerotate de la 0 la 9 si vor putea fi accesate in felul urmator:

Figura 5.1

arr = [1,2,3,4,5,6,7,8,9,10]
print(arr[0])
print(arr[5])
print(arr[9])

Rezultatul afisat va fi:

1

6

10

NOTA: termenul de arr vine de la array (aka. sir), un tip de structura de date, care in Python este asociata cu listele (practic sunt acelasi lucru in acest limbaj de programare)

Dupa cum am spus si mai devreme, in programare numaratoarea incepe de la 0, astfel prima pozitie a variabilei noastre “arr”, declarata cu 10 pozitii este 0, iar ultima este 9. Atribuirea valorilor a unei anumite pozitii se face prin index (ex: [3], [5] ), care este valoarea aflata in parantezele drepte si determina pozitia careia ii va fi atribuita valoarea dorita. 

Care sunt functiile unei Liste?

Valorile unei liste pot fi modificate (prin adaugarea, actualizarea sau stergerea elementor din cadrul ei). Exista numeroase operatiuni care se pot face cu listele, atat prin operatori cat si prin functii built-in. Iata mai jos o parte dintre ele:

.append(value) – adauga un element la sfarsitul listei

.insert(index, value) – adauga un element la indexul specificat

.pop(value) – sterge elementul din lista si il returneaza

.remove(value) – sterge element din lista

•  .sort() – sorteaza lista crescator, by default

.reverse() – inverseaza ordinea din lista

Pe langa aceastea mai putem include urmatoarele operatii:

Accesarea valorilor

Concatenarea

Repetitia

Iterarea

Apartenenta

Cum folosim o lista in Python?

In continuare vom vedea cateva moduri de a pune in practica functiile acestei structuri de date. Mai intai sa definim o lista:

#Definirea si accesarea valorilor dintr-o lista
listX = [‘AI&ML’, ‘TensorFlow’, 1991, 2022]
listZ = [1, 2, 3, 4, 5, 6, 7]
print(“listX[0]: “, listX[0])
print(“listZ[1:5]: “, listZ[1:5])

print(“listX[-1]: “, listX[-1])

Rezultatul va fi:

listX[0]:  AI&ML

listZ[1:5]:  [2, 3, 4, 5]

listX[-1]:  2022

In continuare vom aborada functiile discutate in sectiunea de mai devreme prin urmatoarea secventa de cod:

#Concatenarea
listA = [1, 2, 3]
listB = [4, 5, 6]
print(listA + listB)

#Lungimea
print(“Lungimea tuplului este:”,len(listA))

#Repetitia
listR = [“RO”] * 3
print(listR)

#Iterarea
for x_list in [1, 2, 3]:
print(x_list)

#Apartinerea
print(3 in [1, 2, 3])
print(9 in listB)

#Folosirea functiilor specifice listelor

print(“Old:”,listX)
listX.append(“Data Science”)
print(“New:”,listX)

listX.insert(2, “Test value”)
print(“New 2.0:”,listX)

ret = listX.pop(3)
print(“New 3.0:”,listX)
print(“Valoarea returnata si eliminata din lista este”, ret)

newList = listA + listB
print(“Lista generata “, newList)

newList.reverse()
print(“Lista reversed “,newList)

newList.sort()
print(“Lista sortata “, newList)

newList.remove(2)
print(“New list: “, newList)

Rezultatul rularii secventei de cod de mai sus va fi:

[1, 2, 3, 4, 5, 6]

Lungimea tuplului este: 3

[‘RO’, ‘RO’, ‘RO’]

1

2

3

True

False

Old: [‘AI&ML’, ‘TensorFlow’, 1991, 2022]

New: [‘AI&ML’, ‘TensorFlow’, 1991, 2022, ‘Data Science’]

New 2.0: [‘AI&ML’, ‘TensorFlow’, ‘Test value’, 1991, 2022, ‘Data Science’]

New 3.0: [‘AI&ML’, ‘TensorFlow’, ‘Test value’, 2022, ‘Data Science’]

Valoarea returnata si eliminata din lista este 1991

Lista generata  [1, 2, 3, 4, 5, 6]

Lista reversed  [6, 5, 4, 3, 2, 1]

Lista sortata  [1, 2, 3, 4, 5, 6]

New list:  [1, 3, 4, 5, 6]

Exercitii

Si acum sa trecem la partea de exercitii in care ne vom “juca” cu listele in Python.

1) Sa spunem aceasta lista salvata intr-o variabila: a = [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]. Scrieti o linie de Python care ia aceasta lista a si face o lista noua care contine doar elementele pare ale acestei liste.

Iar acum un exercitiu putin mai complex:

2.1) Creati o lista cu numele a 10 prieteni (numele nu trebuie sa fie distincte). Respectand ordinea, rezolvati urmatoarele cerinte:

Sortati lista de nume.

Utilizand o lista auxiliara, determinati numarul de aparitii al fiecarui nume.

Determinati numele care apare de cele mai multe ori in lista initiala.

Determinati numele care apar cel mai putin ori in lista initiala.

Revenind la lista initiala de nume, inversati ordinea elementelor.

2.2) Formati perechi de cate 2 persoane cu numele din lista initiala si impartiti aceste perechi (in mod egal) in 2 liste. Asigurati-va ca acestor perechi nu li se poate modifica valoarea (hint: tupluri). Avand aceste perechi, calculati numarul total de caractere pentru fiecare pereche in parte si creati o lista noua in care sa le introduceti in ordine descrescatoare.

Si putina matematica…

3) Scrieti un script care afiseaza in consola toate numerele pare divizibile cu 7 din intervalul [0, 3463]. Sugestie: folositi functia range(). Ajustati codul astfel incat la aparitia primului multiplu al lui 666, algoritmul sa se opreasca.

2) Tupluri (Tuples)

Acest concept este similar cu cel de liste, dar contine cateva diferente. Din momentul ce listele sunt structuri de date ce pot tine mai multe valori ale integer-urilor si string-urilor, tuplurile fac acelasi lucru, doar ca acestea sunt imutabile. Asta inseamna ca datele din ele nu pot fi modificate/actualizate, ci doar citite. Scopul lor este sa genereze o variabila cu mai multe date care pot fi doar citite (read-only). In cazul tuplurilor, valorile si pozitiile acestora sunt foarte clar definite si nu mai pot fi schimbate (adaugate, modificate sau sterse).

Care sunt functiile unui tuplu in Python?

Pe scurt, tuplurile sunt un tip de structura de date care permit multimi de elemente ordonate, care nu se pot modifica si in care pot exista elemente duplicate (spre deosebire de set-uri despre care vom discuta in sectiunea urmatoare). Astfel, tuplurile au cateva functii de baza care permit introducerea datelor, modificare sau stergerea datelor intr-un mod indirect cu ajutorul listelor (vom vedea imediat cum) In continuare, hai sa aruncam o privire peste o parte din functiile disponibile pentru tupluri:

len() sau .count () – intoarce numarul de elemente existente in tuplu, respectiv numarul de aparitii al unui element

.index (valoare)– intoarce indexul primului element aflat la o pozitie specifica din tuplu

Pe langa aceastea mai putem include urmatoarele operatii:

Accesarea valorilor

Concatenarea

Repetitia

Iterarea

Apartenenta

Cum folosim un tuplu in Python?

In continuare vom vedea cateva moduri de a pune in practica functiile acestei structuri de date. Mai intai sa definim un tuplu:

#Definirea si accesarea valorilor unui tuplufood_tuple = (“Paste”, “Banane”, “Lava Cake”, “Smoothie”)
print(food_tuple)
print(“Vreau sa mananc”, food_tuple[1])

Rezultatul va fi:

(‘Paste’, ‘Banane’, ‘Lava Cake’, ‘Smoothie’)

Vreau sa mananc Banane

Pentru a folosi functiile discutate in sectiunea anterioara vom prelua exemplul de mai sus si il vom rescrie (si dezvolta) astfel:

print(“\n#Parcurgerea elementelor unui tuplu folosind o bucla for\n”)
for food in food_tuple:
print(“Astazi am pofta de:”, food) 

#De asemenea, in cazul tuplurilor exista mai multe operatii care pot avea loc:

#Secventierea
tupX = (‘Python’, ‘Jupiter’, 1999, 2025)
tupZ = (1, 2, 3, 4, 5, 6, 7 )
print(“tupX[0]: “, tupX[0])
print(“tupZ[1:5]: “, tupZ[1:5])

#Concatenarea
tupA = (1, 2, 3)
tupB = (4, 5, 6)
print(tupA + tupB)

#Lungimea
print(“Lungimea tuplului este:”,len(tupA))

#Repetitia
tupR = (“RO”) * 3
print(tupR)

#Iterarea
for x_tuple in (1, 2, 3):
  print(x_tuple)

#Apartenenta
print(3 in (1, 2, 3))
print(9 in tupB)

#Stergerea
del tupR

Rezultatul rularii secventei de cod de mai sus va fi:

#Parcurgerea elementelor unui tuplu folosind o bucla for

Astazi am pofta de: Paste

Astazi am pofta de: Banane

Astazi am pofta de: Lava Cake

Astazi am pofta de: Smoothie

tupX[0]:  Python

tupZ[1:5]:  (2, 3, 4, 5)

(1, 2, 3, 4, 5, 6)

Lungimea tuplului este: 3

RORORO

1

2

3

True

False

Traceback (most recent call last):

  File “main.py”, line 386, in <module>

    print (tupR)

NameError: name ‘tupR’ is not defined

Exercitii

 Iar acum sa ne reintoarcem la partea practica:

1) Scrie un program care verifica daca un element exista intr-un tuplu.

2) Scrie un program ce sorteaza un tuplu dupa numere reale(cu virgula).

3) Scrie un program ce calculeaza produsul elementelor unui tuplu.

3) Multumi (Set) in Python

Multimile (Set) in Python reprezinta un tip de structura de date care permite organizarea datelor (de orice tip) intr-un format neordonat, nemodificabil si care nu permite valori duplicate. In momentul in care dorim ca fiecare valoarea introdusa in acesta structura de date sa fie unica (si nemodificabila), atunci set-urile pot fi unul dintre instrumentele de care avem nevoie pentru a ne face munca mai usoara. Modul prin care putem defini un set (o multime) in Python este urmatorul:

vacation_set = {“Bora Bora”, “Las Vegas”, “Tenerife”}

print (vacation_set)

Cu urmatorul rezultat afisat pe ecran:

{‘Tenerife’, ‘Bora Bora’, ‘Las Vegas’}

Care sunt functiile unei multimi (set) in Python?

Set-urile au cateva functii de baza care permit introducerea datelor in acestea, cautarea acestora, stergerea lor etc. In continuare, hai sa aruncam o privire peste o parte din functiile disponibile pentru set-uri:

.add (valoare)– adauga un element in set

.pop ()– sterge un element aleator din set

remove (valoare)– sterge un element specific din set

.update (set) – actualizeaza set-ul curent cu un alt set (sau cu o lista)

.union (set1, set2, …) – intoarce un set care reprezinta unirea a doua sau mai 

multe seturi

.clear () – sterge toate elementele din set

Pe langa aceste functii, exista multe altele, dar am considerat ca acestea sunt cele de baza cu ajutorul carora vei putea profita de utilitatea acestei structuri de date.

Cum folosim un set in Python?

In continuare vom vedea cateva moduri de a pune in practica functiile acestei structuri de date. Dupa cum am spus si mai devreme, set-urile nu permit stocarea de valori duplicate (chiar daca acestea sunt definite):

vacation_set = {“Bora Bora”, “Las Vegas”, “Tenerife”, “Las Vegas”}
print(vacation_set)

Ele vor fi eliminate din structura:

{‘Tenerife’, ‘Bora Bora’, ‘Las Vegas’}

Pentru a folosi functiile discutate in sectiunea anterioara vom prelua exemplul de mai sus si il vom rescrie (si dezvolta) astfel:

print(“\n#Adaugarea unui element in set\n”)
vacation_set.add(“San Torini”)
vacation_set.add(“Las Vegas”) #incercam sa adaugam un element care exista deja
print(vacation_set)

print(“\n#Stergerea unui element din set\n”)
vacation_set.remove(“Bora Bora”)
print(vacation_set)

print(“\n#Actualizarea a unui set cu o lista (se poate aplica si intre doua seturi)\n”)
lista_vacante = [“Bali”, “Monaco”, “Fiji”, “Australia”, “Bali”]
print(lista_vacante)
vacation_set.update(lista_vacante)
print(vacation_set)

print(“\n#Uniunea a doua set-uri\n”)
ro_vacations = {“Brasov”, “Maramures”, “Constanta”, “Hateg”}
wish_list_vacations = vacation_set.union(ro_vacations)
print(wish_list_vacations)

print(“\n#Parcurgerea elementelor unui set folosind o bucla for\n”)
current_year = 2021
for loc in wish_list_vacations:
  print(“Am in plan sa calatoresc in ” + loc + ” in anul ” + str(current_year))
  current_year = current_year + 1

print(“\n#Stergerea valorilor dintr-un set\n”)
wish_list_vacations.clear()
print(wish_list_vacations)

Rezultatul afisat in urma rularii secventei de mai sus este urmatorul:

#Adaugarea unui element in set

{‘San Torini’, ‘Bora Bora’, ‘Tenerife’, ‘Las Vegas’}

#Stergerea unui element din set

{‘San Torini’, ‘Tenerife’, ‘Las Vegas’}

#Actualizarea a unui set cu o lista (se poate aplica si intre doua seturi)

[‘Bali’, ‘Monaco’, ‘Fiji’, ‘Australia’, ‘Bali’]

{‘Monaco’, ‘Tenerife’, ‘San Torini’, ‘Australia’, ‘Fiji’, ‘Bali’, ‘Las Vegas’}

#Uniunea a doua set-uri

{‘Monaco’, ‘Tenerife’, ‘Maramures’, ‘San Torini’, ‘Australia’, ‘Hateg’, ‘Constanta’, ‘Fiji’, ‘Brasov’, ‘Bali’, ‘Las Vegas’}

#Parcurgerea elementelor unui set folosind o bucla for

Am in plan sa calatoresc in Australia in anul 2021

Am in plan sa calatoresc in San Torini in anul 2022

Am in plan sa calatoresc in Constanta in anul 2023

Am in plan sa calatoresc in Tenerife in anul 2024

Am in plan sa calatoresc in Brasov in anul 2025

Am in plan sa calatoresc in Hateg in anul 2026

Am in plan sa calatoresc in Monaco in anul 2027

Am in plan sa calatoresc in Maramures in anul 2028

Am in plan sa calatoresc in Las Vegas in anul 2029

Am in plan sa calatoresc in Fiji in anul 2030

Am in plan sa calatoresc in Bali in anul 2031

#Stergerea valorilor dintr-un set

set()

Exercitii

Si acum sa trecem la partea de exercitii in care ne vom “juca” cu set-urile in Python:

1) Scrie un program in care sa stergi toate elementele dintr-o structura de tip set.

2) Scrie un program care verifica daca 3 structuri de tip set nu au elemente in comun luate fiecare cu fiecare. Daca nu au se afiseaza “TRUE”, altfel “FALSE”

3) Scrie un program ce gaseste elementele dintr-o structura de date de tip set ce nu se gaseste in alta data.

Doresti in continuare sa-ti aprofundezi cunostiintele de Programare? Atunci te invit sa apesi pe acest LINK si sa programezi o discutie de ghidare in IT cu colegii nostri de la TeachBit.ro care te vor indruma catre urmatoarea etapa in Programare.

Echipa TeachBit.ro

4) Dictionare

Ce este si cum functioneaza un dictionar?

In programare dictionarele reprezinta un sir de elemente care stocheaza o pereche de “(cheie, valoare)”. Astfel pentru fiecare cheie (unica) in parte va fi alocata o anumita valoare (care nu trebuie sa fie unica). Cheile trebuie sa fie unice pentru ca dictionarul foloseste o tehnica numita hashing. Hashing-ul este o metoda (un algoritm) prin care se genereaza o valoarea numerica (aka. hash), care identifica in mod unic acea cheie. Aceasta tehnica permite ca accesarea elementelor dintr-un dictionar sa fie facuta extrem de rapid in comparatie cu alte structuri de date. Motivul se datoreaza acestui hash, care permite dictionarului sa acceseze direct (aproape instant) indexul unde se afla perechea de (cheie, valoare) care doreste a fi accesata.

Figura 5.2

In figura 5.2 de mai sus poti sa vezi structura dictionarului (care contine mai multe casute – noduri) si structura fiecarui nod in parte (care este alcatuit dintr-un hash, o cheie, o valoarea si adresa – locul unde se afla in memorie – urmatorului nod). Gasesti in figura de mai jos o ilustratie prin care vei putea intelege mai bine cum are loc maparea perechii cheie – valoarea intr-un dictionar din Python.

Figura 5.3

Care sunt functiile unei dictionar in Python?

Dictionarele au cateva functii de baza care permit introducerea perechilor de cheie – valoare, cautarea acestora, stergerea lor etc. In Python nu exista o functie specifica pentru adaugarea elementelor intr-un dictionar (vom vedea in detaliu cum putem face asta in sectiunea urmatoare). In continuare, hai sa aruncam o privire peste o parte din functiile disponibile pentru dictionare:

.pop (cheie)– sterge elementul din dictionar care se afla la nodul <cheie> si il returneaza.

.get (cheie) – intoarce elementul din dictionar care se afla la nodul <cheie> fara a 

efectua nicio modificare asupra acesteia.

.items () – intoarce o lista de tupluri (formate din perechea – cheie – valoare) cu 

elementele din dictionar

  .len (dictionar) – intoarce dimensiunea dictionarului

  .clear () – sterge toate elementele din dictionar

Pe langa aceste functii, exista multe altele, dar am considerat ca acestea sunt cele de baza cu ajutorul carora vei putea profita de utilitatea acestei structuri de date.

Cum folosim un dictionar in Python?

Haide acum sa cream un dictionar si sa-l folosim intr-un exemplu practic. Sa presupunem ca dictionarul nostru va fi alcatuit dintr-o pereche cheie-valoare de tip string (numele unei persoane), respectiv integer (suma de bani disponibila in contul bancar):

dictionarul_meu = {
“cheie_1”: “valoare_1”,
“cheie_2”: “valoare_2”
}
print(dictionarul_meu)

Rezultatul codului de mai sus va fi:

{cheie_1: valoare_1, cheie_2: valoare_2}

In continuare, vom folosi prin exemple practice functiile discutate in sectiunea de mai devreme:

print(“#Crearea dictionarului – reprezinta nume si contul bancar in EUR ale unor persoane\n”)

dictionarul_meu = {
“Marius”: 4832,
“Ionel”: 683
}
print(dictionarul_meu)

print(“\n#1 – Adaugarea elementelor in dictionar\n”)

dictionarul_meu[“Adi”] = 2149

print(“Dictionarul actualizat 1.0:\n”, dictionarul_meu)

dictionarul_meu[“Ana”] = 3434
dictionarul_meu[“Alex”] = 1204
dictionarul_meu[“Dan”] = 1378
dictionarul_meu[“Ion”] = 932

print(“Dictionarul actualizat 2.0:\n”, dictionarul_meu)

print(“\n#2 – Obtinerea valorii pe baza unei chei date\n”)
valoare_exA = dictionarul_meu[“Adi”]
print(“Valoarea din contul lui Adi:”, valoare_exA)

#aici se foloseste metoda get()
valoare_exB = dictionarul_meu.get(“Adi”)

#se obtine acelasi rezultat ca in exemplul de mai sus
print(“Valoarea din contul lui Adi:”, valoare_exB)

     
print(“\n#3 – Modificarea elementelor (existente)\n”)
print(“#Valoarea initiala din contul lui Adi: ” + str(dictionarul_meu[“Adi”]) + ” EUR”)

dictionarul_meu[“Adi”] = 7777 #valoarea initiala find 2149
print(“#Valoarea din contul lui Adi: ” + str(dictionarul_meu[“Adi”])  + ” EUR”)

print(“##Valoarea initiala din contul lui Ion: ” + str(dictionarul_meu[“Ion”]) + ” EUR”)
suma_initiala = dictionarul_meu[“Ion”]
suma_noua = suma_initiala * 2
dictionarul_meu[“Ion”] = suma_noua
print(“##Valoarea actualizata din contul lui Ion: ” + str(dictionarul_meu[“Ion”])  + ” EUR”)


print(“\n#4 – Parcurgerea dictionarului prin folosirea buclei for\n”)
key = dictionarul_meu.items()

for key in dictionarul_meu:
print(“Suma de bani disponibila din contul lui ” + key + ” este “+ str(dictionarul_meu[key]) + ” EUR”)

print(“\nAcordam un bonus pentru toata lumea…\n”)

#Adaugam 150 EUR in contul fiecarei persoane
for key in dictionarul_meu:
dictionarul_meu[key] = dictionarul_meu[key] + 150 
print(“NOUA Suma de bani disponibila din contul lui ” + key + ” este “+ str(dictionarul_meu[key]) + ” EUR”)

print(“\n#5 – Eliminarea elementelor\n”)
nr_elemente = len(dictionarul_meu)
print(“Dictionarul contine ” + str(nr_elemente) + ” elemente”)

dictionarul_meu.pop(“Adi”)
print(“Dictionarul fara Adi:\n”, dictionarul_meu)

nr_elemente = len(dictionarul_meu)
print(“Dictionarul contine ” + str(nr_elemente) + ” elemente”)

#se mai poate folosi si del
del dictionarul_meu[“Ion”]
print(“Dictionarul fara Adi si Ion:\n”, dictionarul_meu)

nr_elemente = len(dictionarul_meu)
print(“Dictionarul contine ” + str(nr_elemente) + ” elemente”)

#va sterge toate elementele din dictionar, pastrand variabila dictionarul_meu in memorie
dictionarul_meu.clear()

nr_elemente = len(dictionarul_meu)
print(“Dictionarul contine ” + str(nr_elemente) + ” elemente”)

#va sterge intregul dictionar si variabila dictionarul_meu din memorie
del dictionarul_meu

Rezultatul codului de mai sus va fi:

#Crearea dictionarului – reprezinta nume si contul bancar in EUR ale unor persoane

{‘Marius’: 4832, ‘Ionel’: 683}

#1 – Adaugarea elementelor in dictionar

Dictionarul actualizat 1.0:

 {‘Marius’: 4832, ‘Ionel’: 683, ‘Adi’: 2149}

Dictionarul actualizat 2.0:

 {‘Marius’: 4832, ‘Ionel’: 683, ‘Adi’: 2149, ‘Ana’: 3434, ‘Alex’: 1204, ‘Dan’: 1378, ‘Ion’: 932}

#2 – Obtinerea valorii pe baza unei chei date

Valoarea din contul lui Adi: 2149

Valoarea din contul lui Adi: 2149

#3 – Modificarea elementelor (existente)

#Valoarea initiala din contul lui Adi: 2149 EUR

#Valoarea din contul lui Adi: 7777 EUR

##Valoarea initiala din contul lui Ion: 932 EUR

##Valoarea actualizata din contul lui Ion: 1864 EUR

#4 – Parcurgerea dictionarului prin folosirea buclei for

Suma de bani disponibila din contul lui Marius este 4832 EUR

Suma de bani disponibila din contul lui Ionel este 683 EUR

Suma de bani disponibila din contul lui Adi este 7777 EUR

Suma de bani disponibila din contul lui Ana este 3434 EUR

Suma de bani disponibila din contul lui Alex este 1204 EUR

Suma de bani disponibila din contul lui Dan este 1378 EUR

Suma de bani disponibila din contul lui Ion este 1864 EUR

Acordam un bonus pentru toata lumea…

NOUA Suma de bani disponibila din contul lui Marius este 4982 EUR

NOUA Suma de bani disponibila din contul lui Ionel este 833 EUR

NOUA Suma de bani disponibila din contul lui Adi este 7927 EUR

NOUA Suma de bani disponibila din contul lui Ana este 3584 EUR

NOUA Suma de bani disponibila din contul lui Alex este 1354 EUR

NOUA Suma de bani disponibila din contul lui Dan este 1528 EUR

NOUA Suma de bani disponibila din contul lui Ion este 2014 EUR

#5 – Eliminarea elementelor

Dictionarul contine 7 elemente

Dictionarul fara Adi:

 {‘Marius’: 4982, ‘Ionel’: 833, ‘Ana’: 3584, ‘Alex’: 1354, ‘Dan’: 1528, ‘Ion’: 2014}

Dictionarul contine 6 elemente

Dictionarul fara Adi si Ion:

 {‘Marius’: 4982, ‘Ionel’: 833, ‘Ana’: 3584, ‘Alex’: 1354, ‘Dan’: 1528}

Dictionarul contine 5 elemente

Dictionarul contine 0 elemente

Nested dictionary

Un dictionar poate avea ca elemente alte dictionare (situatie foarte des intalnita atunci cand lucram cu date transmise in format JSON). Scopul acestora este de a organiza si transmite datele de la un sistem catre altul astfel incat sa poata fi procesate rapid si usor de catre acestea, fara un consum mare de resurse. Sintaxa de baza pentru definirea unui astfel de dictionar este urmatoarea:

nested_dict = {
“d1”: { ‘cheie_1’: ‘valoare_1’, ‘cheie_2’: ‘valoare_2’},
“d2”: { ‘cheie_3’: ‘valoare_3’, ‘cheie_4’: ‘valoare_4’}
}

print(nested_dict)
print(nested_dict[“d1”])
print(nested_dict[“d2”])

Si rezultatul in urma rularii acestei secvente de cod:

{‘d1’: {‘cheie_1’: ‘valoare_1’, ‘cheie_2’: ‘valoare_2’}, ‘d2’: {‘cheie_3’: ‘valoare_3’, ‘cheie_4’: ‘valoare_4’}}

{‘cheie_1’: ‘valoare_1’, ‘cheie_2’: ‘valoare_2’}

{‘cheie_3’: ‘valoare_3’, ‘cheie_4’: ‘valoare_4’}

Iata mai jos un exemplu:

nested_dict = {

 “d1”: { ‘cheie_1’: ‘valoare_1’, ‘cheie_2’: ‘valoare_2’},
“d2”: { ‘cheie_3’: ‘valoare_3’, ‘cheie_4’: ‘valoare_4’}
}

print(nested_dict)
print(nested_dict[“d1”])
print(nested_dict[“d2”])

print(“\nCrearea unui dictionar de tip nested\n”)

date_personal = {
“p1”: { ‘nume’: ‘Adi’, ‘venit’: 1000, ‘varsta’: 28},
“p2”: { ‘nume’: ‘Emanuel’, ‘venit’: 2750, ‘varsta’: 36},
“p3”: { ‘nume’: ‘George’, ‘venit’: 1750, ‘varsta’: 31}
}

print(date_personal)
print(date_personal[“p1”])
print(date_personal[“p2”])
print(date_personal[“p3”])

print(“\n#Adaugarea unui element\n”)
date_personal[“p4”] = { ‘nume’: ‘Gabi’, ‘venit’: 0, ‘varsta’: 16, ‘job’: ‘Internship’}
print(date_personal)

print(“\n#Eliminarea unui element\n”)
del date_personal[“p2”]
print(date_personal)

Rezultatul secventei de cod de mai sus:

Crearea unui dictionar de tip nested

{‘p1’: {‘nume’: ‘Adi’, ‘venit’: 1000, ‘varsta’: 28}, ‘p2’: {‘nume’: ‘Emanuel’, ‘venit’: 2750, ‘varsta’: 36}, ‘p3’: {‘nume’: ‘George’, ‘venit’: 1750, ‘varsta’: 31}}

{‘nume’: ‘Adi’, ‘venit’: 1000, ‘varsta’: 28}

{‘nume’: ‘Emanuel’, ‘venit’: 2750, ‘varsta’: 36}

{‘nume’: ‘George’, ‘venit’: 1750, ‘varsta’: 31}

#Adaugarea unui element

{‘p1’: {‘nume’: ‘Adi’, ‘venit’: 1000, ‘varsta’: 28}, ‘p2’: {‘nume’: ‘Emanuel’, ‘venit’: 2750, ‘varsta’: 36}, ‘p3’: {‘nume’: ‘George’, ‘venit’: 1750, ‘varsta’: 31}, ‘p4’: {‘nume’: ‘Gabi’, ‘venit’: 0, ‘varsta’: 16, ‘job’: ‘Internship’}}

#Eliminarea unui element

{‘p1’: {‘nume’: ‘Adi’, ‘venit’: 1000, ‘varsta’: 28}, ‘p3’: {‘nume’: ‘George’, ‘venit’: 1750, ‘varsta’: 31}, ‘p4’: {‘nume’: ‘Gabi’, ‘venit’: 0, ‘varsta’: 16, ‘job’: ‘Internship’}}

 

Cand folosim dictionarele si ce aplicabilitate practica au?

Dictionarele sunt folosite in tabelele de rutare pentru ca routerele trebuie sa decida unde sa trimita traficul: catre retea sau catre portul spre care poate trimite. Dictionarele sunt folosite:

In retelistica, pe Routere, in crearea tabelelor de rutare. 

In cadrul API-urile pentru transmiterea informatiilor intre sisteme (de obicei in 

format JSON)

In stocarea parolelor in baza de date. Deoarece parolele sunt criptate, ele au un 

hash stocat in baza de date. In momentul in care tu trimiti parola, serverele 

lucreaza sa o puna intr-o functie si intr-un hash. Cheia este parola, hash-ul este 

valoarea acelei chei, deci acesta este un alt exemplu de dictionar.

Exercitii

Iar acum sa ne reintoarcem la partea practica:

1.1) Creati cu ajutorul unui dictionar o baza de date la care sa retineti numerele de telefon a 10 prieteni.

1.2) Afisati intrarile din aceasta baze de date in ordine alfabetica, dupa nume.

2) Scrieti un program pentru a obtine (sortate dupa pret) primele 3 produse dintr-un online magazin.

Produse magazin: {‘Pantofi’: 45.50, ‘Geaca’: 35, ‘Pulover’: 41.30, ‘Sacou’: 55, ‘Tricou’: 24}

Rezultatul dorit:

Sacou 55

Pantofi 45.5

Pulover 41.3

3) Scrieti un program prin care sa obțineți cheia, valoarea și pozitia unui element dintr-o structura de date de tip dictionar.

Curios sa aflii mai multe?

Afla mai multe despre cum poti incepe in Programare prin cursul pe care il oferim aici:

Introducere in IT - Ramon Nastase, Andrei Bozga - TeachBit
💻 Cursuri IT Gratuite pentru Elevi si Studenti. Intra pe teachbit.ro si aplica acum!

Articole similare

Răspunsuri

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *