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.