ECDL Computing Python
ECDL Computing Python
Syllabus 1.0
ECDL – European Computer Driving Licence
ECDL COMPUTING
Competenţe în domeniul gândirii computaționale
și programării
“European Computer Driving Licence, ECDL, International Computer Driving Licence, ICDL, e-Citizen și
logo-urile aferente sunt mărci înregistrate ale European Computer Driving Licence Foundation Limited
(“ICDL Foundation”).
Acest manual poate fi folosit de candidați în scopul pregătirii pentru examenul la modulul ECDL
Computing. Nici ICDL Foundation și nici ECDL ROMANIA nu garantează că utilizarea acestui manual vă
asigură promovarea examenului la acest modul.
Toate exercițiile recapitulative conținute în acest manual se referă exclusiv la această publicație și nu
constituie sau implică certificarea de către Fundația ICDL cu privire la examenele ECDL.
Pentru a susţine examenele necesare obținerii unui certificat ECDL, trebuie să vă înregistrați în program
prin achiziționarea unei serii unice de înscriere. În lipsa unei asemenea serii, niciun test nu poate fi sustinut
şi niciun certificat ECDL sau o altă formă de recunoaştere nu poate fi acordată candidatului. Seriile unice
de înscriere ECDL pot fi obţinute de la orice Centru de Testare acreditat ECDL
Python reprezintă o marcă înregistrată a Python Software Foundation. Python și bibliotecile sale standard
sunt distribuite sub licența Python. Aceste detalii sunt corecte începând cu Decembrie 2016. Instrumentele
și resursele online sunt supuse unor actualizări și schimbări frecvente. ”
2
CUPRINS
CAPITOLUL 1 – GÂNDEȘTE CA UN PROGRAMATOR ..................................................... 7
1.1 Gândirea Computațională ...................................................................................................... 8
1.2 Instrucțiuni ........................................................................................................................... 14
1.3 Exerciții Recapitulative ........................................................................................................ 15
3
6.3 Dincolo de Numere .............................................................................................................. 52
6.4 Exerciții Recapitulative ........................................................................................................ 55
4
12.3 Tipuri de Bucle................................................................................................................... 88
12.4 Recapitulare ....................................................................................................................... 89
12.5 Exerciții Recapitulative ...................................................................................................... 92
5
6
CAPITOLUL 1 –
GÂNDEȘTE CA UN PROGRAMATOR
Concepte
Computing reprezintă efectuarea calculelor sau procesarea datelor, cu ajutorul unui computer.
Recunoașterea de șabloane
Un șablon reprezintă un element sau o caracteristică repetitivă, cum ar fi de exemplu un motiv
de pe o țesătură. Șabloanele pot fi regăsite de asemenea și în activități, cum ar fi diverse rețete ce
pot implica setarea cuptorului la o anumită temperatură și așteptarea încălzirii cuptorului. Acest
lucru este cunoscut sub denumirea de șablon partajat. Recunoașterea șabloanelor implică
identificarea șabloanelor repetitive în cadrul problemelor complexe sau în cadrul problemelor mai
mici, conexe.
În figura de mai sus, primul set de blocuri (pătrate) colorate a fost apoi separat în 2 porțiuni
pentru a evidenția prezența unui șablon repetitiv.
Abstractizarea
Abstractizarea reprezintă procesul de extragere a celor mai importante caracteristici din cadrul
unei probleme sau sarcini. Caracteristicile extrase oferă informații utile în examinarea problemei
și identificarea soluțiilor potențiale. Abstractizarea implică eliminarea detaliilor inutile și
identificarea doar a informațiilor relevante pentru rezolvarea problemei. În cadrul unei sarcini de
coacere a unor biscuiți, de exemplu, nu este important dacă persoana este dreptace sau stângace.
Informațiile relevante în acest caz includ ingredientele folosite, ordinea de amestecare a lor, precum
și durata și temperatura de coacere.
În exemplul de mai jos, din a doua imagine au fost eliminate toate detaliile inutile astfel încât
să rămână doar informațiile relevante în rezolvarea problemei și anume că este vorba despre un
câine care vrea mâncare.
8
ECDL Computing Capitolul 1 – Gândește ca un programator
Descompunerea
Descompunerea implică divizarea unei probleme complexe în probleme mai mici și mai
simple. Apoi, aceste probleme mai simple pot fi la rândul lor descompuse în probleme și mai mici,
până când acestea devin ușor de înțeles și de gestionat. În cadrul unei sarcini de coacere a unor
biscuiți de exemplu, o problemă minoră ar putea fi asigurarea faptului că cuptorul este setat la
temperatura potrivită. Imaginea de mai jos ilustrează modul de descompunere a unei probleme în
părți din ce în ce mai mici.
Problemă
mai mică
Problemă Problemă
mai mică
Problemă
mai mică
Algoritmi
Un algoritm reprezintă un set organizat de instrucțiuni ce oferă pașii de rezolvare a unei
probleme sau sarcini. De exemplu, un algoritm ar putea consta în instrucțiunile dintr-o rețetă
culinară sau calculele matematice pe care un computer trebuie să le urmeze. Elaborarea
algoritmilor reprezintă procesul de creare a unor instrucțiuni bine definite, sub forma unor pași de
urmat pentru a rezolva o problemă sau a îndeplini o sarcină cu succes. Un posibil algoritm pentru
a face clătite implică parcurgerea următorilor pași:
9
Capitolul 1 – Gândește ca un programator ECDL Computing
Evaluarea
Evaluarea implică validarea designului unui produs sau unui algoritm prin
verificarea faptului că acesta funcționează conform specificațiilor sau că
rezolvă problema în cauză.
Generalizarea
Generalizarea constă în identificarea unei modalități de a face o anumită soluție utilă în cadrul
unui set mai larg de circumstanțe. Spre exemplu, ați putea folosi simboluri în loc de cuvinte la
controlul produselor astfel încât această metodă să poată fi folosită, indiferent de limbă. În imaginea
următoare, structura de bază a florii este întotdeauna aceeași și poate fi utilizată în mod repetat,
variind însă caracteristici precum culoarea sau forma florii.
Aceste șase tehnici de gândire computațională pot fi folosite în paralel pentru a rezolva
probleme complexe în domeniul informaticii și nu numai.
Pași
Exemplu: Proiectarea unei mașini de spălat rufe
Abstractizare
Primul pas în proiectarea unei mașini de spălat rufe constă în
determinarea scopului ei – spre exemplu, ar trebui să conțină programe
de spălare intensivă sau delicată, la o temperatură mică sau mare, iar la finalul ciclului de spălare,
rufele să fie curate. Faza de proiectare implică enumerarea caracteristicilor necesare pentru a atinge
scopul propus. Abstractizarea poate fi folosită pentru a-l ajuta pe proiectant să filtreze informațiile
relevante de cele nerelevante pentru a determina ce caracteristici să includă și ce anume să excludă.
Detaliile nerelevante ar putea include culoarea mașinii de spălat sau dacă rufele ce urmează a fi
spălate conțin 6 perechi de șosete sau 3 perechi de șosete.
Detaliile relevante sunt cele care afectează funcționalitatea generală și ar putea include
informații precum temperatura apei sau dacă un anumit program este destinat spălării rufelor
delicate sau țesăturilor rezistente la uzură. Aceste detalii sunt relevante în rezolvarea problemei de
a obține la finalul ciclului de spălare rufe curate, fără a le deteriora.
10
ECDL Computing Capitolul 1 – Gândește ca un programator
Descompunere
Descompunerea poate fi utilizată pentru a diviza o problemă în alte probleme mai mici și mai
ușor de gestionat, precum:
Cum introducem și cum scoatem rufele din mașina de spălat?
Cum anume intră și iese apa din mașina de spălat?
Cum anume ne asigurăm că apa este la temperatura adecvată?
La rândul lor, aceste mici probleme pot fi descompuse în probleme și mai mici:
Care este poziția optimă a ușii în cadrul mașinii de spălat?
Cum putem face ca ușa să se închidă etanș, astfel încât apa să nu se scurgă?
Algoritmi
Algoritmii pot fi elaborați pentru a specifica pașii exacți pe care mașina ar trebui să îi urmeze
pentru diferite cicluri de spălare. În plus, sunt necesari mult mai mulți algoritmi. Spre exemplu,
poate fi elaborat un algoritm care să specifice secvența exactă de pași ce trebuie urmați pentru
fabricarea unei mașini de spălat rufe.
Evaluare
Proiectarea unui produs reprezintă o provocare majoră și ca urmare, proiectele inițiale vor fi
evaluate continuu. Prin intermediul acestei evaluări, proiectanții determină unde și cum poate aduce
îmbunătățiri produsului. Spre exemplu, dacă în timpul testării unei mașini de spălat rufe, apa se
scurge în exteriorul acesteia, designul produsului poate fi modificat astfel încât să se prevină acest
lucru în viitor.
Generalizare
Aspectul unei mașini de spălat poate fi de asemenea îmbunătățit făcându-l universal, prin
utilizarea pe butoane a simbolurilor în locul cuvintelor, astfel încât mașina de spălat să poată fi
utilizată de orice persoană, indiferent de limbă. O altă metodă ar fi prin proiectarea unei mașini de
spălat care să funcționeze atât la 110V, cât și la 220V pentru a putea fi folosită în diferite țări. Dacă
designul mașinii de spălat este modificat în acest fel, poate fi generalizat.
11
Capitolul 1 – Gândește ca un programator ECDL Computing
Recunoașterea de șabloane
Recunoașterea de șabloane are un rol important și, împreună cu celelalte cinci tehnici, poate fi
utilizată de mai multe ori în diferite etape ale procesului de proiectare. Poate ajuta în procesul de
abstractizare prin evidențierea similarităților și diferențelor în aspectele diferite ale unei probleme.
Recunoașterea de șabloane poate ajuta și procesul de generalizare, unde anumite aspecte ale unei
probleme specifice pot fi relaționate cu probleme mai generale. În mod similar, evaluarea
aspectului ajută în procesul de generalizare prin evaluarea modului în care acesta poate fi aplicat
pentru diferite setări.
Cele 6 tehnici de gândire computațională nu trebuie aplicate obligatoriu într-o anumită ordine
sau în cadrul unei singure etape a procesului de proiectare. Ele pot fi utilizate în diverse etape de
proiectare și într-o ordine diferită.
Pași
Exemplu: Organizarea unui festival de muzică
În acest exemplu, tehnicile de gândire computațională sunt aplicate în cadrul unei probleme
complexe precum organizarea unui festival de muzică.
Abstractizarea
Pentru a organiza un festival de muzică, trebuie să înțelegeți în primul rând ce anume este un
festival de muzică. Ca urmare, primul pas ar putea consta în enumerarea elementelor esențiale pe
care un festival de muzică ar trebui să le conțină:
Muzicieni
Locație
Marketing și publicitate
Bilete
Personal angajat etc.
Există și alte detalii care trebuie luate în considerare la organizarea unui festival, dar care nu
sunt esențiale, precum culoarea biletelor sau formularea exactă de pe bilete. Acestea pot îngreuna
planificarea inițială și pot fi elaborate ulterior. Utilizând abstractizarea, detaliile inutile pot fi
eliminate din plan, pentru moment.
Descompunere și Algoritmi
Provocările majore care apar în organizarea unui festival de muzică pot fi divizate în sarcini
mai mici. În practică, acestea pot fi delegate spre a fi rezolvate diverselor persoane:
O persoană care să se ocupe de rezervarea locației de desfășurare a festivalului.
O persoană responsabilă de marketing și publicitate.
O persoană responsabilă cu gestionarea rezervărilor și biletelor.
Aceste sarcini mai mici pot fi la rândul lor divizate în probleme și mai mici. Acest lucru
reprezintă descompunerea unei probleme și este un exemplu de aplicare a metodelor de gândire
computațională.
De exemplu, problema organizării locației poate fi divizată în sarcini mai mici, precum:
Unde este situată locația?
Când este locația disponibilă?
Există parcare disponibilă?
Similar, sarcina legată de parcarea mașinilor poate fi descompusă în probleme și mai mici. De
asemenea, pot fi creați algoritmi simpli, cum ar fi:
12
ECDL Computing Capitolul 1 – Gândește ca un programator
Unde?
Disponibilitate?
Locație
Parcare disponibilă?
Emitere bilete?
Bilete Returnare bilete?
Verificare bilete?
Evaluare
După terminarea evenimentului, poate fi utilă colectarea de feedback cu privire la ce a mers
bine și ce nu. Aceasta este o metodă de evaluare a planului. Dacă festivalul se mai organizează și
anul viitor, lecțiile învățate din evaluarea realizată anul acesta vor îmbunătăți calitatea
evenimentului de anul viitor.
Generalizare
Generalizarea este de asemenea relevantă. O echipă care a gestionat cu succes un festival de
muzică își poate stabili obiective mai ambițioase, spre exemplu un turneu de festivaluri sau
creșterea duratei festivalului, adăugarea mai multor acte artistice sau a mai multor genuri de
muzică. Soluția existentă este reutilizată, însă poate fi generalizată pentru a include elemente noi.
13
Capitolul 1 – Gândește ca un programator ECDL Computing
1.2 INSTRUCȚIUNI
Concepte
Gândirea computațională reprezintă o abordare generală de rezolvare a problemelor, însă poate
fi de asemenea folosită ca punct de plecare pentru crearea instrucțiunilor pentru computere.
Descompunerea problemelor în pași mai simpli a condus la dezvoltarea unuia sau mai multor
algoritmi - colecții de pași simpli, bine definiți, ce trebuie urmați pentru a rezolva o problemă.
Algoritmii pot fi apoi prezentați într-o formă pe care computerele o pot înțelege.
Pași
Exemplu: Un algoritm de sortare a oamenilor în funcție de înălțime
În acest exemplu, trebuie sortați elevii dintr-o clasă în funcție de înălțime. Pentru aceasta, v-
ați putea decide asupra unui număr de pași de urmat:
Concepte
Algoritmi pentru computere
În algoritmul de sortare a elevilor după înălțime, instrucțiunile erau suficient de detaliate pentru
a putea fi înțelese și executate de o persoană, însă nu erau suficient de detaliate astfel încât un
computer să le poată executa. Un computer trebuie programat utilizând un limbaj de programare,
care este mult mai detaliat și mai precis decât un limbaj uman.
14
ECDL Computing Capitolul 1 – Gândește ca un programator
5. Un program reprezintă:
a. Regulile detaliate ale unui joc sau unui sport.
b. Un algoritm exprimat într-o formă adecvată pentru un computer.
c. O colecție de legi și reglementări care determină ce clădiri pot fi construite legal
într-un anumit loc.
a. O secvență de instrucțiuni ce trebuie urmate de o persoană (de exemplu o rețetă de
prăjitură).
15
Capitolul 1 – Gândește ca un programator ECDL Computing
6. Care dintre acestea este cel mai puțin probabil să reprezinte o modalitate prin care
algoritmii sunt utilizați în gândirea computațională?
a. Un algoritm poate duce la un program de calculator care, atunci când este rulat,
rezolvă problema.
b. Un algoritm poate duce la un program de calculator care folosește intuiția pentru a
obține soluții mai bune.
c. Un algoritm poate furniza instrucțiuni pas cu pas pentru fabricarea unui obiect.
d. Un algoritm poate furniza instrucțiuni pas cu pas pentru diverse procese ce implică
oameni, bani și alte resurse.
Tort de ciocolată:
Setați cuptorul la 180oC
Ungeți cu unt 2 tăvi de tort de 9” fiecare
Amestecați ingredientele cu un tel timp de 1 minut
Puneți amestecul obținut în tăvile de tort
Coaceți timp de 30 de minute
Lăsați torturile să se răcească
Ornați torturile și apoi lăsați-le la rece câteva ore.
Turtă dulce:
Amestecați ingredientele până obțineți un aluat moale
Setați cuptorul la 190oC
Întindeți aluatul cu sucitorul într-o foaie groasă de 1/8” și apoi tăiați-l în diverse
forme
Coaceți până când marginile sunt tari, aproximativ 10 minute.
Brioșe cu afine:
Setați cuptorul la 185oC
Ungeți cu unt sau ulei 18 forme de brioșe
Bateți untul și zahărul până se obține o cremă consistentă
Adăugați celelalte ingrediente
Turnați compoziția în formele de brioșe
Glazurați-le cu topping de ciocolată
Coaceți timp de 15 - 20 minute.
Care dintre următoarele reprezintă un șablon comun pentru toate cele 3 rețete?
a. Ungeți cu unt sau ulei 18 forme de brioșe.
b. Ornați și apoi lăsați la rece.
c. Întindeți aluatul.
d. Setați cuptorul la o anumită temperatură.
8. Care dintre următoarele ar reprezenta cel mai relevant detaliu în proiectarea unui program
de gătit pentru un robot?
a. Culoarea robotului.
b. Ce cantități să utilizeze din fiecare ingredient.
c. Din ce magazin au fost cumpărate ingredientele.
d. Dacă programatorul este dreptaci sau stângaci.
16
CAPITOLUL 2 –
DEZVOLTARE SOFTWARE
Lesson 2 - Software Development
Concepte
Tipuri de limbaje:
Limbaj natural
Limbile vorbite precum Engleza, Franceza sau Chineza reprezintă limbi naturale. O limbă
naturală are nevoie de un anumit context pentru a fi clar înțeleasă și pentru a se evita ambiguitățile.
Limbaj formal
Un limbaj formal este foarte strict structurat, cu reguli exacte și precise. Este utilizat în
matematică, ecuații chimice și programe de calculator. Este clar și lipsit de ambiguitate.
Limbajele de programare reprezintă limbaje formale. O modalitate prin care limbajele formale
pot evita ambiguitățile constă în utilizarea parantezelor pentru a grupa cuvinte și termeni și prin
evitarea cuvintelor precum ‘el’ sau ‘ea’ într-un context unde adresarea nu este foarte clară
Regăsiți mai jos 3 tipuri diferite de paranteze utilizate în cadrul limbajelor formale. Fiecare tip
de paranteză are o funcție diferită și poate fi utilizată pentru a defini diverse lucruri, cum ar fi
ordinea instrucțiunilor pe care trebuie să le execute un program.
PARANTEZĂ NUME
() Paranteze rotunde.
{} Acolade.
[] Paranteze drepte.
Pași
Exemplu: Ambiguitate cu ‘și și ‘sau‘
Dacă întrebi o persoană ce aromă de bomboane preferă, aceasta poate răspunde: “Mure și
Lămâie sau Zmeură și Portocală”. Vei înțelege răspunsul, însă pentru ca un computer să poată
înțelege această propoziție, cuvintele trebuie grupate în mod corect.
Pentru un computer, trebuie să scrii (Mure ȘI Lămâie) SAU (Zmeură ȘI Portocală)
18
ECDL Computing Capitolul 2 – Dezvoltare software
În timp ce, dacă scrii Mure ȘI (Portocală SAU Lămâie) ȘI Zmeură, computerul inerpretează
astfel:
Concepte
Limbajele de programare sunt proiectate pentru a scrie programe care instruiesc computerele
să execute o secvență de instrucțiuni în scopul rezolvării unei probleme. Limbajele de
programare au un vocabular mai limitat decât limbajele naturale.
Există diverise limbaje de programare. Acest material de instruire face referire la un cunoscut
limbaj de programare numit Python. Alte limbaje de programare foarte cunoscute sunt Java și C++.
Concepte
Coding
Textul dintr-un program, scris sub forma unei secvențe de instrucțiuni pe care computerul să
le execute, poartă numele de cod. Diversele limbaje de programare utilizează diferite stiluri de cod,
cu reguli diferite și modalități diferite de organizare a instrucțiunilor, cunoscute sub denumirea de
sintaxă.
Scrierea unui program poartă numele de programare sau coding.
Persoanele care scriu programe se numesc programatori.
Există 2 tipuri de cod: cod sursă și cod mașină.
Codul sursă reprezintă codul scris de programator pe care oamenii îl pot înțelege.
Acesta este introdus în computer, de obicei sub formă de text, semne de punctuație și
simboluri și conține instrucțiunile pentru computer. Dacă înveți limbajul de programare
formal și regulile lui (e.g. Python), poți scrie cu succes cod sursă.
19
Capitolul 2 – Dezvoltare software ECDL Computing
Pași
Exemplu: Cod mașină pentru blocarea unei uși
Instrucțiunea de blocare a ușii scrisă în cod sursă ar putea arăta astfel:
Lock( door )
Chiar dacă nu este corect din punct de vedere gramatical, are sens pentru oamenii care îl citesc.
Un computer care citește instrucțiunile codului sursă vede literele ‘L’, ‘o’, ‘c’, ‘k’, ‘(‘, și așa
mai departe. Instrucțiunile nu sunt într-un format pe baza căruia computerul să poată executa o
acțiune. În schimb, computerul are nevoie ca aceste instrucțiuni să fie convertite într-un format pe
care el îl poate înțelege și executa.
Computerul conține circuite electrice care funcționează conform unor anumite șabloane sau
combinații de 1 și 0. Mai jos, regăsiți un exemplu despre ce ar putea însemna anumite șabloane de
1 și 0.
În acest exemplu simplu, o instrucțiune cod sursă ‘Lock( door )’ corespunde unei instrucțiuni
cod mașină, 0100. În mod normal, o singură linie de cod sursă necesită mai multe instrucțiuni cod
mașină scrise una după cealaltă, în ordinea corectă.
În trecut, programatorii converteau codul sursă în cod mașină manual și creau și documentau
singuri seriile de 1 și 0. Apariția programelor care traduc codul sursă în cod mașină a permis
scrierea unor programe mult mai mari și mai complexe.
20
ECDL Computing Capitolul 2 – Dezvoltare software
Concepte
Pe lângă scrierea codului sursă, programatorii trebuie să își documenteze munca sub forma
unor notițe de tip text. Aceste notițe nu sunt citite de către computer, însă îi ajută pe programatori
și pe ceilalți colegi să înțeleagă diferitele etape de dezvoltare ale unui program.
21
Capitolul 2 – Dezvoltare software ECDL Computing
Concepte
Descrierile și specificațiile pot juca un rol important în dezvoltarea unui program.
Următoarea diagramă ilustrează câteva dintre etapele și activitățile principale în crearea unui
program.
Analiză
Această etapă implică definirea problemelor care trebuie rezolvate. Analiza reprezintă, în linii
mari, un proces de abstractizare, prin care se enumeră toate aspectele problemei, identificându-se
aspectele relevante și modul în care sunt acestea interconectate.
Proiectare
Această etapă implică lucrul cu algoritmi (seturi de pași de urmat) în scopul rezolvării
problemei. Astfel, se utilizează descompunerea pentru a diviza problema în părți mai mici și se
planifică modul de proiectare al algoritmilor.
Programare
Această etapă presupune scrierea programului. Acest lucru implică identificarea unei
modalități pentru a exprima algoritmii în limbajul de programare ales.
22
ECDL Computing Capitolul 2 – Dezvoltare software
Testare
Această etapă presupune verificarea faptului că programul funcționează așa cum ar trebui. În
etapa de testare se pot identifica eventuale erori logice sau de sintaxă ale programului. Acest aspect
este acoperit în detaliu în capitolul 15.
Îmbunătățire
Această etapă implică adăugarea de noi caracterisitici pentru a extinde funcționalitățile
programului, pentru îmbunătățirea performanțelor acestuia sau pentru a generaliza programul în
scopul utilizării sale în diverse situații.
Specificațiile programului sunt elaborate în mod normal în etapa de proiectare. O parte dintre
cerințele din specificații pot apărea direct din descompunerea problemei în componente mai mici.
Specificațiile programului sunt examinate în etapa de testare întrucât fiecare afirmație legată de
funcționalitățile programului trebuie verificată.
În etapa de îmbunătățire, descrierea programului poate fi actualizată pentru a include planuri
de extindere a funcționalităților oferite de program.
23
Capitolul 2 – Dezvoltare software ECDL Computing
6. Potriviți fiecare etapă din crearea unui program (de la a la e) cu scopul ei:
a) Testare, b) Proiectare, c) Programare, d) Analiză, e) Îmbunătățire
Îmbunătățirea programului existent.
Definirea clară a problemei.
Verificarea funcționării corecte a programului.
Proiectarea algoritmilor într-un limbaj de programare ales.
Elaborarea unor algoritmi pentru rezolvarea problemei.
24
CAPITOLUL 3 –
ALGORITMI
Lesson 3 Algorithms
Concepte
Secvențe de instrucțiuni
Algoritmul este o succesiune finită de pași care rezolvă o anumită cerință/problemă. Altfel
spus, algoritmii reprezintă probleme complexe descompuse în pași sau instrucțiuni mai simple.
În majoritatea algoritmilor, instrucțiunile sunt executate una după cealaltă, într-o anumită ordine
(secvență). O secvență reprezintă un număr de instrucțiuni simple ce ar fi trebui executate una
după cealaltă.
Intrare și ieșire
Instrucțiunile utilizează de cele mai multe ori informații din lumea exterioară computerului, pe
care apoi le prelucrează într-un anumit fel. Programele primesc informațiile de la utilizator prin
intermediul datelor de intrare (input) și generează un rezultat, anumite date de ieșire (output).
Pași
Exemplu: Intrări și ieșiri pe un telefon mobil.
Un telefon mobil preia informații (input), le procesează și returnează rezultate (outputs).
Touch screen-ul este o metodă importantă de introducere a datelor, de exemplu când scrieți
un mesaj sau când apăsați pe ecran pentru a deschide o aplicație.
Ecranul de afișare reprezintă o metodă importantă de afișare a unor date, ca de exemplu
afișarea unei liste de contacte.
26
ECDL Computing Capitolul 3 – Algoritmi
Pași
Exemplu: Așteptarea ca un cuptor să se încălzească
Înainte de a adăuga amestecul de ingrediente în cuptor, cuptorul trebuie să fie încălzit la
temperatura potrivită. Un algoritm ar putea include o decizie da/nu pentru a determina acest lucru.
“Cuptorul este la temperatura potrivită?” Un termostat va furniza răspunsul (da sau nu). Dacă
răspunsul este da, atunci prăjitura poate fi introdusă la cuptor. Dacă răspunsul este nu, algoritmul
va mai aștepta o perioadă și va pune din nou întrebarea.
Concepte
2 tehnici care îi ajută pe programatori în descrierea algoritmilor sunt pseudocodul și schemele
logice (flowchart). Acestea sunt utilizate pentru reprezentarea secvenței de pași din cadrul unui
algoritm. Algoritmii exprimați în pseudocod sau sub forma schemelor logice sunt rareori
suficient de preciși pentru a putea fi utilizați de un computer, dar prezintă o serie de pași suficient
de în detaliu astfel încât un programator să poată înțelege modul în care ar trebui să funcționeze
algoritmul respectiv.
Pseudocod:
Pseudocodul arată ca un cod în care programul va fi scris, însă nu este atât de precis. Dacă
pseudocodul poate fi înțeles, atunci următorul pas este scrierea efectivă a codului din program.
27
Capitolul 3 – Algoritmi ECDL Computing
Algoritmul pentru perierea dinților ar putea fi reprezentat și sub forma unei scheme logice:
28
ECDL Computing Capitolul 3 – Algoritmi
Concepte
Mai jos sunt prezentate câteva forme de blocuri utilizate în cadrul unei scheme logice:
Nu
Proces
Aceste blocuri conțin instrucțiuni simple pentru a executa o acțiune, cum ar fi adunarea a
2 numere sau căutarea unui cuvânt în dicționar.
Decizie
Blocurile de decizie permit alegeri alternative privind pașii următori pe care algoritmul
trebuie să îi execute. Ele de obicei conțin o întrebare cu 2 variante de răspuns: da și nu.
Dacă răspunsul este ‘da’ se urmează un anumit scenariu. Dacă răspunsul este ‘nu’, se
urmează alt scenariu. Aceasta este metoda prin care algoritmii pot merge dincolo de
secvențele simple de pași.
Conectarea blocurilor
Săgețile și conectorii sunt folosiți pentru a conecta blocurile din cadrul unei scheme logice.
Săgeată
O linie direcțională desenată pentru a conecta 2 blocuri în cadrul unei scheme logice.
Această săgeată indică direcția de urmat în cadrul unui algoritm. De obicei, acestea sunt
29
Capitolul 3 – Algoritmi ECDL Computing
denumite linii de flux. De exemplu, instrucțiunile din cadrul unei secvențe conțin săgeți
între ele.
Conector
Un mic cerc în cadrul unei scheme logice este utilizat pentru a conecta două linii de flux
între ele. El indică un salt de la un punct din proces la altul, ca de exemplu atunci când se
răspunde la o întrebare “Da/Nu”.
Pași
Exemplu: Schemă logică pentru 'Trucul Magic 347347'
Aceasta este schema logică pentru un truc magic cu numere. Ea ilustrează o simplă secvență
de instrucțiuni, fără blocuri de decizie. Se pornește procesul de la blocul Start și se continuă urmând
liniile de flux, executând instrucțiunile din fiecare bloc, până se ajunge la blocul Stop.
30
ECDL Computing Capitolul 3 – Algoritmi
Această schemă logică reprezintă un algoritm de coacere a unei prăjituri. Ea conține un bloc
de decizie. Acesta determină dacă prăjitura poate fi scoasă din cuptor sau, dacă nu, îl instruiește pe
bucătar să aștepte până când prăjitura este gata și poate fi scoasă din cuptor.
“Prăjitura este coaptă?” reprezintă o dată de intrare în cadrul algoritmului și este reprezentată
printr-un bloc de intrare/ieșire.
START
Amestecați ingredientele
Prăjitura este
coaptă?
STOP
31
Capitolul 3 – Algoritmi ECDL Computing
INDICII:
1. Porniți cu o secvență de acțiuni și scrieți acei pași ca pseucocod, sub forma unei liste
numerotate.
2. Luați anumiți pași și descompuneți-I în pași mai mici. De exemplu, dacă aveți un pas numit
‘pregătește micul dejun’ – acesta poate fi divizat în pași mai mici precum “pune pâinea în prăjitor”.
3. Reprezentați această secvență mai detaliată sub forma unei scheme logice.
4. Faceți schema logică mai interesantă prin introducerea variațiilor. De exemplu, cum
afectează vremea drumul către școală? Variațiile pot depinde de întrebări precum:
Plouă?
Întârzii la școală?
5. Adăugați blocuri de decizie pentru fiecare dintre aceste întrebări, cu diferiți pași dacă
răspunsul este da sau nu.
32
ECDL Computing Capitolul 3 – Algoritmi
3.4 PSEUDOCOD
Concepte
În loc să creați o schemă logică, un algoritm poate fi reprezentat în pseudocod.
Pseudocod reprezintă o modalitate de a scrie în mod informal modul de operare al unui
algoritm. El combină limbajul natural informal (e.g. Engleza) cu porțiuni din structura limbajelor
de programare.
Pași
Exemplu: Pseudocod pentru 'Trucul Magic' 347347
Schema logică pentru trucul numeric magic ar putea fi scrisă sub formă de pseudocod astfel:
Gândiți-vă la un număr de 3 cifre precum 347
Scrieți numărul de 2 ori pentru a obține un număr de 6 cifre (ex: 347347)
Împărțiți-l la 13
Împărțiți-l la 11
Împărțiți-l la 7
Ar trebui să obțineți numărul ales inițial.
STOP
Pseudocodul este scris utilizând structura și anumite convenții din limbajele de programare.
Cuvântul ‘Așteptați’ este indentat, ceea ce indică că această acțiune are loc doar dacă prăjitura nu
este coaptă.
Concepte
La scrierea algoritmilor, este ușor să faceți greșeli precum omiterea anumitor pași, așezarea
pașilor într-o ordine greșită sau efectuarea de decizii incorecte. Aceste erori trebuie corectate.
Regăsiți mai jos câteva erori și modul în care le puteți remedia.
33
Capitolul 3 – Algoritmi ECDL Computing
2. Rezultat incorect
Iată mai jos un algoritm pentru coacerea unei prăjituri și scoaterea ei din cuptor doar atunci
când este coaptă și nu înainte.
Încălziți cuptorul la 1800C
Amestecați ingredientele
Introduceți prăjitura în cuptor
Prăjitura este coaptă?
Așteptați
Scoateți prăjitura din cuptor
STOP
Decizia de a aștepta ar putea fi greșită întrucât nu există niciun test de verificare a gradului de
coacere a prăjiturii. Pentru a corecta un posibil rezultat incorect, este necesară o linie în plus în
cadrul pseudocodului:
Iată mai jos un algoritm pentru coacerea unei prăjituri, din care lipsesc anumiți pași importanți.
34
ECDL Computing Capitolul 3 – Algoritmi
Săgeată
Decizie
Start sau Stop
Proces
Intrare sau ieșire
Conector
35
Capitolul 3 – Algoritmi ECDL Computing
5. Următorul program trebuie să evacueze apa dintr-o mașină de spălat. Ce eroare conține?
a. Instrucțiune lipsă
b. Secvență incorectă
c. Rezultat incorect
d. Indentare incorectă
36
CAPITOLUL 4 -
PROGRAMARE
Lesson 4 - Python Expressions
Concepte
Acest material utilizează Python, un limbaj de programare flexibil și utilizat pe scară largă, cu
ajutorul căruia se pot crea programe simple sau complexe. Python rulează mai repede decât
majoritatea limbajelor de programare. În plus, Python oferă un set complet de comenzi și
instrucțiuni.
Acest material utilizează mediul de programare Python IDLE, care permite scrierea, editarea
și rularea de cod, precum și salvarea programelor sub forma unor fișiere ce pot fi utilizate ulterior.
El încorporează și un interpretor - Python Shell.
Interpretorul - Python Shell permite editarea și executarea instucțiunilor în mod interactiv,
ceea ce înseamnă că în momentul în care utilizatorul introduce o instrucțiune, sistemul o
evaluează, o execută și afișează rezultatul
După lansarea în execuție a Python IDLE, pe ecan apare un cursor pentru a demonstra faptul
că utilizatorul poate introduce instrucțiuni. Cursorul constă în 3 caractere >>>. În momentul
apariției acestora pe ecran, puteți începe tastarea codului.
Concepte
Lansare Python
1. Localizați pictograma IDLE Python aflată pe ecranul de lucru (Desktop).
3. Executați click stânga după cursorul >>>. Acesta reprezintă semnalul că puteți
introduce cod sau intrucțiuni pe care Python să le ruleze.
38
ECDL Computing Capitolul 4 – Programare
6. Vizualizați rezultatul.
7. Apăsați butonul X pentru a închide fereastra.
3. Executați click stânga după cursorul >>>. Acesta reprezintă semnalul că puteți
introduce cod sau intrucțiuni pe care Python să le ruleze.
39
Capitolul 4 – Programare ECDL Computing
4. Tastați asdf
Concepte
Atunci când scrieți un cod, este recomandabil să îl salvați astfel încât să îl puteți reutiliza
ulterior. Extensia fișierelor Python este .py. Această extensie anunță calculatorul că acest fișier
reprezintă un program Python, ca de exemplu MagicTrick.py.
40
ECDL Computing Capitolul 4 – Programare
2. Este creată o nouă fereastră, fără denumire. Executați click în zona mare albă a
ferestrei.
4. Executați click pe meniul File, Save As și observați apariția unei ferestre de dialog.
Remarcați următoarele:
Locația implicită de salvare a fișierelor Python este Python 32. Pentru moment
poate fi folosită aceasta, însă o puteți modifica, în funcție de dorințele dvs.
Tipul de fișier implicit este Python files (*py,*pyw)
41
Capitolul 4 – Programare ECDL Computing
42
ECDL Computing Capitolul 4 – Programare
43
CAPITOLUL 5 -
EFECTUAREA CALCULELOR
Lesson 4 - Python Expressions
Concepte
Operatori
Ca și majoritatea limbajelor de programare, Python poate efectua calcule matematice sau poate
evalua expresii matematice, cum ar fi:
10+12+15.
NOTAȚIE SEMNIFICAȚIE
3*4 3 înmulțit cu 4
3/4 3 împărțit la 4
3+4 3 plus 4
3-4 3 minus 4
În Python:
Paranteze
Expresiile matematice în Python pot conține de asemenea paranteze, ca de exemplu:
10-(6-4)
Apoi: 10-2=8
Deci, 10-(6-4)=8
45
Capitolul 5 – Efectuarea calculelor ECDL Computing
Concepte
Atunci când există paranteze în cadrul unei expresii, este clar pentru Python în ce ordine trebuie
să calculeze expresia respectivă. Atunci când nu există paranteze, există o ordine acceptată a
operațiilor. O regulă a limbajului formal determină ordinea de aplicare a operatorilor. Această
regulă poartă denumirea de Prioritatea Operatorilor. În majoritatea limbajelor de programare,
secvența sau ordinea în care operatorii sunt aplicați este înmulțire, împărțire, adunare, scădere.
Operatorii * și / sunt aplicați înaintea operatorilor + și -.
2*2*3+4
4+3*2=?
Totuși, având în vedere ordinea operatorilor, înmulțirea este efectuată prima. 4+3*2 este
calculată exact ca și cum ar fi fost scrisă sub forma 4+(3*2). Ca urmare:
4+(3*2) = 4+6, și 4+6 = 10 răspuns corect: 10
31*7+112*2
2. Tastați expresiile (calculele). Apăsați tasta Enter după ce ați terminat de introdus fiecare
expresie.
46
ECDL Computing Capitolul 5 – Efectuarea calculelor
3. Verificați rezultatele.
În acest caz, se poate observa că este important să se calculeze întâi costul pe fiecare culoare
și apoi să se obțină costul total.
Așadar, (31*7)+(112*2) oferă prețul total corect.
Parantezele nu sunt necesare în acest caz datorită ordinii operațiilor.
Totuși, puteți adăuga oricând paranteze suplimentare în cadrul unei expresii pentru a modifica
ordinea operațiilor. Parantezele au prioritate asupra oricărei reguli legate de ordinea operațiilor.
2. Care dintre următoarele expresii este utilizată pentru a înmulți numerele 4 și 7 în Python?
a. 4 + 7
b. 4 x 7
c. 4 # 7
d. 4 * 7
47
CAPITOLUL 6 –
VARIABILE ȘI TIPURI DE DATE
Lesson 4 - Python Expressions
Concepte
În programare sunt utilizate toate tipurile de date pentru rezolvarea problemelor și generarea
informațiilor. Tipul de date determină modul de stocare a acestora în memoria calculatorului,
precum și operațiile care pot fi efectuate cu datele respective. Spre exemplu, vârsta unei persoane
este stocată sub forma unui număr și se pot efectua diverse calcule matematice pe baza ei, ca de
exemplu compararea ei cu vârsta altor persoane. Iar numele unei persoanei este stocat ca și text.
În Pyhon tipurile de date utilizate cel mai frecvent sunt: număr întreg (integer), număr real
(float), șir de caractere (string) și Boolean.
Majoritatea limbajelor de programare au tipuri de date standard, care diferă doar ca denumire.
De exemplu, tipul de date ‘string’ (șir de caractere) utilizat în Python este folosit în alte limbaje de
programare ca și tip de date ‘character’ (caracter). Tipul de date character poate fi utilizat de
asemenea pentru a defini litere sau caractere precum 'a' 'b' 'c' '@' etc.
Boolean
Descrie sau definește o valoare ce poate fi fie Adevărată, fie Falsă. Tipurile de date Booleene
pot avea întotdeauna doar aceste 2 valori. Valorile booleene sunt generate de obicei ca rezultat a
comparației numerelor între ele.
De exemplu expresia:
3 < 4 returnează valoarea booleană True.
6.2 VARIABILE
Concepte
O variabilă este utilizată în cadrul unui cod pentru a reprezenta anumite date astfel încât
acestea să poată fi ulterior folosite de mai multe ori în cadrul unui program. O variabilă reprezintă
un înlocuitor al valorilor actuale. Ea poate stoca valoarea și o poate păstra pentru o utilizare
ulterioară.
49
Capitolul 6 – Variabile și tipuri de date ECDL Computing
În acest caz, de fiecare dată când variabila Greeting va fi utilizată în cadrul programului, ea va
reprezenta Good Morning. După atribuire, variabila numită Greeting poate fi utilizată în locul
șirului de caractere 'Good Morning'.
Definirea Variabilelor
Definirea unei variabile înseamnă definirea în cadrul codului a tipului de date pe care respectiva
variabilă îl va stoca, cum ar fi un număr (e.g. întreg, real) sau un șir de caractere. În Python, acest
lucru se realizează prima dată când se atribuie o valoare unei variabile. Python determină faptul că
variabila va stoca tipul de date al valorii atribuite.
Dacă se asociază un număr (i.e. valoare) variabilei x, Python va presupune că x va reprezenta
întotdeauna o valoare numerică.
x=3
Orice caractere incluse între ghilimele simple sunt considerate un șir de caractere, chiar și un
număr. În exemplul de mai jos, 12 este un șir de caractere și nu un număr:
Age = ‘12’
50
ECDL Computing Capitolul 6 – Variabile și tipuri de date
Inițializarea Variabilelor
Înainte de utilizarea unei variabile, trebuie să îi atribuiți o valoare inițială. Prima dată când se
atribuie o valoare unei variabile indică inițializarea variabilei respective.
Dacă încercați să aplicați o comandă unei variabile înaintea ca aceasta să fi fost inițializată,
veți primi un mesaj de eroare. Înainte ca o valoare să fie atribuită unei variabile, variabila este
neinițializată.
Actualizarea Variabilelor
Valoarea unei variabile poate fi actualizată prin atribuirea unei noi valori acesteia. Veți
actualiza variabila și automat ea va fi actualizată peste tot în cadrul programului, unde a fost
utilizată. Acesta este un motiv principal pentru care se utilizează variabilele întrucât este suficientă
o singură actualizare care să modifice mai multe apariții ale variabilei respective. O variabilă
stochează întotdeauna cea mai recentă valoare atribuită acesteia.
51
Capitolul 6 – Variabile și tipuri de date ECDL Computing
Concepte
Lucrul cu șiruri de caractere
Exact la fel cum adunăm numere putem alătura caractere sau șiruri de caractere. Pentru a face
acest lucru în Python, puteți folosi simbolul +.
Spre exemplu, inițializați variabila Name cu valoarea “David” și variabila Question cu
valoarea “What is your age?”
Name= “David”
Remarcați spațiile libere în cadrul șirului de caractere. Dacă nu se adăuga spațiu la finalul
șirului de caractere, atunci nu ar fi existat niciun spațiu între acesta și numele persoanei, iar
întrebarea ar fi arătat astfel:
atunci Age +1 va retuna o eroare, întrucât nu se poate adăuga un număr la un șir de caractere.
Pentru remedierea acestei erori, puteți converti variabila Age într-un număr întreg astfel:
Age = int( Age )
3. Rulați programul.
4. La întrebarea “What is your name?” răspundeți tastând numele dvs.
5. Apăsați tasta Enter.
6. Salvați programul cu numele Myname.py.
53
Capitolul 6 – Variabile și tipuri de date ECDL Computing
3. Rulați programul.
4. Răspundeți la prima întrebare și apăsați tasta Enter.
5. Răspundeți la a doua întrebare și apăsați tasta Enter.
54
ECDL Computing Capitolul 6 – Variabile și tipuri de date
4. În Python, dacă o variabilă numită ‘length’ are valoarea 200 și instrucțiunea ‘length=400’
este executată, ce se va întâmpla?
a. Python va returna un mesaj de eroare, întrucât nu se poate schimba valoarea unei
variabile.
b. Python va returna un mesaj de eroare, întrucât nu puteți schimba valoarea 200 în
400.
c. Python va atribui valoarea 400 variabilei length.
d. Python va adăuga 400 la valoarea variabilei length, aceasta având acum valoarea
600.
55
CAPITOLUL 7 –
ADEVĂRAT SAU FALS
Lesson 5 - Python Code
Concepte
În viața de zi cu zi, verificați adesea dacă o informație este Adevărată sau Falsă înainte de
luarea unei decizii. Acest concept este folosit de asemenea și în cadrul programelor de calculator,
unde se verifică dacă anumite condiții sunt Adevărate sau False înaintea stabilirii pașilor următori.
De exemplu:
Este frig afară?
Adevărat (True) – ia-ți o haină
Fals (False) – lasă haina acasă
Prăjitura este Nu
coaptă?
Da
În cadrul unei scheme logice, verificările sau testările sunt reprezentate prin blocuri de decizie
cu rezultat Da (Yes) sau Nu (No).
Programele lucrează cu rezultate Adevărat (True) și Fals (False) decât cu Da (Yes) și Nu
(No).True și False reprezintă concepte importante în programare întrucât este necesară o modalitate
de a testa dacă anumite condiții sunt îndeplinite pentru a putea controla pașii următori în cadrul
programului.
În programare, acest test logic poartă denumirea de expresie Booleană. O expresie booleană
determină o valoare booleană ce poate fi fie adevărată, fie falsă.
O modalitate prin care Python utilizează expresiile booleene este să compare dimensiunea unei
valori numerice cu altă valoare și să returneze un rezultat de tip ‘True’ sau ‘False’. El execută acest
lucru utilizând un operator de comparație. Acesta compară cele 2 valori între ele și decide relația
lor. Uneori, aceștia mai poartă numele de operatori relaționali.
99 > 7
57
Capitolul 7 – Adevărat sau Fals ECDL Computing
Aici, operatorul ‘>’ compară valorile 99 și 7 pentru a vedea dacă valoarea din stânga este mai
mare decât valoarea din dreapta. Dacă acest lucru este adevărat, el va returna rezultatul True, în
caz contrar va returna rezultatul False.
Așadar: 99 > 7 este Adevărat (True) iar 6 > 7 este Fals (False).
Concepte
Operatorii de comparație reprezintă un tip de expresii logice Booleene utilizate pentru a
compara valori și a decide dacă rezultatul este adevărat sau fals.
Există 6 operatori de comparație. În tabelul de mai jos X și Y sunt variabile ce stochează valori
numerice:
NOTAȚIE SEMNIFICAȚIE
X == Y X este egal cu Y
X != Y X nu este egal cu Y
Notă: Unele limbaje de programare pot folosi operatorul <> pentru a desemna inegalitatea
dintre 2 valori și = pentru a desemna egalitatea. Python 3.x nu folosește <> și folosește == în loc
de =.
58
ECDL Computing Capitolul 7 – Adevărat sau Fals
Concepe
Operatorii booleeni sunt cuvintele și (and), sau (or), negație (not), care sunt utilizate
pentru a combina expresii booleene simple în scopul obținerii unui rezultat final de tip boolean.
Există 3 tipuri de operatori Booleeni de bază:
and
Combină 2 valori booleene și returnează un rezultat – adevărat dacă ambele valori sunt
adevărate și fals în caz contrar
Expresie Rezultat
True and True True
True and False False
False and True False
False and False False
or
Combină 2 valori booleene și returnează un rezultat - Adevărat dacă una dintre valori este
adevărată sau dacă ambele valori sunt adevărate, Fals în caz contrar
Expresie Rezultat
True or True True
True or False True
False or True True
False or False False
not
Convertește o singură valoare Booleană din Adevărat în Fals și invers.
59
Capitolul 7 – Adevărat sau Fals ECDL Computing
Expresie Rezultat
not True False
not False True
Expresiile Booleene pot utiliza atât operatorii de comparație, cât și operatorii Booleeni, ca de
exemplu:
x < 3 and y < 12
Într-o astfel de expresie mixtă, operatorii de comparație sunt evaluați înaintea operatorilor
Booleeni. Acest lucru se datorează ordinii operatorilor despre care vom vorbi mai încolo.
5. Utilizați Python pentru a evalua câteva expresii Booleene rezultate din compararea
numerelor.
60
ECDL Computing Capitolul 7 – Adevărat sau Fals
Concepte
Inițializarea și atribuirea valorilor unor variabile se aplică pentru nume, șiruri de caractere și
valori Booleene.
Instrucțiunea Y = 200 va inițializa variabila numită Y cu valoarea numerică 200.
Instrucțiunea A = False va inițializa variabila numită A cu valoarea Booleană False.
Instrucțiunea name=input(“What is your name?”) va inițializa variabila numită name cu un
șir de caractere obținut ca răspuns la întrebarea "What is your name?"
Iată ce se întâmplă:
i. Utilizatorul este întrebat "What is your name?"
ii. Utilizatorul își introduce numele sub forma unui șir de caractere.
iii. Valoarea acestui șir de caractere este atribuită varibilei denumite name.
Următorul exemplu utilizează o variabilă de tip Boolean denumită True_or_false.
Remarcați folosirea simbolului _ (underscore) între cuvintele din denumirea variabilei. Python
tratează acest simbol din cadrul numelui unei variabile ca pe orice altă literă. Ca urmare,
True_or_false desemnează o singură variabilă. Dacă utilizați spațiu în loc de _, Python va trata
denumirea variabilei ca 3 cuvinte separate și va returna o eroare.
Instrucțiunea True_or_false = Age > 12 compară variabila Age cu valoarea 12 și stochează
rezultatul Boolean în cadrul variabilei True_or_false.
2. Rulați programul.
Introduceți numele dvs.
Introduceți o vârstă mai mare ca 12.
61
Capitolul 7 – Adevărat sau Fals ECDL Computing
Concepte
Utilizarea parantezelor în expresiile Booleene
Așa cum a fost explicat și anterior, parantezele sunt importante în cadrul expresiilor numerice.
Ele sunt de asemenea importante și în cadrul expresiilor Booleene.
(A and B) or C nu este același lucru ca și A and (B or C)
Să presupunem de exemplu că A este False, B este True și C este True. Introducerea acestor
valori în 2 expresii returnează rezultate diferite:
(A and B) or C este evaluată ca fiind True
Pentru a verifica acest lucru, tastați expresiile Booleene în Python, așa cum este prezentat mai
jos.
Tabelul de mai jos reprezintă o listă parțială a ordinii în care sunt majoritatea operatorilor
importanți sunt aplicați. În lista de mai jos, operatorii din partea de sus a listei sunt aplicați înaintea
celor aflați la finalul listei.
Simbol Operație
*/ Înmulțire și împărțire
+- Adunare și scădere
or Operator Boolean or
Spre exemplu, în absența parantezelor, * este evaluat înainte de + (și în cadrul listei de mai sus
* este înainte de +). Similar, ‘and’ este evaluat înainte de ‘or’ (la fel cum este evidențiat și în lista
de mai sus).
O expresie precum:
A or B and C
va fi evaluată astfel:
A or (B and C)
Ordinea operatorilor pentru operațiile *, /, + și – este utilizată atât de frecvent încât rar se
utilizează parantezele pentru clarificarea ordinii de evaluare a expresiei.
63
Capitolul 7 – Adevărat sau Fals ECDL Computing
64
CAPITOLUL 8 –
TIPURI DE DATE AGREGAT
Concepte
Pe lângă tipurile standard de date precum integer, string și Boolean, există o altă categorie de
tipuri de date denumite agregat. Acestea stochează elemente multiple, ca de exemplu o listă de
nume. Majoritatea limbajelor de programare abordează într-un anumit fel tipurile de date agregat,
ca de exemplu un tablou ce conține un grup de elemente din același tip de date
În Python există 2 tipuri de date agregat: listă și tuplu.
Listă
Reprezintă o colecție de valori. Listele pot fi modificate prin adăugarea sau eliminarea
elementelor din conținutul lisei sau prin modificarea elementelor existente. Python poate afișa o
listă întreagă de valori. De asemenea, el poate prelua elemente dintr-o listă. (În Python, tipul de
date agregat ‘listă’ îndeplinește rolul de ‘tablou (array)’ existent în alte limbaje de programare.)
Tuplu
Un tuplu este exact ca o listă, cu precizarea că, odată creat, nu poate fi modificat prin
rearanjarea, adăugarea, eliminarea sau modificarea elementelor individuale.
Chiar dacă restricția privind tuplurile pare să le facă mai puțin folositoare decât listele, tuplurile
au două avantaje importante:
1. Preluarea elementelor din tupluri este mai rapidă decât cea din liste.
2. Un programator care citește codul pentru tupluri nu trebuie să verifice dacă valorile au fost
modificate.
pets[0] = pisică
pets[1] = câine
pets[3] = peștișor
8.2 LISTE
Concepte
Python conține anumite metode predefinite pentru lucrul cu listele. Spre exemplu, această
comandă va sorta lista numită pets:
pets.sort()
66
ECDL Computing Capitolul 8 – Tipuri de date agregat
4. Rulați programul.
8.3 TUPLURI
Concepte
Tupluri în Python
Tuplurile sunt create în același fel ca și listele, însă utilizând paranteze rotunde în loc de cele
drepte.
67
Capitolul 8 – Tipuri de date agregat ECDL Computing
68
ECDL Computing Capitolul 8 – Tipuri de date agregat
69
CAPITOLUL 9 –
CONSTRUIREA CODURILOR
- Python Code
9.1 COD
Concepte
Imaginați-vă că tocmai ați finalizat un program pentru un joc pe care l-ați inventat. Cunoașteți
exact ce face codul din program întrucât dvs. l-ați scris. Vă salvați fișierele create și treceți la
urmatorul proiect. Imaginați-vă apoi că reveniți la acest program după câteva luni; cât de repede v-
ați putea familiariza cu codul respectiv? Cât de ușor ar fi pentru o persoană care nu a văzut niciodată
codul respectiv să îl înțeleagă?
În realitate, programele create în Python pot fi destul de mari și pot conține multe instrucțiuni.
De obicei, la aceste programe lucrează mai mulți programatori, în diverse etape de dezoltare a
programului. Este esențial ca programul să conțină un cod care să poată fi ‘inteligibil’ adică
persoana care îl citește să poate înțelege ușor ce anume face programul și de ce.
Există o serie de tehnici generale de a face un cod mai ușor de înțeles, care se pot aplica în
toate limbajele de programare, și anume:
Utilizarea comentariilor
Organizarea codului
Utilizarea numelor descriptive
9.2 COMENTARII
Concepte
Un comentariu reprezintă o porțiune de text care explică ce anume face respectiva porțiune de
cod. Este o descriere scurtă a unei porțiuni de cod pe care oamenii o pot citi, însă pe care
computerele o vor ignora, fiind proiectată pentru a-i ajuta pe programatori să înțeleagă ce anume
se întâmplă în cadrul programului. Comentariile adecvate reprezintă o caracteristică a unui cod
bine structurat și documentat. Comentariile din cadrul codului ar trebui să îl ajute pe autor, dar și
pe alți oameni să înțeleagă ce anume face fiecare secțiune de cod.
Comentariile încep cu simbolul # și apar scrise cu roșu în editorul Python.
Textul roșu care apare între semnul # și sfârșitul rândului nu este luat în considerare de Python
la rularea codului. Acest text este doar pentru programatori.
Concepte
Programatorii fac codul mai ușor de urmărit prin divizarea lui în porțiuni sau blocuri mai mici.
Un bloc este definit ca un grup adiacent de linii care sunt indentate la fel. Indentarea este
utilizată pentru a putea înțelege și citi mai ușor codul respectiv. Mulți editori de coduri realizează
indentare automată.
Blocurile sunt de obicei denumite folosindu-se cuvântul 'def' urmat de nume, ales pentru a
descrie ce anume face codul respectiv. (Aceste aspecte sunt detaliate în capitolul 11 Proceduri și
Funcții.)
71
Capitolul 9 – Construirea codurilor ECDL Computing
Numele (“def name”) este introdus primul, iar apoi începutul blocului este evidențiat printr-o
indentare a liniei. Liniile de cod din cadrul unui bloc au aceeași indentare și reprezintă o secvență
de instrucțiuni și, ca urmare, vor fi rulate unele după celelaltele.
Prin utilizarea unor blocuri denumite corect, un programator poate oferi o structură clară a unui
program Python destul de complicat.
Concepte
Numele descriptive reprezintă o caracteristică a unui cod bine structurat și documentat. În
programare, reprezintă procesul de a atribui nume semnificative elementelor, funcțiilor și
procedurilor. Există o structură acceptată, comună tuturor limbajelor de programare. Spre exemplu,
pentru a scrie în Python o mică funcție numită 'egg timer', aceasta ar trebui denumită 'egg_timer'.
Acest lucru permite utilizatorilor să înțeleagă scopul funcției respective.
Atribuirea unor nume semnificative variabilelor va oferi mai mult sens utilizatorului. Numele
variabilelor ar trebui alese cu grijă pentru a oferi indicii despre scopul utilizării variabilei
respective.
În lista noastră de exemple de la capitolul 8, variabila numită pets ar fi putut fi utilizată în
schimb pentru o listă de fructe:
pets=[‘ananas’,’mango’,’kiwi’]
Cu toate acestea, utilizarea unui astfel de nume va crea confuzie pentru un programator care
încearcă să citească codul respectiv.
72
ECDL Computing Capitolul 9 – Construirea codurilor
3. Revizuiți codurile create până acum pe baza acestui material și verificați unde
anume ați putea îmbunătăți lizibilitatea codului pe baza tehnicilor prezentate în acest
capitol.
73
CAPITOLUL 10 –
INSTRUCȚIUNI CONDIȚIONALE
Lesson 6 - Flow of Control
Concepte
În limbajele de programare mai vechi, fiecare linie de cod dintr-un program conținea o
instrucțiune care se executa singură. Fiecare instrucțiune era executată în ordine de computer, una
după cealaltă. Acest lucru poartă denumirea de programare secvențială.
În programarea secvențială instrucțiunile sunt executate în ordine, una după cealaltă.
În limbajele de programare, o instrucțiune reprezintă cea mai mică porțiune de cod care se
poate executa singură.
10.2 INSTRUCȚIUNEA IF
Concepte
În cadrul unei scheme logice, un bloc de decizie poate fi considerat o element complet
autonom. Acest bloc de decizie are un rezultat Adevărat sau Fals care permite luarea unei decizii
cu privire la ce anume ar trebui codul să execute în continuare.
O instrucțiune condițională este utilizată pentru a evalua o expresie ca fiind Adevărată sau
Falsă. Rezultatul, respectiv valoarea de True sau False, determină pașii următori.
În Python, instrucțiunile condiționale utilizează un format și un aspect structurat și sunt scrise
folosind cuvântul cheie if urmat de o expresie booleană ce evaluează condiția și apoi semnul :
De exemplu:
Age = input ("Ce vârstă ai?")
Blocul de cod indentat din linia următoare (comanda print() în acest caz) va fi executat dacă
expresia va fi evaluată ca fiind adevărată.
Expresia booleană (int (Age ) < 14 ) din cadrul instrucțiunii condiționale if poartă denumirea
de test logic.
Un test logic reprezintă o expresie care oferă un răspuns de tip Yes/No, True/ False. Răspunsul
afectează rularea codului în continuare.
75
Capitolul 10 – Instrucțiuni condiționale ECDL Computing
Același test logic ar putea fi prezentat sub forma unei scheme logice astfel:
3. Rulați programul.
4. Răspundeți la întrebare prin introducerea fie a unui nume scurt, fie a unuia lung (mai
puțin sau mai mult de 4 litere).
5. Observați rezultatul.
Concepte
Python poate permite unui bloc de cod indentat, unei subrutine, să ruleze dacă testul logic este
adevărat și unui alt bloc de cod să ruleze dacă testul logic este Fals.
Codul este scris tot folosind instrucțiunea if, ca și până acum, la care se adaugă cuvântul cheie
else, urmat de simbolul : pentru a adăuga codul ce va rula în cazul în care testul logic este fals.
Acesta este formatul structurat care trebuie folosit:
76
ECDL Computing Capitolul 10 – Instrucțiuni condiționale
if expression:
statement if true
else:
statement if false
De exemplu:
Age = input ("Ce vârstă ai?")
else:
Blocul de cod indentat din linia următoare (comanda print() în acest caz) va fi executat dacă
expresia va fi evaluată ca fiind adevărată.
Notă: Comanda ‘else’ nu este indentată, ea având același nivel de indentare ca și cuvântul
cheie 'if'. Python inițial va indenta cuvântul cheie 'else', așa că va trebui să apăsați tasta Backspace
pentru a obține nivelul corect de indentare.
5. Rulați codul.
6. Introduceți un nume scurt.
7. Rulați codul din nou.
8. Introduceți un nume mai lung pentru a verifica executarea codului în cazul în care
testul logic este fals.
77
Capitolul 10 – Instrucțiuni condiționale ECDL Computing
2. În următorul cod:
if password == ‘Voldemort’ :
print( ‘I guessed your password correctly’ )
else :
print( ‘I did not guess your password correctly’ )
78
CAPITOLUL 11 –
PROCEDURI ȘI FUNCȚII
11.1 SUBRUTINE
Concepte
O porțiune de cod poate fi utilizată de mai multe ori în diverse secțiuni ale unui program.
Aceasta poartă numele de subrutină.
O subrutină este un bloc de cod care poate fi apelat și rulat de mai multe ori în cadrul unui
program. Spre exemplu, o rutină ar putea fi utilizată pentru afișarea datei sau orei pe ecranul
monitorului.
În Python cuvântul cheie ‘def’, (prescurtarea de la 'define') este utilizat pentru a defini un nume
pentru o subrutină. Putem apoi apela sau invoca o subrutină de oriunde din întregul program prin
referirea la numele ei. Rubrutina va rula și când se va finaliza, programul principal va fi reluat din
punctul aflat înainte de începerea subrutinei.
O subrutină poate efectua un calcul și returna un răspuns sau o valoare. Acest lucru se numește
returnarea unei valori.
Există 2 tipuri de subrutine.
Funcții
O funcție reprezintă o subrutină ce calculează o valoare în cadrul unui program.
Proceduri
O procedură reprezintă o subrutină ce execută o acțiune, fără însă a returna o valoare.
Concepte
Funcțiile și procedurile pot deveni mai flexibile prin intermediul parametrilor.
Un parametru reprezintă o variabilă specială ce este utilizată într-o subrutină pentru a
influența modul de funcționare a acesteia.
input() este un exemplu de funcție. Când este apelată în cadrul unui program,
execută o acțiune și returnează o valoare înapoi codului care a apelat-o.
Programul se reia apoi din punctul în care a fost apelată funcția input() în cadrul
programului.
print() este un exemplu de procedură. Când este apelată în cadrul unui program,
execută o acțiune și apoi programul se reia din punctul în care procedura print()
a fost apelată.
Există 3 instrucțiuni de afișare în program care trebuie să verificăm dacă funcționează corect.
1. Deschideți Python.
2. Creați un nou fișier numit Arrow.py.
3. Introduceți primul bloc de cod din imaginea de mai jos, cu instrucțiunea def și toate
liniile de cod indentate, pentru a crea o nouă funcție.
4. Atunci când introduceți cele 3 instrucțiuni de afișare, apelați funcția de 3 ori.
81
Capitolul 11 – Proceduri și funcții ECDL Computing
82
ECDL Computing Capitolul 11 – Proceduri și funcții
3. Un parametru este:
a. O valoare care este transmisă unei proceduri sau unei funcții în scopul folosirii
acesteia
b. O metodă de măsurare aproximativă a distanței, ce ar putea simplifica anumite
porțiuni de cod.
c. O modalitate prin care un program poate executa mai multe acțiuni în același timp.
d. Un bloc de cod ce conține un anumit număr de linii.
83
CAPITOLUL 12 –
BUCLE (LOOP)
Concepte
Până în acest punct, am creat programe care funcționează secvențial, adică instrucțiunile sunt
executate în ordinea în care sunt scrise, similar cu respectarea unei rețete pas cu pas. Dacă este
necesar să se execute același pas de mai multe ori, putem utiliza ceea ce în programare poartă
numele de buclă (loop).
O buclă (loop) reprezintă o porțiune de cod care este rulată în mod repetat în anumite condiții.
O buclă este reprezentată în cadrul unei scheme logice printr-o săgeată care pornește de la un
bloc de decizie și este orientată înpoi spre blocul anterior din secvența de instrucțiuni. Examinați
schema logică de mai jos pentru coacerea unei prăjituri. Verificarea prăjiturii pentru a vedea dacă
este sau nu coaptă poate fi repetată de mai multe ori înainte ca prăjitura să fie gata pentru a fi scoasă
din cuptor. Acest pas repetitiv este reprezentat printr-o buclă – verificați prăjitura și dacă nu este
coaptă, așteptați 5 minute și verificați încă o dată.
Prăjitura este Nu
coaptă?
Da
Utilizarea unei bucle pentru repetarea unei acțiuni reprezintă una dintre cele mai utile tehnici
în programare. Codul pentru buclă (loop) este prezent în majoritatea limbajelor de programare, cu
mici variații legate de convențiile de nume e.g. ‘repeat’ este utilizat pentru a determina numărul de
repetări în anumite limbaje de programare; vom vedea mai târziu în acest capitol că ‘while’ face
acest lucru în Python.
Python folosește instrucțiunea ‘for’ pentru a crea bucle.
Instrucțiunea for conține mai multe părți.
for i in range( 10 ):
secvență_de_instrucțiuni
85
Capitolul 12 – Bucle ECDL Computing
Cuvântul cheie 'for' este urmat de numele variabilei, în acest caz i, ținând cont de
repetițiile buclei. Variabila i va avea o valoare inițială 0 și, de fiecare dată când bucla
va fi rulată, va crește la 1, apoi la 2 și tot așa până la 9.
Cuvintele 'in range()' cu un număr între paranteze, urmat de simbolul : indică numărul
de rulări ale buclei.
O linie de cod indentat conținând o instrucțiune va fi executată de 10 ori.
Concepte
În exemplul anterior, fiecare stea era afișată pe un rând separat. Se dorea un rând de stele.
O altă abordare ar fi:
print('***********')
Această abordare va funcționa, însă nu este eficientă – dacă vreau să afișez 599 de stele?
În acest caz, utilizarea buclelor economisește foarte mult timp și scurtează codul. Putem scrie
o buclă care să afișeze 10 stele, 42 de stele sau 599 de stele, în funcție de o valoare.
86
ECDL Computing Capitolul 12 – Bucle
Există o metodă mai scurtă de scriere answer=answer+'*' care utilizează noul operator +=.
5. Rescrieți codul utilizând de data aceasta operatorul +=, așa cum este prezentat mai
jos:
87
Capitolul 12 – Bucle ECDL Computing
Concepte
Am văzut că buclele au o structură și un aspect particular în Python.
for i in range( 10 ):
secvență_de_instrucțiuni
Blocul de cod indentat, după linia ‘for’, se consideră că se află 'în interiorul buclei'.
Codul aflat înainte de buclă se execută și apoi se execută bucla.
Codul aflat în interiorul buclei este executat de mai multe ori.
Codul aflat imediat după buclă este executat doar după ce bucla a finalizat de
repetat codul aflat în blocul indentat.
Până acum am studiat bucla de bază, însă există câteva variații de bucle care se pot utiliza de
asemenea.
Un alt tip de buclă utilizează un test logic în loc de range(). Aceasta poartă numele de buclă
while.
O buclă while testează o expresie booleană și repetă execuția buclei atâta timp cât (i.e. While)
expresia booleană este adevărată.
4. Rulați programul.
88
ECDL Computing Capitolul 12 – Bucle
Într-o buclă While, dacă testul logic este mereu adevărat, bucla se va repeta la infinit. Ca
urmare, va deveni o buclă infinită.
O buclă infinită nu se oprește niciodată. Ea folosește cuvintele cheie "while true", urmate de
semnul :
Întrucât ne dorim de obicei un program care să se oprească la un moment dat, buclele infinite
indică de obicei o eroare.
3. Rulați programul.
4. Puteți opri programul prin apelarea meniului Shell, comanda Restart Shell.
12.4 RECAPITULARE
Concepte
Exemplu: Desenarea unui vârf de săgeată
Python poate fi utilizat pentru a scrie un program ce desenează un vârf de săgeată, precum cel
prezentat mai jos:
89
Capitolul 12 – Bucle ECDL Computing
Acest lucru ar putea fi realizat utilizând multe instrucțiuni print(). Cu toate acestea, poate fi
realizat cu mai puține instrucțiuni, prin utilizarea buclelor, funcțiilor și procedurilor.
Pentru desenarea săgeții, fiecare rând de stele trebuie să fie centrat pe orizontală în loc să fie
aliniat la stânga. Există o funcție care face acest lucru. Se numește center(). Dacă variabila numită
answer stochează un șir de stele, următoarea linie de cod adaugă spații înainte și după stele pentru
a crea 30 de caractere în total.
answer=answer.center(30)
1. Deschideți fișierul Arrow.py creat la capitolul anterior.
2. Modificați codul după cum urmează pentru a centra stelele.
4. Pentru a obține o formă similară unei săgeți, primul rând ar trebui să aibă o stea, al
doilea 3 stele, al treilea 5 stele. Modificați valoarea parametrului din fiecare
instrucțiune print (), după cum urmează, pentru a remedia acest lucru:
90
ECDL Computing Capitolul 12 – Bucle
Putem construi o expresie și scrie o subrutină care să creeze vârful de săgeată și să reducă
volumul de cod necesar. Avem nevoie de 10 rânduri de stele pentru a construi vârful de săgeată.
Luați în considerare expresia:
i*2+1
91
Capitolul 12 – Bucle ECDL Computing
4. Pentru a repeta anumite acțiuni de mai multe ori, fără a număra repetările, folosim în mod
normal:
a. o buclă loop
b. numere aleatorii
c. o buclă while
d. o buclă for
92
CAPITOLUL 13 –
BIBLIOTECI
Lesson 7 - Libraries
Concepte
Funcțiile și procedurile oferă o modalitate de reutilizare a codului. Alte modalități de reutilizare
a codului pe o scară mai largă sunt:
Biblioteci
O bibliotecă reprezintă o colecție de module ce conțin proceduri și funcții deja scrise, ce pot
fi reutilizate în cadrul programelor. Astfel se economisește mult timp și multă muncă de scriere a
procedurilor și funcțiilor de la început.
Codul sursă al funcțiilor din modulele bibliotecii nu este vizibil în program
Un modul dintr-o bibliotecă este adăugat prin scrierea numelui acesteia în comanda ‘import’.
Modulul ECDL Computing se bazează pe utilizarea următoarelor module din biblioteca standard:
Cod Boilerplate
Reprezintă codul utilizat în cadrul unui proiect fără modificări sau cu modificări minore. De
exemplu, acest cod poate furniza funcții pentru afișarea imaginilor pe mai multe pagini ale unui
document.
Codul Boilerplate este un cod sursă vizibil în program.
Codul Boilerplate este utilizat prin includerea tuturor codurilor sale sursă în programul
la care se lucrează.
La utilizarea unui modul al unei biblioteci sau a unui cod Boilerplate, nu este necesar să
cunoașteți detaliile legate de modul de funcționare al algoritmilor din acestea.
Acest material include cod boilerplate pentru inițializarea și utilizarea modulelor din biblioteci.
Concepte
Instrucțiuni de import
Python utilizează instrucțiunea de import pentru a putea utiliza codul din anumite module ale
bibliotecilor (standard și Pygame). Există 2 versiuni ale instrucțiunii de import:
Prima versiune utilizează cuvântul cheie import urmat de numele modulului.
Când utilizați această versiune de import, funcțiile au întâi numele modulului, apoi un punct
și apoi numele funcției. Un exemplu este prezentat mai jos.
94
ECDL Computing Capitolul 13 – Biblioteci
Rularea acestui exemplu va returna numele unui fruct aleator, așa cum este prezentat în
exemplul de mai jos:
MODUL SCOP
95
Capitolul 13 – Biblioteci ECDL Computing
Modulul time
Există 2 funcții extrem de utile în modulul time. În general, cele 2 funcții sunt utilizate
împreună:
FUNCȚIE SCOP
Funcția strftime utilizează 'specificatori de format' pentru a descrie exact cum ar trebui să arate
șirul rezultat. Spre exemplu, literele '%Y' sunt înlocuite cu anul și ca urmare șirul 'În anul %Y' ar
putea fi modificat în șirul 'În anul 2001' prin funcția strftime.
Regăsiți mai jos un tabel al formatelor disponibile pentru funcția strftime:
%d Data 15
%j Zi din an 350
%m Numărul lunii 9
%M Minute 22
%p AM sau PM PM
%S Secunde 56
%x Dată 15/09/76
%X Oră 17:22:56
96
ECDL Computing Capitolul 13 – Biblioteci
FORMAT SEMNIFICAȚIE EXEMPLU
%y An (2 cifre) 76
%Y An (4 cifre) 1976
3. Rulați programul pentru a obține următorul rezultat. Data și ora afișate vor fi cele
curente, nu cele afișate în imaginea de mai jos.
Modulul random
FUNCȚIE SCOP
97
Capitolul 13 – Biblioteci ECDL Computing
3. Rulați programul.
Modulul math
FUNCȚIE SCOP
98
ECDL Computing Capitolul 13 – Biblioteci
3. Rulați programul.
13.3 EVENIMENTE
Concepte
Fluxul unui program poate depinde de desfășurarea anumitor acțiuni. Utilizatorii pot declanșa
aceste acțiuni prin executarea unui click de mouse pe un grafic de pe ecran, prin apăsarea unei taste
de pe tastatură sau prin accesarea unui link într-un browser web. În Python, aceste acțiuni poartă
numele de evenimente.
Evenimentele sunt utilizate exclusiv în jocuri. Evenimentele care determină mișcarea unui
personaj într-un joc sunt declanșate de o acțiune a utilizatorului, cum ar fi: utilizarea săgeților de
direcție pentru a muta personajul într-o anumită direcție, utilizarea unui buton al mouse-ului pentru
a face personajul să sară, etc.
Anumite evenimente pot fi specifice părții de hardware. În cadrul unui sistem de alarmă ce
utilizează un computer pentru a monitoriza intrușii, o persoană care se mișcă în apropierea unui
senzor poate cauza sau declanșa un eveniment.
În unele computere, atunci când bateria atinge un nivel minim de încărcare se poate declanșa
un eveniment și anume afișarea unui mesaj de avertizare legat de înlocuirea bateriei.
Evenimente
Un handler de eveniment (event handler) reprezintă o porțiune de cod proiectată să execute o
acțiune atunci când se declanșează un anumit eveniment. De exemplu, săgețile de direcție de pe
tastatură pot controla mișcarea unui jucător în cadrul unui joc video. În funcție de ce eveniment are
loc (sus, jos, stânga, dreapta), programul va executa codul 'handler-ului de eveniment' adecvat, care
va realiza mutarea corectă a jucătorului.
Unele limbaje de programare au un sistem de 'înregistrare' a funcțiilor care sunt apelate atunci
când se întâmplă diverse evenimente. Putem recunoaște aceste funcții după numele lor care începe
cu cuvântul 'On' urmat de numele evenimentului. Spre exemplu, 'OnClick' este apelată atunci când
utilizatorul generează un eveniment executând click oriunde pe ecran.
99
Capitolul 13 – Biblioteci ECDL Computing
100
ECDL Computing Capitolul 13 – Biblioteci
Concepte
În Python, folosind Pygame, codul pentru gestionarea evenimentelor este scris astfel încât să
se solicite în mod repetat informații de verificare a evenimentelor care au avut loc. Imaginea de
mai jos se referă la exemplul legat de firele de iarbă descris mai târziu în acest capitol. Pentru
moment, să aruncăm o privire pe cele 2 evenimente evidențiate mai jos.
În funcția check_for_quit(), o buclă for verifică în mod repetat dacă evenimentul Quit a avut
loc în Pygame. Evenimentul QUIT este declanșat atunci când utilizatorul apasă pe butonul X aflat
în colțul din dreapta sus al ferestrei Pygame. Dacă acel eveniment este detectat, funcția
check_for_quit() returnează valoarea True. Dacă evenimentul nu este detectat, funcția
check_for_quit() returnează valoarea False.
A doua porțiune evidențiată de cod, apelarea funcției clock.tick(), este relaționată de asemenea
cu gestionarea evenimentelor; ea stabilește frecvența de rulare a buclei while, care la rândul ei
stabilește frecvența de actualizare a ecranului.
101
Capitolul 13 – Biblioteci ECDL Computing
Un alt exemplu de eveniment evidențiat mai sus este procedura draw_grass(). Este apelată
mouse.get_pos() pentru a determina poziția mouse-ului, care la rândul său este folosită pentru a
determina poziția firelor de iarbă.
Concepte
Pentru utilizarea bibliotecii Pygame, un program trebuie să adauge această bibliotecă, să o
inițializeze, să definească culorile și să execute o serie de alte acțiuni. Codul Boilerplate este oferit
în acest material tocmai pentru a executa aceste acțiuni.
Nu este necesar să cunoaștem cum funcționează în detaliu codul boilerplate. Trebuie să știm
doar că:
Tuplurile sunt utilizate pentru a defini o serie de culori folosite la pictarea ecranului.
Codul boilerplate importă din modulul random al bibliotecii standard pentru a obține funcția
randint.
Are un eveniment buclă.
Utilizează randint pentru a genera un număr întreg aleator.
102
ECDL Computing Capitolul 13 – Biblioteci
2. Priviți liniile aflate după comentariul # Import the ‘pygame’ library. Toate cele 3 linii
conținând cuvântul ‘import’ se referă la utilizarea bibliotecilor:
‘import pygame’ permite accesul la biblioteca pygame astfel încât aceasta să devină
disponibilă spre a fi utilizată.
‘import pygame.gfxdraw’ permite accesul la o extensie opțională a pygame care
desenează diverse forme mai netede.
modulul ‘random’ furnizează funcții pentru lucrul cu numere aleatorii. Comanda de import
permite accesarea funcției randint pentru a genera numere întregi aleatorii.
Restul de cod:
inițializează biblioteca Pygame. Aceasta conține multe variabile care trebuie să aibă
valori inițiale.
definește și inițializează 2 culori, gri și verde. Parantezele rotunde indică faptul că
aceste culori sunt definite ca tupluri cu 3 valori întregi.
crează o variabilă numită screen ce reprezintă o fereastră de 400 de pixeli lățime și
300 de pixeli înălțime.
3. Derulați – codul boilerplate definește unele proceduri pentru reprezentarea grafică a
punctelor și pensulelor. Citiți comentariile care descriu fiecare subrutină.
Subrutinele sunt explicate mai jos mai detaliat decât în comentarii. Această secțiune de cod
furnizează funcții și proceduri utilitare.
plot_point va reprezenta grafic un punct pe ecran. Utilizează numerele 400 și 300,
reprezentând lățimea și înălțimea ecranului, pentru a scala punctul în poziția
corectă pe ecran.
draw_blob va desena pe ecran o pensulă verde circulară. De asemenea, va afișa
coordonatele pensulei.
apply_transform va aplica punctului o ‘transformare affine (polinomială de ordinul
I)’. Aceasta este utilizată pentru distorsionarea formelor. Poate mări/micșora, roti,
reflecta o formă, o poate muta la stânga sau la dreapta, sus sau jos. Pentru acest
modul, este suficient să știm faptul că transformarea affine preia anumite
coordonate și returnează altele ca și rezultat.
Imaginea de mai jos este prezentată ca exemplu al comentariilor și structurii codului din
secțiunea anterioară.
103
Capitolul 13 – Biblioteci ECDL Computing
104
ECDL Computing Capitolul 13 – Biblioteci
5. Derulați
Restul de cod oferă 2 modalități de desenare a ecranului.
Citiți comentariile pentru proceduri.
Aceste 2 proceduri oferă 2 opțiuni de utilizare a unei bucle eveniment.
draw_once() va rula codul de desenare o singură dată, apoi va aștepta ca
utilizatorul să părăsească ecranul grafic.
draw_repeatedly() va rula codul de desenare la nesfârșit, verificând de fiecare dată
dacă utilizatorul a părăsit sau nu ecranul grafic. Această procedură este potrivită
pentru animații.
Funcția draw_once() conține o secvență de acțiuni. Aceasta include afișarea mesajelor
‘Starting’ și ‘Finished’ și așteptarea comenzii de închidere în bucla eveniment.
105
Capitolul 13 – Biblioteci ECDL Computing
Concepte
Pentru jocurile 3D profesionale, graficienii crează artă personalizată pentru majoritatea
caracteristicilor lumilor și monștrilor din joc. Cu toate acestea, foarte multe detalii sunt generate pe
baza codului de programare. Spre exemplu, graficienii nu desenează fiecare fir de iarbă și nu crează
animație pentru fiecare fir de iarbă care se mișcă în bătaia vântului. Ei crează în loc una sau mai
multe tipuri de fire de iarbă și apoi utilizează proceduri și bucle pentru a desena și anima mai multe
fire de iarbă.
Pygame are o bibliotecă grafică 2D. Codul Pygame poate utiliza o buclă și numere aleatoare
pentru a demonstra faptul că un computer poate executa instrucțiuni repetitive. Codul poate desena
și anima un singur fir de iarbă, după care codul poate fi introdus într-o buclă pentru a desena și
anima multe fire de iarbă.
În următorul exemplu Pygame ‘firele de iarbă’ sunt doar niște linii verzi.
106
ECDL Computing Capitolul 13 – Biblioteci
În prezent, imaginea cu firele de iarbă conține linii drepte. Pentru a face firele de iarbă mai
ascuțite, înlocuiți codul draw_line().
6. Efectuați următoarele modificări codului:
107
Capitolul 13 – Biblioteci ECDL Computing
Cea mai mare modificare este crearea unei noi variabile shape.
Noua variabilă listă ‘shape’ stochează coordonatele celor 4 colțuri ale firelor
de iarbă.
S-a renunțat la draw.line. Cele 2 comenzi gfxdraw desenează conturul
exterior al formei și apoi interiorul. Modificați culoarea liniei de contur în
verde.
8. Rulați codul pentru a vedea firele mai ascuțite de iarbă.
108
ECDL Computing Capitolul 13 – Biblioteci
Imaginea afișată nu arată că iarba se mișcă acum, însă este vizibil faptul că iarba este acum mai
distanțată.
3. Șirul numit greeting are valoarea ‘Good’. Ce comandă îi stabilește valoarea la ‘Good
Morning’?
a. greeting = ‘Good’ + greeting
b. greeting = greeting + “ Morning”
c. greeting = ‘Good’ + ‘Morning’
d. greeting = [‘Good’, ‘Morning’]
4. Tuplul numit colour are valoarea (0,0,255). Ce comandă îi stabilește valoarea (255,0,255)?
a. colour[0] = 255
b. colour[1] = 255
c. colour = ( 255 , 0+0 , 255 )
d. colour = 255,0,255
109
CAPITOLUL 14 –
RECURSIVITATE
Lesson 8 -
14.1 RECURSIVITATE
Concepte
Exemplul cu iarba mișcătoare din capitolul 13 și exemplul cu săgeata din capitolul 12 implică
subrutine care apelează alte subrutine. Aceasta este una dintre metodele de descompunere a unei
probleme în programare. Țineți minte că descompunerea se referă la divizarea unei probleme
complexe în probleme mai mici. Apoi, subrutinele sunt apelate și executate până când problema
globală este rezolvată.
Este posibil de asemenea ca o subrutină să se apeleze singură o dată sau de mai multe ori. Cu
condiția să existe o protecție împotriva unei subrutine care se va apela singură la nesfârșit,
subrutinele care se apelează singure pot reprezenta o tehnică puternică pentru descompunerea
anumitor probleme.
O subrutină care se apelează singură este cunoscută sub numele de Recursivitate.
Recursivitatea reprezintă procesul prin care o subrutină divizează o problemă complexă în
părți mai simple și apoi se apelează singură pentru rezolvarea părților simple. O funcție recursivă
se apelează singură în cadrul funcției.
Atunci când o funcție recursivă se invocă pe ea însăși, se spune că funcția se repetă în mod
nelimitat.
Tehnica recursivității este cea mai utilă atunci când o problemă poate fi descompusă în 2
probleme mai mici, dar care sunt totuși extrem de asemănătoare cu problema originală.
Exemplu: Căutare
Un exemplu de rezolvare a unei probleme utilizând recursivitatea o reprezintă căutarea. O
subrutină de căutare ar putea separa posibilitățile de căutare în 2 zone. Subrutina s-ar putea invoca
singură pentru a căuta în fiecare zonă, apoi să o împartă și pe aceea și tot așa.
Imaginați-vă verificarea unei case. Algoritmul ar împărți problema în verificarea camerelor și
apoi ar împărți verificarea camerelor în verificarea anumitor zone din camere. Eventual zona de
verificat ar deveni atât de mică încât poate fi finalizată dintr-un singur pas. Nu este nevoie de o altă
subdivizare.
111
Capitolul 14 – Recursivitate ECDL Computing
O subrutină recursivă pentru desenarea unei linii curbe se poate apela singură pentru
desenarea jumătăților din stânga și dreapta.
Poate conține un test logic care detectează atunci când o problemă ajunge la dimensiunea
unui pixel sau chiar mai mică în dimensiune.
Atunci când o problemă a fost redusă la o dimensiune atât de mică, subrutina poate
desena punctul respectiv în loc să mai facă alte subdivizări.
Rezultatul combinat al tuturor punctelor formează linia curbă.
Concepte
Algoritmul de desenare a liniei curbe desenează o dată partea stângă, o dată partea dreaptă.
Recursivitatea nu trebuie întotdeauna să împartă o problemă în 2, ea poate împărți problema în mai
multe părți. Exemplul următor de desenare a unei frunze de ferigă divizează problema în 4 alte
probleme la fiecare etapă.
Să analizăm mai întâi un fractal înainte de a continua.
Un fractal reprezintă o formă care este similară cu ea însăși, la diferite scale. Dacă mărești un
fractal, poți găsi șabloane similare cu șabloanele formei întregi.
Mai jos sunt prezentate câteva exemple ale modului în care un fractal se dezvoltă:
112
ECDL Computing Capitolul 14 – Recursivitate
Fractali
Următorul exemplu utilizează recursivitatea pentru a desena un fractal care este o frunză de
ferigă.
113
Capitolul 14 – Recursivitate ECDL Computing
114
ECDL Computing Capitolul 14 – Recursivitate
Dacă reducem valoarea 9 din draw_fern( 9, (0,0) ) la 3, programul va desena mult mai puține
puncte.
Dacă creștem valoarea ‘9’ chiar și un pic, timpul de rulare al programului va crește simțitor.
Dacă modificați valoarea 9 în 30, execuția programului va dura mai mult de 1 milion de ani.
Sfat: Pentru a opri programul înainte de finalizarea lui, utilizați aceeași tehnică ca la bucla
infinită. Mergeți în fereastra Python Shell și apelați meniul ‘Shell’, opțiunea ‘Restart Shell’.
115
CAPITOLUL 15 –
TESTARE ȘI ÎMBUNĂTĂȚIRE
Înțelegeți tipurile de erori din cadrul unui program precum: erori de sintaxă,
erori logice
Înțelegeți beneficiile testării și depanării unei probleme pentru remedierea
erorilor
Identificați și remediați o eroare de sintaxă într-un program precum: ortografie
incorectă, punctuație lipsă
Identificați și remediați o eroare logică într-un program precum: expresie
Booleană incorectă, tip de date incorect
Verificați dacă programul respectă cerințele din descrierea inițială
Identificați posibilități de îmbunătățire ale programului astfel încât să satisfacă
eventuale nevoi suplimentare
Descrieți programul complet, comunicând scopul și valoarea
ECDL Computing Capitolul 15 – Testare și îmbunătățire
Concepte
O schemă logică sau un program poate conține erori. Erorile care cauzează funcționarea
incorectă a unui algoritm sau program poartă numele de bug-uri. Spre exemplu:
Dacă unul din blocurile de decizie din cadrul unei scheme logice a fost etichetat
incorect, cu ‘Da și ‘Nu’ în locuri incorecte, algoritmul va avea un rezultat incorect.
Acest tip de eroare poartă numele de bug.
Dacă în programul cu trucul magic am fi împărțit la 15 în loc de 13, nu am fi obținut
rezultatul dorit. Pasul de împărțire la 15 ar fi fost denumit un bug în program.
Bug-urile serioase determină oprirea funcționării programului denumită și crash.
Un crash reprezintă momentul în care are loc oprirea completă a funcționării programului.
Utilizatorii își pot pierde datele ca urmare a unui crash.
O eroare logică are loc atunci când intrucțiunea din program se referă la o acțiune incorectă.
Programul pare a fi corect din punct de vedere al sintaxei, (i.e. este scris corect), însă logica este
eronată și ca urmare, atunci când este rulat, nu execută ceea ce se presupune că ar trebui. Cu alte
cuvinte, un program poate funcționa corect, însă nu respectă cerințele de funcționare.
De exemplu:
if test_tube_is_full :
pour_more_acid_into_it().
O eroare de tip de date incorecte sau o eroare de scriere are loc atunci când se încearcă
utilizarea unui operator sau unei funcții pe un tip greșit de obiect. De exemplu, dacă încercăm să
înmulțim un șir de caractere cu un număr întreg 3*mere.
Concepte
Erori de sintaxă
Erorile de sintaxă, cunoscute și sub numele de erori de parcurgere cod, sunt detectate imediat
de Python la rularea unui program. Erorile de sintaxă nu sunt considerate bug-uri întrucât Python
nu permite rularea programului atunci când identifică o eroare de sintaxă.
Exemple de erori de sintaxă includ sintaxă incorectă, omisiunea unei paranteze sau simbolului
:, scrierea greșită a unui cuvând cheie, format incorect al numerelor, etc. Analizorul sintactic, numit
și parser, evidențiază primul punct din linie unde este detectată eroarea.
117
Capitolul 15 – Testare și îmbunătățire ECDL Computing
Există semnul : la finalul liniei care este incorect. Corectați această eroare prin ștergerea
semnului : și rulați încă o dată programul.
Erori logice
Erorile logice nu sunt întotdeauna ușor de găsit. Analizați logica din acest program pentru a
afișa o instrucțiune de introducere a unei prăjituri în cuptor atunci când cuptorul atinge temperatura
corectă.
118
ECDL Computing Capitolul 15 – Testare și îmbunătățire
Analizați exemplul de mai jos și verificați dacă puteți corecta eroarea logică:
119
Capitolul 15 – Testare și îmbunătățire ECDL Computing
În acest exemplu nu putem asocia la un loc diferite tipuri de date. Nu putem asocia șiruri de
caractere cu variabile numerice. Cu toate acestea, putem converti o variabilă numerică într-un șir
de caractere. Mai jos, prin utilizarea funcției str() putem converti variabila numerică students într-
un șir de caractere.
120
ECDL Computing Capitolul 15 – Testare și îmbunătățire
Concepte
Verificarea erorilor
Un programator ar putea remarca sau nu faptul că programul conține o eroare logică. Este
important să se detecteze erorile logice. O modalitate de a realiza acest lucru sistematic este prin
testare.
Testare
Rularea unui program utilizând diferite date de intrare pentru a identifica existența unor
eventuale erori logice.
În etapa de testare, tester-ul are nevoie să știe care ar trebui să fie rezultatele obținute. Acestea
s-ar putea referi la cerințele din specificațiile programului pentru a verifica funcționarea corectă a
programului, conform scopului său inițial.
După remedierea erorilor, programul va fi retestat pentru asigurarea faptului că acel bug a fost
cu adevărat remediat.
121
Capitolul 15 – Testare și îmbunătățire ECDL Computing
O specificație pentru un program va conține de cele mai multe ori o listă numerotată a
cerințelor. Acesta ar fi un posibil exemplu:
1.3.1: Programul va stinge ecranul monitorului dacă computerul nu este folosit timp de 1
minut.
Un plan de testare ar trebui să includă și un pas de testare a acestei cerințe. Planul ar prevede
funcționarea programului pentru 1 minut, timp în care computerul nu este folosit și verificarea
închiderii monitorului după 1 minut. Fiecare cerință ar trebui să aibă teste corespunzătoare.
În acest exemplu, dacă după 1 minut programul cedează, atunci există un bug în program. Cu
toate acestea, dacă nu se întâmplă nimic după 1 minut, nu se poate spune cu siguranță că programul
nu conține erori.
Acest lucru demonstrează faptul că testarea sistematică a conformității cu cerințele
programului este extrem de valoroasă. Testarea ar fi identificat o cerință care nu a fost
implementată. Testarea conformității cu cerințele ajută de asemenea la identificarea problemelor
care apar doar atunci când anumite părți ale programului sunt utilizate. Testarea în acest mod ar
putea identifica anumite probele care altfel nu ar fi putut fi găsite.
Identificarea Bug-urilor
Atunci când un program returnează un rezultat greșit sau neașteptat sau dacă programul
cedează în mod neașteptat datorită unei erori, nu este întotdeauna evidentă cauza.
Atunci când un program returnează un răspuns greșit, este posibil să nu fie suficientă doar
studierea codului pentru identificarea problemei.
O modalitate de a afla mai multe despre bug-ul respectiv este să se includă o serie de
diagnosticări suplimentare în cadrul codului. Acestea ar putea consta în instrucțiuni suplimentare
print() pentru a afișa valorile variabilelor în diferite puncte ale programului. Aceste instrucțiuni
suplimentare de afișare arată modul de modificare al valorilor.
Efortul depus pentru identificarea cauzei unui bug poartă denumirea de debugging.
Debugging
Reprezintă rularea unui program defect folosind informații suplimentare de diagnosticare
pentru a determina unde anume în cadrul codului există greșeli și pentru a le remedia.
O altă metodă de diagnosticare a unui program este prin rularea lui ‘sub un depanator’. Acesta
reprezintă un instrument ce poate fi utilizat pentru rularea unui program linie cu linie. Python
conține un debugger ce poate fi activat din fereastra Python shell.
Debugging-ul (depanarea de cod) poate identifica bug-ul și locul primei sale apariții în cadrul
programului. Fără debugging, este posibil să nu fie clar unde anume este problema în interiorul
codului.
Concepte
Odată ce un program este scris, lansat și se bucură de succes, există destul de frecvent presiunea
creării unei noi versiuni îmbunătățite a acestuia.
Din punct de vedere comercial, rescrierea completă a programului nu este o idee bună. Un plan
mai bun este să se efectueze mici îmbunătățiri care să facă programul mai util pentru mai multe
persoane. Astfel de modificări ajută codul să rezolve o problemă mult mai generală decât versiunea
inițială.
122
ECDL Computing Capitolul 15 – Testare și îmbunătățire
Viziunea unui programator asupra unui program este foarte diferită de viziunea asupra
programului pe care trebuie să o aibă un utilizator sau un manager. Atunci când prezentați un
program, acordați atenție publicului și aspectelor relevante pentru aceștia. Acest lucru este deosebit
de important atunci când se comunică îmbunătățirile propuse. Pseudocodul și schemele logice pot
fi relevante pentru a demonstra modul de funcționare al unui algoritm. Însă nu comunică scopul și
valoarea.
Comunicarea scopului
Atunci când comunicați scopul unui program, explicați ce problemă rezolvă programul. În
general, programele sunt utile în anumite aspecte ale unei probleme repetitive. Computerele sunt
bune la automatizare. În comunicarea scopului, poate fi util să comunicați de asemenea și ce părți
ale problemei nu rezolvă programul.
123
Capitolul 15 – Testare și îmbunătățire ECDL Computing
Un program de procesare de text salvează un autor de la tastarea aceluiași text de multe ori pe
măsură ce lucrează prin diferite versiuni ale unui document. Un program de procesare de text nu
ajută însă foarte mult un autor să găsească cuvintele potrivite și să identifice idei pentru personaje
și intrigă.
Comunicarea valorii
Valoarea unui program sau a îmbunătățirilor acestuia depinde de cine îl va folosi pe piață și de
concurență. Managerii ar putea dori să știe dacă există deja un program similar sau dacă noul
program poate fi ușor copiat de alții. Dacă algoritmii sunt noi, creativi și inovativi, este posibil să
le patenți și astfel să le protejați împotriva copierii.
Dacă programul folosește un format de fișier proprietate, care stochează datele într-un mod în
care alte programe nu îl pot citi cu ușurință, acest lucru poate împiedica alte companii să-și creeze
propria versiune.
În comunicarea valorii unui program, evidențiați ceea ce este unic în privința acestuia. Arătați
că aspectele unice sunt de valoare pentru utilizatorii finali. Un program valoros este cel care
economisește timpul și banii utilizatorului final. Acolo unde este posibil, susțineți afirmațiile dvs.
cu privire la valoarea unui program cu numere.
124
ECDL Computing Capitolul 15 – Testare și îmbunătățire
2. Un test logic a fost proiectat pentru a verifica dacă variabilele c, d și e sunt puse în ordine,
cu c cel mai mic și e cel mai mare. Care dintre următoarele conține o eroare logică?
a. if (c<d) and (d<e) :
b. if (e>d) and (d>c) :
c. if (c#d) and (d#e) :
d. if (e<d) and (d<c) :
125
Capitolul 15 – Testare și îmbunătățire ECDL Computing
7. În descrierea valorii comerciale a unui nou program, cea mai bună metodă este:
a. Prezentarea unei scheme logice extrem de detaliate pentru a evidenția complexitatea
programului.
b. Descrierea beneficiilor pentru utilizatori și susținerea acestui lucru cu date
numerice, dacă este posibil.
c. Explicarea faptului că programul este nou și, ca urmare, trebuie să fie de valoare.
d. Explicarea faptului că programul utilizează doar algoritmi cunoscuți, utilizați la
scară largă și extrem de sigur
126
Editura ECDL ROMANIA
Telefon: 021.316.99.22
Fax: 021.319.72.27
E-mail: [email protected]
Website: www.ecdl.ro