Skip to content

Structuri decizionale

Până acum, programele noastre executau instrucțiunile una după alta, în ordine. Cu structurile decizionale, programul poate alege ce să execute în funcție de anumite condiții - exact cum decizi și tu: "Dacă plouă, iau umbrela. Altfel, nu."

Tipul boolean - adevărat sau fals

Când compari două valori, rezultatul poate fi doar True (adevărat) sau False (fals). Acest tip de date se numește boolean:

print(3 == 4, 3 != 4)
False True
type(True)
bool

Tabela de adevăr pentru operatori logici

a b a and b a or b
True True True True
True False False True
False True False True
False False False False

Operatori de comparație

Operator Ce verifică
== sunt egale?
!= sunt diferite?
< primul e mai mic?
> primul e mai mare?
<= primul e mai mic sau egal?
>= primul e mai mare sau egal?

Operatori logici

Aceștia combină mai multe condiții:

Operator Când e True
and când ambele condiții sunt adevărate
or când cel puțin una dintre condiții e adevărată
not inversează: True devine False și invers

Exemple

# and - trebuie să fie și major, și să aibă permis
if varsta >= 18 and are_permis:
    print("Poate conduce")

# or - e suficient să fie weekend SAU sărbătoare
if este_weekend or este_sarbatoare:
    print("Zi liberă")

# not - dacă NU plouă
if not este_ploaie:
    print("Putem ieși afară")

Instrucțiunea if

"Dacă condiția e adevărată, execută codul din bloc":

if True:
  print("Adevărat")
varsta = 18

if varsta >= 18:
    print("Ești major")

Instrucțiunea if-else

"Dacă condiția e adevărată, execută prima variantă. Altfel, execută a doua":

if 4 == 4:
  print("egale")
else:
  print("diferite")
egale
varsta = 16

if varsta >= 18:
    print("Ești major")
else:
    print("Ești minor")

Instrucțiunea if-elif-else

Când ai mai multe cazuri de verificat, folosești elif (prescurtare de la "else if"):

a = 9
b = 3

if a > b:
  print("mai mare")
elif a < b:
  print("mai mic")
else:
  print("egale")
nota = 8

if nota >= 9:
    print("Foarte bine")
elif nota >= 7:
    print("Bine")
elif nota >= 5:
    print("Suficient")
else:
    print("Insuficient")

Condițiile se verifică în ordine. Prima care e adevărată "câștigă" și restul sunt ignorate.

Condiții imbricate

Poți pune un if în interiorul altui if:

varsta = 25
are_permis = True

if varsta >= 18:
    if are_permis:
        print("Poate conduce")
    else:
        print("Trebuie să obțină permisul")
else:
    print("Prea tânăr pentru permis")

Operatorul ternar

O modalitate scurtă de a scrie o atribuire condiționată pe o singură linie:

varsta = 20
status = "major" if varsta >= 18 else "minor"

Se citește: "status e 'major' dacă varsta >= 18, altfel e 'minor'".

Aplicație practică

# Rezolvarea ecuației de gradul 1: ax + b = 0
a = float(input("a = "))
b = float(input("b = "))

if a == 0:
    if b == 0:
        print("Ecuație nedeterminată (infinitate de soluții)")
    else:
        print("Ecuație imposibilă (nicio soluție)")
else:
    x = -b / a
    print(f"Soluția: x = {x}")

Exerciții

Citește un număr de la tastatură. Afișează-l pe ecran dacă este strict mai mare decât 10.


Afișează DA dacă un număr e multiplu de 3, NU altfel.


Problema paritate:

Citește un număr n de la tastatură. Afișează pe ecran mesajul n este par dacă este par, respectiv n este impar în caz contrar (în locul literei "n" va apărea valoarea numărului, ca în exemplu).


Problema max2:

Citește 2 numere de la tastatură și afișează-l pe cel mai mare dintre ele.


Problema Interval2:

Citește 3 numere de la tastatură (a b x). Afișează DA dacă numărul x aparține intervalului [a, b] (este mai mare sau egal cu a și mai mic sau egal cu b) și NU altfel.