Dimarts, febrer 10, 2026
PROGRAMACIÓ

Condicionals en Python: if, elif, else

Les sentències condicionals són una de les peces centrals de qualsevol llenguatge de programació. Permeten prendre decisions i executar diferents blocs de codi en funció d’ una condició lògica. A Python, les eines principals són if, elif i else. A primera vista semblen senzilles, però a la pràctica hi ha patrons d’ús, errors freqüents i detalls que convé dominar per escriure codi més clar i correcte.

Sintaxi bàsica d’ if, elif, else

A Python, l’ estructura bàsica és:

if condicio:
    # bloc si condicio es True
elif una_altra_condicio:
    # bloc si l’ anterior fou False i aquesta es True
else:
    # bloc si totes les anteriors foren False

Exemple senzill:

x = 7
 
if x > 10:
    print("Major que 10")
elif x == 10:
    print("Igual a 10")
else:
    print("Menor que 10")

Sortida:

Menor que 10

Alguns punts bàsics que convé gravar-se:

  • La condició s’ avalua com un valor booleà. Qualsevol expressió que retorni un valor es pot fer servir, no només comparacions.
  • elif és opcional i es pot repetir tantes vegades com vulguis.
  • else és opcional, i només pot aparèixer una vegada, al final.

Valors que Python considera True o False

Python no es limita a True o False. Qualsevol objecte pot avaluar-se en un context booleà:

  • Es consideren False: None, False, 0 (zero de qualsevol tipus numèric), “” (cadena buida), llistes/tuples/conjunts/diccionaris buits, objectes personalitzats amb __bool__ que retorni False o __len__ igual a 0.
  • Tota la resta és True.

Exemple:

items = []
 
if items:
    print("Hi ha elements")
else:
    print("Llista buida")

Això imprimeix:

Llista buida

Aquest comportament és útil i llegible, però pot induir a errors si no és explícit. Més endavant veurem exemples de trampes habituals.

Comparacions comunes i operadors útils

Igualtat i desigualtat

if x == 5:
    ...
if x != 0:
    ...

Comparacions encadenades

Python permet escriure condicions més naturals:

if 0 < x < 10:
    print("x està entre 1 y 9")

En altres llenguatges caldria escriure-ho com:

if x > 0 and x < 10:

La forma encadenada és més llegible i a més evita avaluar dues vegades x.

Operador in

Molt habitual per comprovar pertinença:

if "admin" in roles:
    ...

Això funciona amb llistes, tuples, conjunts, cadenes i qualsevol objecte que implementi __contains__.

if simples vs. blocs elif

Quan tens diverses condicions mútuament excloents, es fa servir elif. Exemple:

if status == "ok":
    processar()
elif status == "error":
    registrar_error()
elif status == "pendent":
    esperar()
else:
    raise ValueError("Estat desconegut")

Amb if independents en lloc d’elif el comportament seria diferent:

if status == "ok":
    processar()
if status == "error":
    registrar_error()

Aquí no hi ha exclusió: si dues condicions fossin veritables (possible en expressions més complexes), s’executarien ambdós blocs. Amb elif només se n’executa un.

Ús d’ else: quan i quan no

El bloc else sol cobrir la “resta de casos”. No obstant això, no sempre és bona idea fer-lo servir. Un else massa ampli pot ocultar errors lògics:

if estat == "iniciat":
    ...
elif estat == "aturat":
    ...
else:
    ...

Aquí l’else accepta qualsevol valor d’estat, fins i tot els inesperats. Si vols assegurar-te que els valors són només aquests, és millor llançar una excepció:

if estat == "iniciat":
    ...
elif estat == "aturat":
    ...
else:
    raise ValueError(f"Estat invàlid: {estat}")

En altres casos sí que té sentit cobrir un comportament genèric, per exemple:

if edat < 18:
    categoria = "menor"
else:
    categoria = "adult"

Errors freqüents amb condicionals

1. Confondre = amb ==

Això és comú en principiants. En Python, = assigna, = = compara.

# Error: SyntaxError
if x = 5:
    ...

Python retorna un error de sintaxi, a diferència de C o JavaScript on s’interpreta com a assignació.

2. Comparar amb is en lloc de = = =

is comprova identitat d’ objectes, no igualtat de valor:

a = [1, 2]
b = [1, 2]
 
print(a == b)  # True (tenen el mateix contingut)
print(a is b)  # False (no són el mateix objecte)

En condicions, fes servir is només per a None i valors singulars (True, False):

if valor is None:
    ...

