Sunteți pe pagina 1din 28

Informații utile - partea I

Acest document vine în sprijinul vostru pentru a putea să


rezolvați exercițiile mai complicate care pot apărea la examen!
Aceste informații vin în completarea celor de la curs!

1. Caracterul backslash (\)

Caracterul backslash are o semnificație specială atunci când este


folosit în interiorul șirurilor de caractere/stringuri și se numește
escape character (caracterul de evadare).

Cuvântul escape ar trebui înțeles în felul următor - înseamnă că seria


de caractere din string ”evadează” pentru un scurt moment pentru a
introduce o includere specială.

Cu alte cuvinte, caracterul backslash nu are nicio semnificație în sine,


ci este doar un fel de anunț, care ne indică că următorul caracter după
backslash are o semnificație diferită.

Litera n plasată după backslash vine de la cuvântul newline.

Backslash și litera n formează un simbol special numit caracterul


newline (\n), care anunță consola să înceapă o linie nouă.

Mai jos avem următorul exemplu:


Se va afișa următorul rezultat:

După cum puteți vedea, în poezia de mai sus apar newline-uri, acolo
unde am folosit \n.
Vă reamintesc că comanda print() va afișa un rând gol.

Această convenție are două consecințe importante:

a. Dacă vrem să punem doar un backslash în interiorul unui string, nu


uităm de rolul lui - trebuie să îl dublăm. De exemplu, o astfel de
invocare va produce o eroare:

dar aceasta nu:

b. Nu toate perechile (backslash împreună cu alt caracter) înseamnă


ceva. De exemplu, \w nu reprezintă nimic.
2. Funcția print() - folosirea argumentelor multiple

De cele mai multe ori noi am testat comportamentul funcției print() cu


niciun argument sau cu unul singur. De exemplu:

și se va afișa

Funcția print() poate avea mai multe argumente. Să urmărim


exemplul următor.

Va afișa următorul rezultat:

Avem o singură funcție print() care conține trei argumente. Toate


sunt stringuri.

Argumentele sunt separate prin virgulă. Am pus spațiu între


virgule pentru a le face mai vizibile, dar nu este neapărat necesar.
Dacă vă uitați la cod, o să vedeți că nu există spațiu între stringuri.
Dar nouă ne afișează stringurile cu spațiu în loc să le afișeze legat.

Putem trage două concluzii din acest exemplu:


a. O funcție print() invocată cu mai mult de un argument le va afișa
pe toate pe un singur rând.
b. Funcție print() pune un spațiu între argumentele afișate din propria
inițiativă.

3. Funcția print() - argumente cheie (keyword arguments)

Funcția print() are două argumente cheie pe care le putem folosi.


Primul dintre ele se numește end.

Pentru a îl putea folosi, este important să știm niște reguli:

a. un argument cheie conține trei elemente:


- un keyword care identifică argumentul (end în cazul de față);
- semnul egal (=);
- o valoare atribuită argumentului;

b. orice argument cheie trebuie să fie pus după ultimul argument


pozițional (positional argument);

!!! O să explicăm ce este argumentul pozițional când vom face


funcții !!!

Argumentul end specifică ce să se afișeze la finalul stringului.


Exemplu:

În exemplu nostru, am folosit end, pe care l-am setat la un string care


conține un spațiu. Se va afișa:

După cum puteți vedea, argumentul cheie end determină caracterele


pe care funcția print() le trimite la output odată ce ajunge la finalul
argumentelor poziționale.

Argumentul cheie end este în mod implicit folosit în următorul mod:


end=”\n”.

În continuare vom lua următorul exemplu:

Observăm că stringul atribuit lui end este gol (nu conține niciun
caracter).

Ce se întâmplă acum?

Deoarece argumentul end nu a fost setat, funcția print() nu va afișa


nimic de asemenea, odată ce argumentele poziționale au fost epuizate.
Se va afișa:

Important: Niciun newline nu a fost trimis la output.

Stringul atribuit lui end poate avea orice lungime. Puteți încerca
dacă doriți.

Cel de-a doilea argument cheie este sep (care vine de la separator).

Argumentul sep specifică separatorul dintre argumentele afișate.

Fie următorul exemplu:

Se va afișa:

Funcția print() folosește o liniuță în loc de spațiu pentru a separa


argumentele afișate.

Important: Valoarea argumentului sep poate fi un string gol de


asemenea. Încercați singuri!
Putem combina cele două argumente într-o singură invocare. Fie
următorul exemplu:

Ce credeți că se afișează?

4. Numere întregi (integers)

Dacă avem un număr foarte mare, cum îl putem scrie ca să fie mai
ușor de citit pentru noi?

