Diferència entre revisions de la pàgina «Python: tipus bàsics de dades»

De Cacauet Wiki
Salta a la navegació Salta a la cerca
 
(Hi ha 21 revisions intermèdies del mateix usuari que no es mostren)
Línia 1: Línia 1:
 
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.
 
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 aquesta referència:
+
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
 
* UPC assignatura d'informàtica: http://ocwitic.epsem.upc.edu/assignatures/inf/temari
 
  
 
== Tipus de dades en Python ==
 
== Tipus de dades en Python ==
Línia 11: Línia 10:
 
** [http://ocwitic.epsem.upc.edu/assignatures/inf/Apunts/introduccio-a-la-programacio Versió traduïda al català] per professors de la UPC.
 
** [http://ocwitic.epsem.upc.edu/assignatures/inf/Apunts/introduccio-a-la-programacio Versió traduïda al català] per professors de la UPC.
 
** [http://www.openbookproject.net/thinkcs/ Versió original a openbooks]. Potser vols anar [http://openbookproject.net/thinkcs/python/english2e/ 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.
 
** [http://www.openbookproject.net/thinkcs/ Versió original a openbooks]. Potser vols anar [http://openbookproject.net/thinkcs/python/english2e/ 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.
* ...
+
* [http://203.158.253.140/media/e-Book/Computers%20&%20Internet/Beginning%20Python%20From%20Novice%20to%20Professional.pdf 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:
 
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) [http://en.wikibooks.org/wiki/Python_Programming/Numbers wikibooks]
 
* Nombres (sencers, flotants, complexes) [http://en.wikibooks.org/wiki/Python_Programming/Numbers wikibooks]
 +
** Formatació de nombres: http://docs.python.org/tutorial/inputoutput.html
 
* Strings [http://en.wikibooks.org/wiki/Python_Programming/Strings wikibooks] / [http://docs.python.org/library/string.html python.org] / [http://openbookproject.net/thinkcs/python/english2e/ch07.html HthinkCS] / llibre [http://ocwitic.epsem.upc.edu/assignatures/inf/Apunts/introduccio-a-la-programacio introduccio a la programació Cap.7]
 
* Strings [http://en.wikibooks.org/wiki/Python_Programming/Strings wikibooks] / [http://docs.python.org/library/string.html python.org] / [http://openbookproject.net/thinkcs/python/english2e/ch07.html HthinkCS] / llibre [http://ocwitic.epsem.upc.edu/assignatures/inf/Apunts/introduccio-a-la-programacio introduccio a la programació Cap.7]
 
* Llistes [http://en.wikibooks.org/wiki/Python_Programming/Lists wikibooks] / [http://docs.python.org/tutorial/datastructures.html python.org] / [http://openbookproject.net/thinkcs/python/english2e/ch09.html HthinkCS] / llibre [http://ocwitic.epsem.upc.edu/assignatures/inf/Apunts/introduccio-a-la-programacio introduccio a la programació Cap.8]
 
* Llistes [http://en.wikibooks.org/wiki/Python_Programming/Lists wikibooks] / [http://docs.python.org/tutorial/datastructures.html python.org] / [http://openbookproject.net/thinkcs/python/english2e/ch09.html HthinkCS] / llibre [http://ocwitic.epsem.upc.edu/assignatures/inf/Apunts/introduccio-a-la-programacio introduccio a la programació Cap.8]
 
* Tuples [http://en.wikibooks.org/wiki/Python_Programming/Tuples wikibooks] / [http://docs.python.org/tutorial/datastructures.html#tuples-and-sequences python.org] / llibre [http://ocwitic.epsem.upc.edu/assignatures/inf/Apunts/introduccio-a-la-programacio introduccio a la programació Cap.10]
 
* Tuples [http://en.wikibooks.org/wiki/Python_Programming/Tuples wikibooks] / [http://docs.python.org/tutorial/datastructures.html#tuples-and-sequences python.org] / llibre [http://ocwitic.epsem.upc.edu/assignatures/inf/Apunts/introduccio-a-la-programacio introduccio a la programació Cap.10]
* Diccionaris [http://en.wikibooks.org/wiki/Python_Programming/Tuples wikibooks] / [http://docs.python.org/tutorial/datastructures.html#dictionaries python.org] / [http://openbookproject.net/thinkcs/python/english2e/ch12.html HthinkCS] / llibre [http://ocwitic.epsem.upc.edu/assignatures/inf/Apunts/introduccio-a-la-programacio introduccio a la programació Cap.11]
+
* Diccionaris [http://en.wikibooks.org/wiki/Python_Programming/Dictionaries wikibooks] / [http://docs.python.org/tutorial/datastructures.html#dictionaries python.org] / [http://openbookproject.net/thinkcs/python/english2e/ch12.html HthinkCS] / llibre [http://ocwitic.epsem.upc.edu/assignatures/inf/Apunts/introduccio-a-la-programacio introduccio a la programació Cap.11]
 
** Més diccionaris: http://yuji.wordpress.com/2008/05/14/python-basics-of-python-dictionary-and-looping-through-them/
 
** Més diccionaris: http://yuji.wordpress.com/2008/05/14/python-basics-of-python-dictionary-and-looping-through-them/
 
* Sets
 
* Sets
 +
 +
 +
Més coses:
 +
* [http://docs.python.org/tutorial/inputoutput.html#reading-and-writing-files Fitxers (file)]
 +
* Ordenació (sorting): http://docs.python.org/py3k/howto/sorting.html
 +
* Funcions lambda:
 +
** https://pythonconquerstheuniverse.wordpress.com/2011/08/29/lambda_tutorial/
 +
** http://www.secnetix.de/olli/Python/lambda_functions.hawk
 +
* [http://www.artima.com/weblogs/viewpost.jsp?thread=4829 Main functions]
 +
* ...
 +
 
<br>
 
<br>
  
== Exercicis ==
+
== Exercicis de llistes ==
# Fes un script que vagi demanant nombres reals a l'usuari (fins que entri ENTER i prou) i que calculi la mitjana aritmètica. Mostra el resultat provisional cada vegada que demana un nou nombre.
+
 
# Fes una funció que obtingui la intersecció de dues llistes (elements comuns). Els elements poden ser nombres, booleans o cadenes de caràcters. Per provar-la, demana a l'usuari que entri les dades de la primera llista fins que entri ''Enter'' i després la de la segona llista.
+
=== Ex.1 Calculadora ===
# Utilitza la funció de l'exercici anterior, però ara agafarem les dades de dos fitxers ''llista1.txt'' i ''llista2.txt''. Cada línia del fitxer serà una dada de la llista.
+
Farem un programa que podrà realitzar diversos càlculs amb dades que li entrarem. Ho farem en diverses passes:
# Fes una funció que obtingui la intersecció de dos diccionaris.
+
* 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.
# Intersecció diccionaris amb dades de fitxers. Separador = tabulador.
+
* 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.
 +
<br>
 +
 
 +
=== 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".
 +
 
 +
<br>
 +
 
 +
=== [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).
 +
 
 +
<br>
 +
 
 +
== 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 <pre>resultats["local"]["visitant"] = (1,5)</pre>
 +
 
 +
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!...

Revisió de 11:09, 4 oct 2013

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:

Tipus de dades en Python[modifica]

Podeu seguir els següents links per més referència:

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:


Més coses:


Exercicis de llistes[modifica]

Ex.1 Calculadora[modifica]

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[modifica]

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[modifica]

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[modifica]

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[modifica]

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[modifica]

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[modifica]

Ex.1 Diccionaris[modifica]

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[modifica]

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)[modifica]

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!...