Temps mort #1

Enhorabona! Ja hem arribat al final de la primera part del curs. Us mereixeu un descans!!!

En aquesta lliçó es presenta un primer tema que té a veure amb l’ús de l’ordinador. En particular, es remet a informació sobre ergonomia que qualsevol professional de les tecnologies de la informació i la comunicació hauria de conèixer per tal de treballar davant de l’ordinador de forma segura sense posar la seva salut en perill. A continuació, es presenten dos elements de Python que permeten compactar el codi: els operadors d’assignació augmentats i l’expressió condicional. No és necessari fer-los servir, però tothom els usa i, per tant, com a mínim, cal comprendre’ls.

Ergonomia

A la meva primera classe de piano, el meu professor em va ensenyar com seure a la banqueta i regular la seva alçada. Els músics saben que tenir una postura correcta és extremadament important a l’hora de tocar un instrument, ja que no només millora la interpretació, sinó que evita que l’estrès i els danys posturals esgotin el cos i el cervell.

Igualment, l’ús continuat de l’ordinador o els hàbits inadequats de treball amb l’ordinador poden tenir efectes detrimentals a la salut, en especial fatiga visual i trastorns musculoesquelètics. Eviteu aquests problemes de salut a curt i llarg termini, adoptant mesures de seguretat que millorin l’ergonomia del vostre lloc d’estudi o de treball i manteniu posicions de treball adequades.

La web de Prevenció de Riscos Laborals de la UPC us ofereix recomanacions específiques:

Aquests són uns altres enllaços recomanats:

Sisplau llegiu aquests enllaços i seguiu les seves consignes. Algun dia ho agraireu.

Alguns errors que veig freqüentment entre els meus estudiants són els següents:

I en relació als descansos i als estudis, us recomano el llibre Learning How to Learn de Barbara Oakley (també n’hi ha un curs online).

Operadors d’assignació augmentats

Quan vegades no hem escrit ja la línia següent?

i = i + 1

Doncs Python ofereix una drecera per dir el mateix:

i += 1

La instrucció i += 1 vol dir a la variable i se li assigna el valor que tenia abans més una unitat. Per tant, i += 1 i i = i + 1 són perfectament equivalents.

Igualment, la instrucció x *= 2 vol dir a la variable x se li assigna el doble del valor que tenia abans. Per tant, x *= 2 i x = x * 2 són perfectament equivalents.

De la mateixa manera, tenim equivalències per a tots els operadors aritmètics:

Operador d’assignació augmentat Assignació corresponent
i += e i = i + e
i -= e i = i - e
i *= e i = i * e
i /= e i = i / e
i %= e i = i % e
i **= e i = i ** e

Per ara, aquests nous operadors d’assignació augmentats poden semblar inútils o redundants, però aviat començarem a escriure increments com aquest amb variables més complicades que la i i llavors guanyaran interès per dues raons:

A partir d’ara us animo a usar aquests operadors, perquè veureu que tothom els fa servir.

Expressió condicional

L’expressió condicional permet avaluar un o una altre valor en funció d’una condició booleana.

Mireu, enlloc d’escriure una instrucció condicional com

if n % 2 == 0:
    paritat = 'parell'
else:
    paritat = 'senar'

es pot escriure

paritat = 'parell' if n % 2 == 0 else 'senar'

L’expressió condicional té tres parts: la part de l’esquerra de l’if, la part entre el if i el else i la part darrera de l’else. En aquest cas, l’else és obligatori. Aquesta expressió avalua primer la part del mig, que ha de ser un booleà. Si és certa, llavors avalua i retorna la primera; sinó, avalua i retorna la tercera. Per anar bé, el tipus de la primera i tercera expressions han de ser el mateix.

Les expressions condicionals haurien de servir per fer més clar el codi. L’ús raonable de parèntesis pot ajudar. Si no ho fan, potser millor no usar-les.

Exemple: la seqüència de Collatz

Considerem la operació següent sobre un nombre natural no nul:

Ara podem formar una seqüència d’enters aplicant aquesta operació repetidament, començant en qualsevol nombre natural i prenent el resultat de cada pas com a origen del pas següent. Per exemple, començant per 5 tenim la seqüència 6 → 3 → 10 → 5 → 16 → 8 → 4 → 2 → 1 → 4 → 2 → 1 → … Es creu, però mai s’ha demostrat, que per a qualsevol nombre de partida, aquesta seqüència sempre arriba a 1.

Considerem ara que volem escriure aquesta seqüència començant a partir d’un natural n no nul fins que arribi a 1. Amb l’expressió condicional ho podríem fer així:

n = read(int)
while n != 1:
    print(n)
    n = n // 2 if n % 2 == 0 else 3 * n + 1
print(n)

L’expressió condicional n // 2 if n % 2 == 0 else 3 * n + 1 retorna doncs el següent nombre de la seqüència.




Lliçons.jutge.org
Jordi Petit
Universitat Politècnica de Catalunya, 2023

Prohibit copiar. Tots els drets reservats.
No copy allowed. All rights reserved.