Să luăm următorul număr: unsprezece milioane o sută unsprezece mii


o sută unsprezece.

Dacă am lua o foaie și un pix, am scrie numărul în felul următor:


11,111,111, 11.111.111, 11 111 111.

Niciuna dintre variantele de mai sus nu este permisă în Python. Sunt


permise următoarele variante: 11111111 sau 11_111_111.

Valabil și pentru numerele negative. Exemplu: -11111111 sau


-11_111_111.
5. Numere reale (float)

O să vorbim aici despre cele două excepții!

Fie numărul 0.4 (zero punct patru). (Vă reamintesc că în Python nu


putem scrie 0,4)

Există o regulă care ne spune că îl putem omite pe 0 dacă acesta este


în fața sau în spatele punctului.

Putem scrie numărul 0.4 ca:

De exemplu, numărul 4.0 poate fi scris ca:

Asta nu le schimbă nici tipul, nici valoarea.

6. Notații științifice

Să luăm următorul exemplu: viteza luminii se exprimă în metri pe


secundă. Valoarea ei scrisă direct este 300000000.

Pentru a evita să scriem multe zerouri, se folosește următoare scriere:


3*108. (Se citește trei ori 10 la puterea a 8-a.)
În Python putem folosi următoarea scriere:

Litera E (putem folosi și e - vine de la cuvântul exponent) este


scrierea concisă a lui zece la puterea.

Important:
a. exponentul (valoarea după E) trebuie să fie un număr întreg
b. baza (valoarea din fața lui E) poate să fie un număr întreg

Constanta lui Planck notată cu h are valoarea 6.62607*10-34. În


Python o scriem în felul următor:

7. Stringuri

Vrem să afișăm următorul mesaj, dar fără să avem vreo eroare:

Pentru asta avem două soluții!!


Prima soluție este folosirea caracterului escape, adică a
backslash-ului. Acesta poate ”scăpa” chiar și ghilimele.
Ghilimelele precedate de un backslash își schimbă sensul -
nu sunt un delimitator, ci doar ghilimele. Să luăm următorul
exemplu:

Important: Sunt două ghilimele ”scăpate” în interiorul stringului -


putem să le vedem pe amândouă?

Cea de-a doua soluție poate fi ușor surprinzătoare. Putem folosi


apostrof în loc de ghilimele. Oricare dintre aceste caractere poate
delimita șirul, dar fii consecvent.

Dacă deschizi un string cu ghilimele, trebuie să îl închizi cu ghilimele.


Dacă deschizi un string cu apostrof, trebuie să îl închizi cu apostrof.

Acest exemplu va merge de asemenea:

Important: În acest exemplu nu este nevoie de backslash.


8. Valori booleene

Valorile booleene sunt două obiecte constante True și False care


reprezintă valori de adevăr.

În contexte numerice 1 este True și 0 este False.

Exercițiu: Care va fi rezultatul următoarei secvențe de cod?

9. Operatori aritmetici - ** (ridicare la putere)

Fie următoarele exemple:

Se vor afișa următoarele rezultate:


Important: Putem formula următoarele reguli ținând cont de
rezultatele de mai sus:

a. Când ambele argumente ale ** sunt numere întregi, rezultatul


este un număr întreg.
b. Când cel puțin unul dintre argumentele ** este număr real,
rezultatul este un număr real.

10. Operatori aritmetici - * (înmulțire)

Fie următoarele exemple:

Task: rulați codul de mai sus și vedeți dacă regulile de la ** mai sunt
valabile și aici.

11. Operatori aritmetici - / (împărțire)

Valoarea din fața slash-ului (/) se numește deîmpărțit, iar cea de


după slash împărțitor.
Fie următoarele exemple:

Se vor afișa următoarele rezultate:

Important: Observăm că aici avem o excepție de la regulile stabilite


mai devreme. Rezultatul produs de operatorul / este întotdeauna
un număr real.

🤔 Este aceasta o problema? Da, este. Se întâmplă uneori să avem


nevoie de o împărțire care să ne dea un număr întreg, nu un număr
real.

12. Operatori aritmetici - // (împărțire întreagă)

Este diferit de operatorul / din două puncte de vedere:

a. rezultatului său îi lipsește partea fracționară - este absentă (pentru


numere întregi) sau este întotdeauna egală cu 0 (pentru numere reale);
asta înseamnă că rezultatele sunt întotdeauna rotunjite;
b. respectă regula număr întreg vs. număr real. (Diferența dintre
un număr real și un număr întreg se face prin caracterul . (punct))

Fie următoarele exemple:

Se vor afișa următoarele rezultate:

Important: Operatorul // respectă regulile stabilite la **!

