Els programes que hem creat fins ara sempre segueixen el mateix camí, comencen per la primera instrucció i les van executant totes, una a una, són programes seqüencials.
Però per solucionar problemes reals necessitem que els nostres programes siguin capaços de prendre decisions i executar un codi o un altre en funció de la situació.
Els ordinadors prenen decisions determinant si el valor d'una afirmació és cert o fals. Això es coneix com a avaluació. Si la declaració és certa, el programa executarà la següent instrucció, en cas contrari no ho farà.
Els operadors de comparació comparen dos valors i els avaluen a cert (True) o false (False). La taula següent llista els operadors de comparació:
Ara provem alguns operadors, escriu i executa el següent codi al teu editor i mira què passa:
El resultat de l'avaluació és el que t'esperaves?
Vegem alguns exemples més, prova de pensar en quin serà el resultat de l'avaluació abans d'executar el codi:
Com pots intuir amb els resultats, alguns aspectes a tenir en compte respecte a les avaluacions són:
Totes les lletres s'acaben transformant en un número (codi ASCII).
En els textos es distingeix entre majúscules i minúscules.
Els valors enters i decimals sempre s'avaluen com a diferents d'un valor de text.
Per últim, és molt important tenir clara la diferència entre l'operador = i == :
L'operador == (igual a) pregunta si dos valors són iguals entre si.
L'operador = (assignació) posa el valor de la dreta a la variable de l'esquerra.
Quan se li demana a un ordinador que prengui una decisió, duu a terme un procés semblant a aquest:
"Si aquesta afirmació és certa, executaré aquest codi".
La nostre feina com a programadors és proporcionar:
L'afirmació que es valorarà com a certa o falsa, i
El codi que es realitzarà si l'afirmació és certa
La instrucció es coneix com a if-then i és una de les estructures més utilitzades en programació. Existeix una versió del if–then en tots els llenguatges de programació. La sintaxi d'un if–then a Python té aquest aspecte:
Entre el if i els dos punts : hi ha el codi que s'avaluarà, això es coneix com a condició. A sota dels dos punts hi va el codi que s'executarà només si la condició és certa, és molt important que tot aquest codi estigui sagnat, així és com Python sap quin codi ha d'executar si la condició és certa. Quan premeu Enter després dels dos punts, és possible que el vostre editor faci automàticament el sagnat, si no, podeu utilitzar la tecla de tabulació per crear un sagnat.
Posem-ho en pràctica creant un programa senzill que respongui "hola" quan l'usuari escrigui "hola". Copia aquest codi al teu editor:
Executeu el programa i comproveu que només respon "hola" quan l'usuari escriu "hola".
A continuació, canviarem el programa perquè sempre digui "adeu" quan acabi el programa. Perquè el codi s'executi després de if, heu d'escriure'l sense sagnat, en cas contrari, Python continuarà pensant que forma part de if. Afegiu una línia al vostre codi perquè quedi així:
Executeu el vostre programa unes quantes vegades; experimenteu introduint la frase "hola" i altres frases. Obteniu els resultats que espereu?
El vostre programa només hauria de dir "hola" si dieu "hola", però sempre hauria de dir "adeu".
Al pas anterior, heu après a utilitzar una declaració if–then per permetre que el vostre ordinador faci una acció quan una afirmació és certa. Però sovint és molt útil fer una acció diferent si l'afirmació és falsa. Això es fa mitjançant una instrucció if–then–else, que funciona així:
"Si aquesta afirmació és certa, executaré aquest codi, sinó executaré aquest altre codi"
La sintaxi d'un if-then-else a Python és així:
Ara canviarem el nostre programa de manera que si l'usuari introdueix una altra cosa que no sigui "hola", respongui amb "ho sento, no ho entenc". El codi complet hauria de ser:
Executeu el vostre programa i comproveu que obteniu els resultats que espereu.
El sagnat és molt important en Python perquè és com es determina l'abast. L'abast és com Python sap quin codi pertany a quina part del programa.
Utilitzeu la tecla de tabulació del teclat. Això crearà un espai i sagnarà el cursor. La majoria dels editors de codi intentaran ajudar-vos a sagnar el vostre codi, introduint sagnats automàticament quan premeu Intro després dels dos punts :.
Hi ha editors que utilitzen un sagnat de dos espais i altres on el sagnat és de quatre espais. A Python no li importa si utilitzeu dos espais o quatre espais (o qualsevol altre nombre d'espais) sempre que siguis coherent. Per exemple, si comenceu utilitzant quatre espais per a un sagnat, sempre hauríeu d'utilitzar quatre espais.
A l'exemple següent, s'han utilitzat quatre espais per al primer sagnat, però només dos per al segon, i podeu veure que, com a resultat, el codi no està alineat:
L'execució d'aquest programa donarà lloc a un error que indica IndentationError: unindent does not match any outer indentation level.
Python necessita que sigueu coherents. Manteniu el vostre codi ordenat! Si no està alineat, no funcionarà.
Fins ara hem après a executar un codi o un altre en funció de si una condició és certa o falsa. Però què passa si volem provar més de dues possibilitats? En aquests casos podem utilitzar else if. La sintaxi d'un else if a Python, que l'abreuja a elif, té aquest aspecte:
Canviem el programa perquè utilitzi un elif per comprovar si la frase és "com et dius" i per respondre a aquesta frase amb "Maria". El codi complet hauria de ser així:
Executeu el vostre programa i comproveu que elif funciona.
Fins ara només heu fet proves individuals quan avalueu una condició. Amb and i or, podeu crear avaluacions compostes que provin diverses condicions, per exemple:
L'operador and avalua una expressió a True si els dos valors booleans són True; en cas contrari, avalua com a False.
D'altra banda, l'operador or avalua una expressió a True si qualsevol dels dos valors booleans és True. Si tots dos són falsos, s’avaluarà com a False.
Canviem el programa anterior de manera que respongui "hola" si la frase de l'usuari és "hola" o "bon dia". El programa hauria de quedar així:
Un error comú és escriure if frase == "hola" or "bon dia", ja que així ho diríem en català, però en Python, heu d'indicar la condició completa cada vegada. Aquest codi s'executarà, però no tindrà el resultat que espereu, ja que la declaració if sempre serà certa.