1. Precedenta operatorilor
Ordinea (de la prioritate maxima la minima), in Python:
- ( ) — paranteze (prioritate maxima)
- ** — ridicare la putere (asociativa la dreapta)
- * / // % — inmultire, impartire, impartire intreaga, rest
- + - — adunare, scadere
- < > <= >= == != — comparatii
- not — negatie logica
- and — SI logic
- or — SAU logic (prioritate minima)
print(2 + 3 * 4) # intai 3*4=12, apoi 2+12 print((2 + 3) * 4) # parantezele schimba ordinea print(10 - 2 - 3) # de la stanga: (10-2)-3 print(2 ** 3 ** 2) # ** e la dreapta: 2**(3**2)=2**9
14 20 5 512
Atentie la **: este singurul operator aritmetic asociativ la dreapta, deci 2 ** 3 ** 2 = 2 ** 9 = 512, nu 8 ** 2 = 64.
2. Impartirea intreaga (//) si restul (%)
In Python sunt trei operatori de impartire:
/— impartire reala, da intotdeauna float (7 / 2 = 3.5)//— impartire intreaga (catul), arunca partea fractionara%— restul impartirii (modulo)
print(7 / 2) # impartire reala print(7 // 2) # cat intreg print(7 % 2) # rest print(-7 // 2) # in Python rotunjeste spre minus infinit print(-7 % 2) # restul are semnul impartitorului
3.5 3 1 -4 1
Trucuri pentru Bac (foarte des intalnite la prelucrarea cifrelor unui numar):
n % 10= ultima cifran // 10= numarul fara ultima cifran % 100= ultimele 2 cifren // 100= numarul fara ultimele 2 cifren % 2 == 0= numarul e par;n % 2 == 1= impar
3. Expresii logice si scurt-circuit
< > == !=) se evalueaza inaintea operatorilor logici. Ordinea logica este: not → and → or.
a = 5 b = 3 print(not (a > b) or (a % b == 2)) # not True or True print(a > b and a < 10) # True and True print(not a > b) # not se aplica dupa comparatie print(3 < 5 < 10) # comparatii inlantuite
True True False True
Evaluare scurt-circuit: la and, daca primul operand este False, rezultatul e deja False si al doilea nu se mai evalueaza. La or, daca primul e True, rezultatul e deja True. Asta permite scrieri sigure precum x != 0 and 10 / x > 1.
In Python True are valoarea 1, iar False valoarea 0. De aceea True + True da 2.
4. Conversii de tip (int, float, str)
input(), care returneaza mereu text.
int(x)— converteste in intreg (trunchiaza un float, nu rotunjeste)float(x)— converteste in numar realstr(x)— converteste in text
print(int("42") + 8) # text -> numar, apoi adunare print(float("3.5") * 2) # text -> float print(str(2026) + "!") # numar -> text, apoi concatenare print(int(3.9)) # trunchiere, NU rotunjire print(5 == 5.0) # int si float se compara dupa valoare
50 7.0 2026! 3 True
Atentie: "42" + 8 (fara conversie) ar da eroare, fiindca nu poti aduna text cu numar. Iar + intre doua stringuri le lipeste (concatenare), nu le aduna.
5. Conversii intre baze de numeratie [EXCLUSIV intensiv]
Python are functii predefinite pentru baze, dar e important sa intelegi si algoritmul cu impartiri repetate.
print(bin(13)) # 13 in baza 2 (prefix 0b) print(int("1101", 2)) # din baza 2 in baza 10 print(int("ff", 16)) # din hexazecimal in baza 10
0b1101 13 255
Algoritmul de baza (conversie din baza 10 in baza 2 prin impartiri repetate la 2, citind resturile de jos in sus):
# Conversie 13 in baza 2 prin impartiri repetate n = 13 cifre = "" while n > 0: cifre = str(n % 2) + cifre # restul devine cifra urmatoare n = n // 2 # continuam cu catul print(cifre)
1101
Complexitate: bucla ruleaza de aproximativ log₂(n) ori (n se injumatateste la fiecare pas), deci algoritmul este O(log n).
6. Evaluare pas cu pas - exemplu tip Bac
Sa evaluam not (x % 2 == 0) or (x > 10 and x < 20) pentru x = 12:
x % 2= 0, decix % 2 == 0esteTruenot True=Falsex > 10esteTrue,x < 20esteTrueTrue and True=TrueFalse or True=True
x = 12 print(not (x % 2 == 0) or (x > 10 and x < 20))
True
Un alt clasic: suma cifrelor unui numar de 3 cifre, doar cu % si //:
n = 385 print(n % 10 + n // 10 % 10 + n // 100) # 5 + 8 + 3
16
int / int da tot un int (se trunchiaza)! Valorile logice se afiseaza ca 1 / 0.
// Evaluare expresii in C++ (intensiv) #include <iostream> using namespace std; int main() { cout << 2 + 3 * 4 << endl; // precedenta la fel ca in Python cout << 7 / 2 << endl; // int/int = int -> 3 (trunchiat!) cout << 7.0 / 2 << endl; // daca un operand e real -> rezultat real cout << 7 % 2 << endl; // rest, doar pe intregi cout << (5 > 3 && 5 < 10) << endl; // bool afisat ca 1 cout << !(4 > 2) << endl; // bool afisat ca 0 return 0; }
14 3 3.5 1 1 0