Haideți să luăm următorul exemplu:

🤔 Imaginați-vă că am folosi / în loc de //. Ce rezultate am obține?


Da, ne-ar da în ambele cazuri 1.5.
Dar dacă folosim // vom obține următoarele rezultate:

Putem vedea că am obținut doi de 1 - unul număr întreg, iar celălalt


număr real.

Rezultatul unei împărțiri întregi este întotdeauna rotunjit la cel


mai apropiat număr întreg care este mai mic decât rezultatul real
(care nu este rotunjit).

🤔 Dar dacă avem următoarea situație:

Observăm că unele numere sunt negative. Asta ne va afecta rezultatul.


Dar cum?

Remarcăm că am obținut de două ori rezultatul -2 - unul fiind număr


întreg, iar celălalt număr real. Rezultatul real în ambele cazuri este
-1.5.

Rotunjirea merge spre numărul întreg mai mic!


Ne reamintim de la matematică că -2 < -1.5! Astfel, obținem cele
două rezultate de mai sus.

Important: Împărțirea întreagă poate fi numită și împărțire reală.

13. Operatori aritmetici - % (împărțire cu rest)

Operatorul aritmetic % se numește modulo.

Să luăm următorul exemplu:

Se va afișa:

Rezultatul obținut este 2. Haideți să vedem de ce:

● 14 // 4 ne dă 3 -> acesta este câtul împărțirii


● 3 * 4 ne dă 12 -> acesta este rezultatul înmulțirii dintre cât și
împărțitor
● 14 - 12 ne dă 2 -> acesta este restul împărțirii

Să vedem ce se întâmplă dacă avem următorul exercițiu:


Vom obține următorul rezultat:

Rezultatul este 3.0, nu 3. Haideți să vedem de ce:


● 12 // 4.5 ne dă 2.0 -> acesta este câtul împărțirii
● 2.0 * 4.5 ne dă 9.0 -> acesta este rezultatul înmulțirii dintre
cât și împărțitor
● 12 - 9.0 ne dă 3.0 -> acesta este restul împărțirii

14. Cum să nu împărțim!

Vă reamintesc că împărțitorul nu poate fi 0!

Veți primi următoarea eroare:

15. Operatori aritmetici - + (adunare)

Să luăm următoarele exemple:


Vom avea următoarele rezultate:

Important: Adunarea respectă regulile stabilite la **!

16. Operatori aritmetici - - (scădere), operatori unari și binari

Ați observat că semnul - (minus) are și alt înțeles - poate schimba


semnul unui număr.

Este momentul să vorbim despre diferența dintre operatori unari și


binari.

Când facem operația de scădere, semnul minus așteaptă două


argumente: cel din stânga se numește descăzut, iar cel din dreapta
scăzător.

Din acest motiv, operatorul aritmetic minus (-) este considerat unul
dintre operatorii binari.

Alți operatori binari: +, *, **, /, //, %.

Dar semnul minus (-) poate fi folosit ca operator unar.


Haideți să vedem următorul exemplu:

În primele două cazuri semnul minus (-) este operator binar,


deoarece se aplică pentru doi operanzi (-4 și -4 sau 4. și -8), iar în
ultimul este operator unar, pentru că se aplică pentru un singur
operand (-1.1). În ultimul exemplu obținem numărul real negativ
-1.1.

Semnul + (plus) poate fi și el operator unar!


Putem să îl folosim în felul următor:

În acest caz se va afișa numărul întreg pozitiv 2, nu +2!

Deși această scriere este corectă, nu are sens să o folosim pentru că va


afișa exact același lucru ca print(2).

17. Operatorii și prioritățile lor

Considerăm următorul exemplu:


Ne reamintim de la matematică că înmulțirile preced adunările.

Asta înseamnă că prima dată vom calcula 3 * 5, care ne dă 15. După


aceea vom face adunarea, 2 + 15, care ne dă 17. Prin urmare,
rezultatul ecuației de mai sus este 17.

Fenomenul care cauzează unii operatori să acționeze înaintea altora se


numește ierarhia priorităților.

Operatorii care au prioritate mai mare vor acționa înaintea


operatorilor cu prioritate mai mică.

În exemplu de mai sus, * are o prioritate mai mare decât +.

18. Lista priorităților

Am enumerat operatorii în ordine de la prioritatea cea mai mare (1)


la prioritatea cea mai mică (4).

Important: Operatorii unari aflați la dreapta operatorului ** sunt


mai importanți!
Fie exemplul:

Se va afișa:

În cazul de față, prioritatea mai mare o are semnul minus.

Rezolvarea exercițiului de mai sus:

19. Operatorii și legăturile lor

Legătura operatorului determină ordinea calculelor făcute de către