3. Fer servir if variable == True

És redundant:

if actiu == True:   # innecesari

Ja n’hi ha prou amb:

if actiu:

4. Avaluar cadenes o llistes buides sense voler

De vegades és més clar ser explícit:

if password:         # True si no és cadena buida
vs.
if len(password) > 0:

Ambdues funcionen. La primera és més Pythonic, però si vols que algú entengui ràpid la teva intenció, la segona és més clara en certs contextos.

Aniament de condicionals

Els condicionals es poden aniar. Però un excés d’aniament fa que el codi sigui difícil de llegir:

if user:
    if user.is_active:
        if user.has_permission("edit"):
            editar()
        else:
            print("Sense permís")
    else:
        print("Usuari inactiu")
else:
    print("No hi ha usuari")

Això és correcte però poc llegible. Millor reorganitzar amb retorns primerencs o combinant condicions:

if not user:
    print("No hi ha usuari")
    return
if not user.is_active:
    print("Usuari inactiu")
    return
 
if not user.has_permission("edit"):
    print("Sense permís")
    return
 
editar()

Aquest patró evita “piràmides” de codi aniat.

Expressions condicionals (ternàries)

Python té una forma compacta d’ escriure condicionals:

x = 10
resultat = "parell" if x % 2 == 0 else "senar"

Això es llegeix com: assigna “parell” si la condició és True, si no “senar”.

No és el mateix que en C o Java: l’ordre és més llegible (condició al mig).

Es recomana fer-lo servir només quan la lògica és curta. Si l’expressió creix, es torna il·legible:

# Dolent: difícil de llegir
missatge = "major" if x > 100 else "positiu" if x > 0 else "zero o negatiu"

Millor fer servir blocs normals d’ if.

Condicionals amb operadors lògics (and, or, not)

Python permet combinar condicions:

if edat >= 18 and pais == "ES":
    print("Pot votar")

and, or y not retornen directament els valors, no només True/False.

print("A" or "B")   # "A"
print("" or "B")    # "B"

Això es fa servir molt per assignar valors per defecte:

nom = input_nom or "Anònim"

Tot i que és pràctic, cal recordar que valors buits com 0 o “” també compten com a False, cosa que pot ser indesitjada.

Patró if amb in en col·leccions

Un cas habitual: comprovar si un valor està en una llista o conjunt:

if opcion in ["s", "S", "sí", "SI"]:
    confirmar()

Conjunt (set) és més eficient si hi ha moltes opcions:

if opcion in {"s", "S", "sí", "SI"}:
    confirmar()

Gestió de múltiples condicions amb diccionaris

De vegades, en lloc de llargues cadenes d’elif, es pot fer servir un diccionari que mapeja valors a funcions o resultats. Exemple:

def processar_ok(): ...
def processar _error(): ...
def processar _pendent(): ...
 
accions = {
    "ok": processar _ok,
    "error": processar _error,
    "pendent": processar _pendent,
}
 
estat = "ok"
accio = accions.get(estat)
 
if accio:
    accio()
else:
    raise ValueError(f"Estat invàlid: {estat}")

Això és més escalable que diversos elif. No substitueix tots els condicionals, però és útil quan es tracta de simples eleccions basades en un valor.

Condicionals en bucles

Els condicionals solen aparèixer dins de bucles. Exemple:

for numero in range(10):
    if numero % 2 == 0:
        print(f"{numero} es parell")
    else:
        print(f"{numero} es senar")

En casos més complexos, convé separar la lògica en funcions auxiliars en lloc de barrejar massa if dins del bucle.

Patrons avançats: match vs. if/elif

Des de Python 3.10 existeix match/case, una forma més declarativa de gestionar múltiples condicions. Tot i que aquesta entrada se centra en if, convé esmentar que quan les comparacions són directes sobre un mateix valor, match pot ser més clar que una cadena llarga d’elif.

Exemple:

match estat:
    case "ok":
        processar()
    case "error":
        registrar_error()
    case "pendent":
        esperar()
    case _:
        raise ValueError("Estat invàlid")

En projectes on es treballa amb Python 3.10+, aquesta alternativa pot millorar la llegibilitat.

Conclusió

Els condicionals if, elif i else són molt més que una estructura bàsica. La seva claredat depèn de com es combinen, si s’abusa dels aniaments, si es fan servir per a casos inesperats o si s’organitza el codi en taules de decisió més netes.

Deixa un comentari

L'adreça electrònica no es publicarà. Els camps necessaris estan marcats amb *