Python: tipus bàsics de dades
En aquesta secció suposem que es tenen nocions bàsiques de programació i algorísmica. Anem a veure les particularitats del llenguatge Python en el referent als tipus bàsics de dades.
Per una introducció a la programació en Python podeu mirar-vos aquestes referències:
- UPC assignatura d'informàtica: http://ocwitic.epsem.upc.edu/assignatures/inf/temari
Contingut
Tipus de dades en Python
Podeu seguir els següents links per més referència:
- Wikibooks (aneu als "data types" directament): http://en.wikibooks.org/wiki/Python_Programming#Python_concepts
- Llibre "How to think like a computer scientist" (HthinkCS), traduït per professors de la UPC.
- Versió traduïda al català per professors de la UPC.
- Versió original a openbooks. Potser vols anar directament a la versió 2 (per la v2.x de Python), també hi ha la 3 però no la farem servir en aquest curs encara.
- Beginning Python.
Les estructures de dades típiques de Python son:
- Llistes: equivaldrien (amb molts peròs) als arrays i matrius.
- Diccionaris: equivalen als arrays associatius.
Els diferents tipus de dades en Python son:
- None: important, s'assembla al NULL de C però és diferent. NULL equival a l'adreça 0. None de Python equival a cap tipus de dada.
- Nombres (sencers, flotants, complexes) wikibooks
- Formatació de nombres: http://docs.python.org/tutorial/inputoutput.html
- Strings wikibooks / python.org / HthinkCS / llibre introduccio a la programació Cap.7
- Llistes wikibooks / python.org / HthinkCS / llibre introduccio a la programació Cap.8
- Tuples wikibooks / python.org / llibre introduccio a la programació Cap.10
- Diccionaris wikibooks / python.org / HthinkCS / llibre introduccio a la programació Cap.11
- Sets
Més coses:
- Fitxers (file)
- Ordenació (sorting): http://docs.python.org/py3k/howto/sorting.html
- Funcions lambda:
- Main functions
- ...
Exercicis de llistes
Ex.1 Calculadora
Farem un programa que podrà realitzar diversos càlculs amb dades que li entrarem. Ho farem en diverses passes:
- Realitza una funció que demani les dades (nombres) a l'usuari per la consola i les retorni en una llista. Quan l'usuari entri una dada buida finalitzem l'entrada de dades i retornem la llista.
- Fes un menu de l'aplicació que permeti:
- Entrar les dades a l'usuari.
- Visualitzar les dades per pantalla.
- Calcular la mitjana aritmètica.
- Calcular la mitjana geomètrica.
- Ordenar les dades de forma creixent.
- Ordenar les dades de forma decreixent.
- Calcular la mediana (nombre entrat que queda al mig dels altres). Per ex.: [1,2,15] la mediana és 2.
- Afegeix una funció que permeti a l'usuari carregar les dades d'un fitxer de text. Cada dada ocupa una línia.
- Afegeix una funció que permeti a l'usuari gravar les dades en un fitxer de text.
Ex.2 Interseccions
Fes una funció que obtingui la intersecció de dues llistes (elements comuns). Els elements poden ser nombres o cadenes de caràcters (strings).
Fes un menú principal de l'aplicació que et permeti:
- Entrar les dades manualment (com l'exercici anterior però ara podem entrar nombres o strings). Caldrà que te les demani 2 cops (necessitem 2 arrays per fer la intersecció).
- Visualitzar les dades per pantalla
- Carregar les dades des de 2 fitxers de text.
- Calcular la intersecció.
Ex.3 Matrius
Construeix una matriu amb llistes (llista de llistes) amb dades que entri l'usuari. Quan entri una dada buida acabarem la fila. Si és el primer element de la fila finalitzarem l'entrada de dades de la matriu.
El menú ha d'oferir:
- Entrar dades de la matriu.
- Carregar-les d'un fitxer, files en línies i dades separades per comes.
- Visualitzar la matriu
- Trasposar la matriu (intercanviar files per columnes).
PISTA: Aneu al tanto al trasposar, ja que cal comprovar si aquell element de la llista existeix. Per altra banda, si al trasposar la matriu ens queden "forats", assigneu-li el valor None a l'element de la llista on hi ha el "forat".
[2013] Ex.4 Sudoku
Fes una aplicació per jugar al Sudoku. Utilitza una matriu de 9x9 amb sencers.
Similarment al joc dels vaixells, farem que les columnes s'indiquin amb lletres (a-i) i les files amb nombres. Per exemple, per canviar el nombre de la casella de la 2a columna i 3a fila, caldria introduïr "A3" (o "a3").
Sudoku 1.0
A resoldre amb matriu de sencers (integers).
- Ha de mostrar la quadrícula ben formatada per consola.
- Per exemple, un 0 significarà "cel·la buida", però no posarem el 0 quan mostrem el Sudoku per pantalla.
- Ha de permetre entrar noves caselles a l'usuari i comprovar que la nova casella introduïda compleix les normes del Sudoku (files, columnes, quadrants). Si la nova dada introduïda no compleix les regles, no entra, i s'ha de buidar la cel·la.
- Quan estigui ple ha de notificar-ho a l'usuari amb un missatge de felicitació.
- Ha de generar un joc inicial amb 20 caselles plenes, assegurant-nos que compleixen les regles. A partir d'aquí l'usuari pot continuar completant la quadrícula.
Sudoku 2.0
A resoldre amb POO (objectes).
- Ha de permetre jugar diversos Sudokus simultanis i canviar de partida.
- Es tracta de mantenir en memòria els diferents Sudokus degudament encapsulats en objectes, no que els graveu en un arxiu.
- Mode d'ajuda a l'usuari: si li preguntem per una cel·la ha de donar-nos les opcions que li queden que compleixin les regles.
- Resolució amb algorisme de backtracking (opcional).
Exercicis de diccionaris
Ex.1 Diccionaris
Fes una funció que agafi les dades d'un fitxer de text i les posi en un diccionari. El format del fitxer serà:
clau1 = valor 1 del diccionari clau2 = valor 2 del diccionari ...
OJU: les dades al fitxer després del signe "=" no poden contenir aquest signe i no van entre cometes. Caldrà treure els espais abans i després del valor.
El menú ha d'oferir:
- Carregar les dades d'un fitxer.
- Mostrar les dades per pantalla.
- Mostrar el valor d'una clau.
Ex.2 Lliga de futbol
Farem una aplicació per anotar els resultats d'una lligueta de futbol. En l'arxiu de text "equips.cfg" posarem la configuració dels equips, un per línia. Utilitzarem el nom dels equips com a clau del diccionari que contindrà els resultats.
Estructura de dades:
- Les dades les emmagatzemarem en una matriu feta amb diccionaris, és a dir, un diccionari de diccionaris.
- Cadascun dels equips tindrà un diccionari on emmagatzemarà el resultat dels partits (tupla de 2 elements) que ha jugat a casa seva. Així ens adreçarem al resultat d'un partit amb
resultats["local"]["visitant"] = (1,5)
El menú ha de permetre:
- Crear nova lliga: carregar un arxiu de configuració ("equips.cfg") amb el nom dels equips.
- Entrar les dades d'un partit: t'ha de demanar triar equip local / visitant d'una llista i després entrar els gols de cada equip.
- Esborrar les dades d'un partit (per si hem comès un error a l'entrar-ho).
- Enregistrar les dades d'una lliga en un arxiu de text.
- Carregar les dades d'una lliga des d'un arxiu de text.
- Mostrar els resultats dels partits.
- Calcular i mostrar la classificació.
Format de l'arxiu per emmagatzemar les dades (1 resultat per línia):
equip_local / equip_visitant / gols_local / gols_visitant
Ampliació (v2.0)
Si esteu inspirats podeu afegir estadístiques i funcionalitats, com per exemple:
- Goal average (suma de gols a favor/ en contra).
- Mitjana de gols per partit de cada equip.
- Afegir a l'aplicació quin jugador marca els gols.
- En quin instant es marquen els gols.
- ...vosaltres mateixes!...