operatorii cu aceeași prioritate, puse una lângă alta în aceeași
expresie.

Majoritatea operatorilor au legătura în partea stângă. Asta


înseamnă că vom efectua operațiile de la stânga la dreapta.

Fie exemplul:
Sunt două posibilități de a evalua această expresie:
● de la stânga la dreapta: prima dată 9 % 6 care ne dă 3, și apoi
3 % 2 care ne dă 1;
● de la dreapta la stânga: prima dată 6 % 2 care ne dă 0, și apoi
9 % 0 care cauzează o eroare.

Rezultatul este 1.

Operatorul % are legătura în partea stânga.

Există și o excepție interesantă. 🤔


20. Operatorii și legătura lor: ridicarea la putere

Fie exemplul:

Există două posibilități:


● 2 ** 2 -> 4; 4 ** 3 -> 64;
● 2 ** 3 -> 8; 2 ** 8 -> 256;

Dacă rulăm exemplul de mai sus, obținem următorul rezultat:

Rezultatul arată că operatorul aritmetic ** are legătura în partea


dreapta!
21. Operatori și paranteze

În conformitate cu regulile aritmetice, expresiile din paranteză


sunt întotdeauna calculate prima dată.

Să vedem următorul exemplu:

Acum să vedem cum rezolvăm această expresie:

22. Numele unei variabile

Dacă vrem să dăm un nume unei variabile, trebuie să urmăm niște


reguli stricte:
● numele variabile poate conține litere mari și mici, numere și
caracterul _ (underscore);
● numele unei variabile trebuie să înceapă cu o literă;
● caracterul underscore este o literă, prin urmare numele
variabilei poate începe cu _;
● literele mari și mici sunt două lucruri diferite (Alice și ALICE
sunt același nume, dar în Python ele sunt două nume diferite și
implicit două variabile diferite);
● numele unei variabile nu poate fi un cuvânt rezervat în Python
(cuvânt cheie). (Exemplu: True). Nu putem da acest nume unei
variabile, însă îi putem da numele true sau TRUE.

23. Nume corecte și incorecte de variabile

Câteva exemple de nume corecte de variabile:

Aceste nume de variabile sunt de asemenea corecte:

Câteva exemple de nume incorecte de variabile:

24. Keyword (cuvânt cheie)

Avem următoarea listă de cuvinte care au un rol special în Python:


Ele sunt numite cuvinte cheie sau cuvinte rezervate. Ele sunt
rezervate pentru că nu le putem folosi ca nume: nici pentru variabile,
nici pentru funcții, nici pentru alte entități pe care le creăm.

Cuvintele cheie sunt predefinite și nu trebuie să le schimb în vreun


fel.

Dacă modificăm o literă dintr-un cuvânt cheie, atunci creăm un


cuvânt nou, care nu mai este rezervat.

Exemplu - nu poți numi variabila ta așa:

Nu putem numi o variabilă așa - este interzis. Dar putem face asta în
schimb:

O să învățăm despre fiecare keyword la momentul potrivit. Nu vă


îngrijorați dacă multe dintre ele nu vă zic nimic încă.

25. Shortcut pentru operatori

De multe ori vrem să folosim aceeași variabilă și în dreapta și în


stânga operatorului =.

De exemplu, dacă vreau să calculez o serie de valori succesive ale


puterilor lui 2, folosesc următoarea scriere:
Dacă nu pot să adorm și vreau să număr oile, folosesc următoarea
scriere:

Putem folosi următorul shortcut pentru a scrie cele două operații:

Dacă op este un operator binar și este folosit în următoarea expresie:

putem folosi următorul shortcut:

Acum vom da câteva exemple pentru a ne obișnui cu acest shortcut:


26. Operații pe stringuri

Putem face două operații pe stringuri: concatenare și replicare.

Pentru concatenare folosim operatorul +, iar pentru replicare


operatorul *. (Despre concatenare am discutat la curs, vă rog să vă
uitați pe drive.)

Operatorul * se aplică pe un string și un număr sau pe un număr și


un string (este o operație comutativă) și devine astfel un operator
de replicare:

Replică/Multiplică stringul de același număr de ori specificat de


număr.

Să vedem câteva exemple:

Se vor afișa următoarele rezultate:


!!!Atenție la ultimile două exemple!!!
5 * ”2” sau ”2” * 5 nu dă 10, ci ”22222”

Important: Dacă numărul este mai mic sau egal decât zero, se va
afișa un string gol.

Următorul program desenează un dreptunghi folosind operatorii de


concatenare și replicare:

Se va afișa:

Uitați-vă la cum au fost folosite parantezele în a doua linie de cod!

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