Fitxer matrius ============== #. Dissenyeu la funció *separa(s)* que donat un string *s* que codifica enters positius separats per un o més espais en blanc, retorna la llista dels enters codificats en el string. Utilitzeu el mètode :meth:`str.split` per separar el string. Per exemple: .. code:: pycon >>> separa(' 5 6 78 89 345 1 2 0 0 ') [5, 6, 78, 89, 345, 1, 2, 0, 0] #. Dissenyeu la funció *ajunta(s)* que donada una llista d'enters, retorni un string que codifiqui els enters en el mateix ordre que la llista separats amb ``' | '``. Utilitzeu el mètode :meth:`str.join`. Per exemple: .. code:: pycon >>> ajunta([5, 6, 78, 89, 45, 1, 2, 0, 0]) '5 | 6 | 78 | 89 | 45 | 1 | 2 | 0 | 0') Esbrineu com podríeu modificar la funció per tal que cada enter ocupi exactament el mateix nombre d'espais. Per això, repasseu les eines de format i proveu aquest exemple: .. code:: pycon >>> s = '{:5d} | {:5d} | {:5d}'.format(23, 1, 456) >>> s ' 23 | 1 | 456' #. Un fitxer conté les dades d'una matriu de *nxm* enters. Cada línia del fitxer està formada per *n* valors separats entre sí per un o més espais en blanc. Dissenyeu la funció *llegirMatriu(nomfitxer)* que llegeix les dades de la matriu del fitxer de nom donat. La funció ha de retornar una llista de *n* files essent cada fila una llista de m enters. Cal utilitzar la funció *separa* dissenyada abans. Per exemple, si el fitxer 'matriu.txt' conté el següent:: 0 0 0 0 10 12 1 5 0 0 0 0 2 4 12 14 13 66 5 0 0 0 0 0 .. code:: python >>>> llegirMatriu('matriu.txt') [[0, 0, 0, 0], [10, 12, 1, 5], [0, 0, 0, 0], [2, 4, 12, 14], [0, 0, 0, 0], [13, 66, 5, 0], [0, 0, 0, 0]] #. Dissenyeu la funció *escriureMatriu(nomfitxer, matriu)* que donat un nom de fitxer i donada una matriu d'enters de valor comprès entre 0 i 99, representada per una llista de llistes, escriu la matriu en el fitxer, una línia per fila i, per cada fila, els valors separats amb ``' | '``. Cal utilitzar la funció *ajunta* dissenyada abans. Exemple de contingut de fitxer escrit per la matriu [[10, 12, 1, 5],[2, 4, 12, 14], [13, 66, 5, 0]]:: 10 | 12 | 1 | 5 2 | 4 | 12 | 14 13 | 66 | 5 | 0 #. Dissenyeu la funció *llistaZero(llista)* que donada una llista d'enters retorni *True* si tots els valors de la llista són iguals a zero i *False* en cas contrari. #. Dissenyeu la funció impura *eliminarFilesZero(matriu)* que elimina de la matriu totes les files formades únicament per valors zero. #. Dissenyeu la funció *tractar(nom1, nom2)* que donats dos noms de fitxers tals que el primer conté dades d'una matriu, llegeix la matriu, n'elimina les files buides i escriu la matriu modificada en el segon fitxer. Cal utilitzar les funcions dissenyades en els exercicis anteriors.