Diferència entre revisions de la pàgina «ASIX-M3-UF1-A4»
(q) |
(→Classes) |
||
(Hi ha 103 revisions intermèdies del mateix usuari que no es mostren) | |||
Línia 1: | Línia 1: | ||
==Cadenes== | ==Cadenes== | ||
+ | https://j2logo.com/ejercicios-python/#retoSemanal | ||
+ | :* Una cadena és una seqüència de caràcters (String). | ||
− | :* | + | :* Es poden assignar directament a variables o llegir des de teclat. |
+ | |||
+ | <source lang = "python"> | ||
+ | >>> nom = "Joan" | ||
+ | |||
+ | >>> cognoms = input("Introdueix els teus cognoms") | ||
+ | </source> | ||
− | :* | + | :* A cada caràcter de la cadena li correspon una posició: |
+ | <pre> | ||
+ | Hola Joan | ||
+ | 012345678 | ||
+ | </pre> | ||
+ | |||
+ | :* Podem accedir als caràcters de la cadena indicant la posició i a subcadenes indicant un rang (slicing). | ||
+ | |||
+ | <source lang = "python"> | ||
+ | >>> salutacio = "Hola Joan" | ||
+ | |||
+ | >>> salutacio[3] # mostra el caràcter de la posició 3 | ||
+ | 'a' | ||
+ | >>> salutacio[-3] # mostra el caràcter de la posició 3 comptant des del final de la cadena | ||
+ | 'o' | ||
+ | >>> salutacio[2:4] # mostra els caràcters de les posicions 2 i 3 | ||
+ | 'la' | ||
+ | >>> salutacio[:4] # mostra els caràcters de les posicions 0, 1, 2 i 3 | ||
+ | 'Hola' | ||
+ | >>> salutacio[5:] # mostra els caràcters des de la posició 5 fins al final | ||
+ | 'Joan' | ||
+ | >>> salutacio[:-2] # mostra tota la cadena menys els dos últims caràcters | ||
+ | 'Hola Jo' | ||
+ | </source> | ||
+ | |||
+ | ===Operacions amb cadenes=== | ||
+ | |||
+ | ::- Concatenar | ||
+ | <source lang = "python"> | ||
+ | >>> nomComplert = "Joan" + "Climent" | ||
+ | >>> print(nomComplert) | ||
+ | JoanCliment | ||
+ | </source> | ||
+ | ::- Repetir | ||
+ | <source lang = "python"> | ||
+ | >>> print('Hola' * 3) | ||
+ | HolaHolaHola | ||
+ | </source> | ||
+ | |||
+ | :* Codificacions dels caràcters: | ||
+ | |||
+ | ::- ASCII: 7 bits per caràcter i només té en compte els caràcters anglesos. | ||
+ | ::- UNICODE: 16 bits per caràcter i codifica els caràcters de totes les llengües. | ||
+ | |||
+ | :* Funcions per veure els codis: | ||
+ | <source lang = "python"> | ||
+ | >>>ord('A') | ||
+ | 65 | ||
+ | >>>ord('a') | ||
+ | 97 | ||
+ | >>>chr(65) | ||
+ | 'A' | ||
+ | >>>chr(97) | ||
+ | 'a' | ||
+ | </source> | ||
+ | ::- Comparar lexicogràficament | ||
+ | <source lang = "python"> | ||
+ | >>>'Hola' > 'hola' | ||
+ | False | ||
+ | >>>'uno' > 'dos' | ||
+ | True | ||
+ | </source> | ||
+ | |||
+ | ===Funcions=== | ||
+ | |||
+ | ::- '''len(cadena)''': ens diu la mida en caràcters d'una cadena (-1 si no la troba). | ||
+ | <source lang="python"> | ||
+ | >>> len("Python3") | ||
+ | 7 | ||
+ | </source> | ||
+ | |||
+ | ===Mètodes=== | ||
+ | |||
+ | ::- '''startswith(cadena) i endswith(cadena)''': indiquen si la cadena comença o acaba amb per la cadena pasada com a argument. | ||
+ | <source lang="python"> | ||
+ | >>> cad = "python3 mètodes" | ||
+ | >>> cad.startswith("python3") | ||
+ | True | ||
+ | >>> cad.endswith("mètodes") | ||
+ | True | ||
+ | >>> cad.endswith("metodes") | ||
+ | False | ||
+ | </source> | ||
+ | |||
+ | ::- '''find(cadena,inici,fin)''': ens diu la posició on comença una cadena (o caràcter) en un altra cadena. | ||
+ | <source lang="python"> | ||
+ | >>> frase = "Els millors somriures són els que ningú entén" | ||
+ | >>> frase.find("somriures") | ||
+ | 12 | ||
+ | >>> frase = "Els millors somriures són els que ningú entén" | ||
+ | >>> frase.find("plors") | ||
+ | -1 | ||
+ | </source> | ||
+ | |||
+ | ::Pot tenir fins a tres paràmetres: cadena.find(subcadena, inici, fin) | ||
+ | |||
+ | {|border="2" cellpadding="4" cellspacing="0" style="margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;" | ||
+ | ! align="left" width="50 px" style="background:Lavender; color:Black"|Paràmetre | ||
+ | ! align="left" width="50 px" style="background:Lavender; color:Black"|Obligatori | ||
+ | ! align="left" width="480 px" style="background:Lavender; color:Black"|Descripció | ||
+ | |- | ||
+ | |subcadena||Sí||La subcadena (o caràcter a buscar) | ||
+ | |- | ||
+ | |inici||No||En quina posició començar la búsqueda (0 per defecte) | ||
+ | |- | ||
+ | |fin||No||En quina posició finalitzar la búsqueda (darrer caràcter per defecte) | ||
+ | |} | ||
+ | |||
+ | ::- '''split(caràcter)''': permet separar una cadena en diferents parts, indicant el caràcter separador. | ||
+ | <source lang="python"> | ||
+ | >>> cadena = "De les nits més fosques neixen les albes més lluminoses" | ||
+ | >>> cadena.split() | ||
+ | ['De', 'les', 'nits', 'més', 'fosques', 'neixen', 'les', 'albes', 'més', 'lluminoses'] # Llista de strings | ||
+ | </source> | ||
+ | :Per defecte el caràcter separador és un blanc però es pot especificar qualsevol altre: | ||
+ | <source lang="python"> | ||
+ | >>> numcad = "22.244.567" | ||
+ | >>> numcad.split('.') | ||
+ | ['22', '244', '567'] # Llista de strings | ||
+ | </source> | ||
+ | ::- '''join(llista)''': s'utilitza per convertir una llista en una cadena separant cada element de la llista pel caràcter indicat. | ||
+ | <source lang="python"> | ||
+ | >>> paraules = ['Qui', 'té', 'la', 'seva', 'pròpia', 'llum', 'incomoda', 'qui', 'està', 'a', 'les', 'fosques'] | ||
+ | >>> " ".join(paraules) # l'espai farà de separador | ||
+ | 'Qui té la seva pròpia llum incomoda qui està a les fosques' | ||
+ | </source> | ||
+ | ::- '''strip(cadena)''': Elimina els caràcters indicats de l'inici i del final de la cadena, o els espais en blanc si no s'indiquen caràcters específics. | ||
+ | <source lang="python"> | ||
+ | >>> "Qui dia passa any empeny".strip('Qui') | ||
+ | ' dia passa any empeny' | ||
+ | >>> "Qui dia passa any empeny".strip('ny') | ||
+ | 'Qui dia passa any empe' | ||
+ | </source> | ||
+ | ::- '''upper()''': Converteix la cadena a majúscules. | ||
+ | <source lang="python"> | ||
+ | >>> "Python3".upper() | ||
+ | 'PYTHON3' | ||
+ | </source> | ||
+ | ::- '''lower()''': Converteix la cadena a minúscules. | ||
+ | <source lang="python"> | ||
+ | >>> "Python3".lower() | ||
+ | 'python3' | ||
+ | </source> | ||
+ | ::- '''islower()''': True si tots els caràcters de la cadena estan en minúscules (False en cas contrari). | ||
+ | <source lang="python"> | ||
+ | >>> "Python3".islower() | ||
+ | False | ||
+ | >>> "python3".islower() | ||
+ | True | ||
+ | </source> | ||
+ | ::- '''isupper()''': True si tots els caràcters de la cadena estan en majúscules (False en cas contrari). | ||
+ | <source lang="python"> | ||
+ | >>> "Python3".isupper() | ||
+ | False | ||
+ | >>> "PYTHON3".isupper() | ||
+ | True | ||
+ | </source> | ||
+ | ::- '''isalpha()''': True si tots els caràcters de la cadena són lletres (False en cas contrari). | ||
+ | <source lang="python"> | ||
+ | >>> "Python3".isalpha() | ||
+ | False | ||
+ | >>> "Python".isalpha() | ||
+ | True | ||
+ | </source> | ||
+ | |||
+ | ===Executar programes amb arguments=== | ||
+ | |||
+ | :* Des de la línia de comandes es pot executar un programa amb arguments separant-los amb espais. | ||
+ | |||
+ | :* Els arguments estaran accessibles amb la llista de strings argv del mòdul estàndard sys. | ||
+ | |||
+ | :* El primer argument sys.argv[0], contindrà el nom del programa. | ||
+ | |||
+ | Si creamos un programa llamado '''arguments.py''' con el siguiente contenido: | ||
− | <source lang = " | + | <source lang = "python"> |
− | + | import sys | |
− | + | if(len(sys.argv) == 3): | |
+ | print ("Nom del programa: ", sys.argv[0]) | ||
+ | print ("Primer argument: ", sys.argv[1]) | ||
+ | print ("Segon argument:", sys.argv[2]) | ||
+ | else: | ||
+ | print ("El programa requereix 2 arguments") | ||
</source> | </source> | ||
+ | |||
+ | |||
+ | :* Execució del programa: '''python3 arguments.py argument1 argument2''' | ||
==Col·leccions de dades== | ==Col·leccions de dades== | ||
+ | |||
+ | :*Les col·leccions de dades poden emmagatzemar un conjunt de valors, normalment, que tenen relació entre ells. | ||
+ | :*Són les següents: | ||
+ | |||
+ | :::Llistes | ||
+ | :::Diccionaris | ||
+ | :::Tuples | ||
===Llistes=== | ===Llistes=== | ||
+ | |||
+ | :*Una llista és una seqüència ordenada d'elements. | ||
+ | |||
+ | :*En una llista es poden afegir i/o eliminar elements. | ||
+ | |||
+ | :*Una llista pot contenir elements del mateix tipus o de diferents tipus. | ||
+ | <source lang="python"> | ||
+ | ["Maria", "Pere", "Carles", "Sofia", "Raquel", "Joan"] # Llista de noms | ||
+ | |||
+ | [0, 5, "Bé", "Notable", "A+", "B", True, False] # Llista amb elements de diferents tipus | ||
+ | </source> | ||
+ | :*Es pot accedir als elements d'una llista atenen al seu índex. | ||
+ | <source lang="python"> | ||
+ | >>> llistaNoms =["Maria", "Pere", "Carles", "Sofia", "Raquel", "Joan"] | ||
+ | >>> llistaNoms[0] | ||
+ | 'Maria' | ||
+ | >>> llistaNoms[5] | ||
+ | 'Joan' | ||
+ | </source> | ||
+ | |||
+ | ====Operacions==== | ||
+ | <source lang="python"> | ||
+ | >>> llistaNoms =["Maria", "Pere", "Carles", "Sofia", "Raquel", "Joan"] | ||
+ | </source> | ||
+ | ::'''- element in llista''': retorna una valor booleà en funció de si l'element és a la llista o no. | ||
+ | <source lang="python"> | ||
+ | >>> "Raquel" in llistaNoms | ||
+ | True | ||
+ | >>> "Ricard" in llistaNoms | ||
+ | False | ||
+ | </source> | ||
+ | ::'''- len''': ens diu el nombre d'elements de la llista. | ||
+ | <source lang="python"> | ||
+ | >>> len(llistaNoms) | ||
+ | 6 | ||
+ | </source> | ||
+ | ::'''- Recorregut d'una llista''' | ||
+ | <source lang="python"> | ||
+ | >>> llistaNums = [1, 2, 3, 4] | ||
+ | >>> suma = 0 | ||
+ | >>> for num in llistaNums: | ||
+ | ... suma += num | ||
+ | ... | ||
+ | >>> suma | ||
+ | 10 | ||
+ | </source> | ||
+ | <source lang="python"> | ||
+ | >>> llistaNums = [1, 2, 3, 4] | ||
+ | >>> for num in reversed(llistaNums) : # a l'inrevés | ||
+ | ... num | ||
+ | ... | ||
+ | 4 | ||
+ | 3 | ||
+ | 2 | ||
+ | 1 | ||
+ | </source> | ||
+ | ::'''- Suma dels elements d'una llista''' | ||
+ | <source lang="python"> | ||
+ | >>> llistaNums = [1, 2, 3, 4] | ||
+ | >>> sum(llistaNums) | ||
+ | 10 | ||
+ | </source> | ||
+ | |||
+ | |||
+ | ::'''- str(): '''Mostrar el contingut de la llista com un String des d'un programa | ||
+ | <source lang="python"> | ||
+ | print("Contingut llista: " + Str(llistaNoms)) | ||
+ | |||
+ | ['Maria', 'Pere', 'Carles', 'Sofia', 'Raquel', 'Joan'] | ||
+ | </source> | ||
+ | |||
+ | ====Mètodes==== | ||
+ | <source lang="python"> | ||
+ | >>> llista = [1, 2, 3, 4, 5, 4, 2, 4, 3, 2, 1] | ||
+ | </source> | ||
+ | ::'''- append(element)''': afegeix un element al final de la llista. | ||
+ | <source lang="python"> | ||
+ | >>> llista.append(6) | ||
+ | >>> llista | ||
+ | [1, 2, 3, 4, 5, 4, 2, 4, 3, 2, 1, 6] | ||
+ | </source> | ||
+ | ::'''- count(element)''': retorna el nombre de vegades que apareix element. | ||
+ | <source lang="python"> | ||
+ | >>> llista.count(4) | ||
+ | 3 | ||
+ | </source> | ||
+ | ::'''- sort()''': ordena els elements. | ||
+ | <source lang="python"> | ||
+ | >>> llista.sort() | ||
+ | >>> llista | ||
+ | [1, 1, 2, 2, 2, 3, 3, 4, 4, 4, 5, 6] | ||
+ | </source> | ||
+ | ::'''- reverse()''': inverteix la llista. | ||
+ | <source lang="python"> | ||
+ | >>> llista.reverse() | ||
+ | >>> llista | ||
+ | [6, 5, 4, 4, 4, 3, 3, 2, 2, 2, 1, 1] | ||
+ | </source> | ||
+ | ::'''- index(element)''': retorna l'índex del primer element igual a element. | ||
+ | <source lang="python"> | ||
+ | >>> llista.index(4) | ||
+ | 2 | ||
+ | </source> | ||
+ | ::'''- remove(element)''': elimina la primera ocurrència de element. | ||
+ | <source lang="python"> | ||
+ | >>> llista.remove(4) | ||
+ | >>> llista | ||
+ | [6, 5, 4, 4, 3, 3, 2, 2, 2, 1, 1] | ||
+ | </source> | ||
+ | ::'''- pop(index)''': elimina l'ièssim element de la llista i retorna el seu valor. | ||
+ | <source lang="python"> | ||
+ | >>> element=llista.pop(1) | ||
+ | >>> element | ||
+ | 5 | ||
+ | >>> llista | ||
+ | [6, 4, 4, 3, 3, 2, 2, 2, 1, 1] | ||
+ | >>> | ||
+ | </source> | ||
+ | ::- '''insert(index,element)''': afegeix l'element en la posició index de la llista i desplaça els elements posteriors. | ||
+ | <source lang="python"> | ||
+ | >>> llista.insert(7,10) | ||
+ | >>> llista | ||
+ | [6, 4, 4, 3, 3, 2, 2, 10, 2, 1, 1] | ||
+ | </source> | ||
+ | ::'''- clear()''': buida la llista de tots els elements. | ||
+ | <source lang="python"> | ||
+ | >>> llista.clear() | ||
+ | >>> llista | ||
+ | [] | ||
+ | </source> | ||
+ | ::'''- extend(llista)''': Uneix dues llistes. | ||
+ | <source lang="python"> | ||
+ | >>> llista1=["A", "B", "C"] | ||
+ | >>> llista2=[1, 5, 10] | ||
+ | >>> llista1.extend(llista2) | ||
+ | >>> llista1 | ||
+ | ['A', 'B', 'C', 1, 5, 10] | ||
+ | </source> | ||
+ | |||
+ | ====Llistes imbricades==== | ||
+ | |||
+ | :* Una llista imbricada és una llista que apareix com a element d’una altra llista. | ||
+ | |||
+ | <source lang="python"> | ||
+ | >>> llistaImbricada = ["Joan" ,[7563, True], "Maria", [5056, False]] | ||
+ | </source> | ||
+ | :* Obtenir un element d’una llista imbricada: | ||
+ | <source lang="python"> | ||
+ | # obtenin primer la llista imbricada: | ||
+ | >>> llistaImbricada = ["Joan" ,[7563, True], "Maria", [5056, False]] | ||
+ | >>> dadesEmpleat = llistaImbricada[1] | ||
+ | >>> sou = dadesEmpleat[0] | ||
+ | >>> sou | ||
+ | 7563 | ||
+ | |||
+ | # directament: | ||
+ | >>> sou = llistaImbricada[3][0] | ||
+ | >>> sou | ||
+ | 5056 | ||
+ | </source> | ||
+ | |||
+ | :* matrius: per fer una matriu s'utilitzen llistes imbricades | ||
+ | <source lang="python"> | ||
+ | >>> matriu = [[1, 2, 3],['A','B','C'],[True, False, True]] | ||
+ | >>> matriu[0] | ||
+ | [1, 2, 3] | ||
+ | >>> matriu[1][1] | ||
+ | 'B' | ||
+ | </source> | ||
+ | |||
+ | :* Recorregut de les llistes d'una matriu: | ||
+ | <source lang="python"> | ||
+ | >>> for llista in matriu: | ||
+ | ... llista | ||
+ | ... | ||
+ | [1, 2, 3] | ||
+ | ['A', 'B', 'C'] | ||
+ | [True, False, True] | ||
+ | </source> | ||
+ | |||
+ | :* Recorregut dels elements d'una matriu: | ||
+ | <source lang="python"> | ||
+ | >>> for llista in matriu: | ||
+ | ... for element in llista: | ||
+ | ... element | ||
+ | ... | ||
+ | 1 | ||
+ | 2 | ||
+ | 3 | ||
+ | 'A' | ||
+ | 'B' | ||
+ | 'C' | ||
+ | True | ||
+ | False | ||
+ | True | ||
+ | </source> | ||
===Diccionaris=== | ===Diccionaris=== | ||
+ | |||
+ | :* Cada element d'un diccionari s'identifica per una clau i permet l'accés per aquesta clau. | ||
+ | <source lang = "python"> | ||
+ | >>> passwords = {'lmarin':'l@1n', 'dvidal':'d1@l'} | ||
+ | >>> passwords['dvidal'] # accés per clau | ||
+ | 'd1@l' | ||
+ | </source> | ||
+ | |||
+ | :* Permeten emmagatzemar valors enters, cadenes, llistes... | ||
+ | <source lang = "python"> | ||
+ | >>> inventari = {} # diccionari buit | ||
+ | o | ||
+ | >>> inventari = {'ordinadors' : 150, 'projectors' : 7, 'mvs': ['ubuntu_18.04', 'ubuntu_20.04', 'windows_10']} | ||
+ | >>> inventari['projectors'] # accés a un valor | ||
+ | 7 | ||
+ | >>> inventari['mvs'] # accés a la llista | ||
+ | ['ubuntu_18.04', 'ubuntu_20.04', 'windows_10'] | ||
+ | >>> inventari['mvs'][1] # accés a un valor de la llista | ||
+ | 'ubuntu_20.04' | ||
+ | </source> | ||
+ | |||
+ | ====Operacions==== | ||
+ | |||
+ | |||
+ | :* Nombre d'elements d'un diccionari | ||
+ | <source lang = "python"> | ||
+ | >>> len(inventari) | ||
+ | 3 | ||
+ | </source> | ||
+ | |||
+ | :* in: Existeix la clau? | ||
+ | <source lang = "python"> | ||
+ | >>> 'mvs' in inventari | ||
+ | True | ||
+ | </source> | ||
+ | |||
+ | :* Afegir i actualitzar elements: | ||
+ | <source lang = "python"> | ||
+ | >>> inventari['raspberry_pi_4'] = 12 # afegir | ||
+ | >>> inventari['projectors'] = 8 # actualitzar | ||
+ | >>> inventari | ||
+ | {'ordinadors': 150, 'projectors': 8, 'mvs': ['ubuntu_18.04', 'ubuntu_20.04', 'windows_10'], 'raspberry_pi_4': 12} | ||
+ | >>> | ||
+ | </source> | ||
+ | |||
+ | :* Recorregut del diccionari | ||
+ | <source lang = "python"> | ||
+ | >>> for clau in inventari: # retorna les claus | ||
+ | ... clau | ||
+ | ... | ||
+ | 'ordinadors' | ||
+ | 'projectors' | ||
+ | 'mvs' | ||
+ | 'raspberry_pi_4' | ||
+ | |||
+ | >>> for valor in inventari.values(): # retorna els valors | ||
+ | ... valor | ||
+ | ... | ||
+ | 150 | ||
+ | 8 | ||
+ | ['ubuntu_18.04', 'ubuntu_20.04', 'windows_10'] | ||
+ | 12 | ||
+ | |||
+ | >>> for clau, valor in inventari.items(): # retorna les claus i els seus valors | ||
+ | ... clau, valor | ||
+ | ... | ||
+ | ('ordinadors', 150) | ||
+ | ('projectors', 8) | ||
+ | ('mvs', ['ubuntu_18.04', 'ubuntu_20.04', 'windows_10']) | ||
+ | ('raspberry_pi_4', 12) | ||
+ | </source> | ||
+ | |||
+ | ====Mètodes==== | ||
+ | |||
+ | :* '''- dict():''' crea un diccionari. | ||
+ | <source lang = "python"> | ||
+ | >>> aules = dict(ISO = 301, Informàtica = 204, Electrònica = 109) | ||
+ | >>> aules | ||
+ | {'ISO': 301, 'Informàtica': 204, 'Electrònica': 109} | ||
+ | </source> | ||
+ | |||
+ | :* '''copy():''' copia el diccionari. | ||
+ | <source lang = "python"> | ||
+ | >>> copy_aules = aules.copy() | ||
+ | >>> copy_aules | ||
+ | {'ISO': 301, 'Informàtica': 204, 'Electrònica': 109} | ||
+ | </source> | ||
+ | |||
+ | :* '''- fromkeys():''' rep un element iterable (cadena, llista o tupla) i un valor i retorna un diccionari combinant cada component de l'element iteratiu amb el valor. | ||
+ | <source lang = "python"> | ||
+ | >>> comptador = dict.fromkeys('ABCD',1) | ||
+ | >>> comptador | ||
+ | {'A': 1, 'B': 1, 'C': 1, 'D': 1} | ||
+ | </source> | ||
+ | |||
+ | :* '''- zip():''' rep dos elements iterables (cadenes, llistes o tuples) amb el mateix números d'elements i retorna un diccionari combinant cada component de cada element segons la posició que ocupa. | ||
+ | <source lang = "python"> | ||
+ | >>> resultat = dict(zip(['Joan','Maria','Pau'],[10,9,9])) | ||
+ | >>> resultat | ||
+ | {'Joan': 10, 'Maria': 9, 'Pau': 9} | ||
+ | </source> | ||
+ | |||
+ | :* '''- clear():''' buida el diccionari de tots els seus elements. | ||
+ | <source lang = "python"> | ||
+ | >>> resultat.clear() | ||
+ | >>> resultat | ||
+ | {} | ||
+ | </source> | ||
+ | |||
+ | :* '''- items():''' retorna una llista amb totes les tuples (clau, valor). | ||
+ | |||
+ | :* '''- keys():''' retorna una llista amb totes les claus. | ||
+ | |||
+ | :* '''- values():''' retorna una llista amb tots els valors. | ||
+ | <source lang = "python"> | ||
+ | >>> inventari = {'ordinadors' : 150, 'projectors' : 7, 'mvs' : ['ubuntu_18.04', 'ubuntu_20.04', 'windows_10'], 'raspberry_pi_4' : 12} | ||
+ | |||
+ | >>> inventari.items() | ||
+ | dict_items([('ordinadors', 150), ('projectors', 8), ('mvs', ['ubuntu_18.04', 'ubuntu_20.04', 'windows_10']), ('raspberry_pi_4', 12)]) | ||
+ | |||
+ | >>> inventari.keys() | ||
+ | dict_keys(['ordinadors', 'projectors', 'mvs', 'raspberry_pi_4']) | ||
+ | |||
+ | >>> inventari.values() | ||
+ | dict_values([150, 8, ['ubuntu_18.04', 'ubuntu_20.04', 'windows_10'], 12]) | ||
+ | </source> | ||
+ | |||
+ | :* '''- get():''' rep una clau i retorna el valor associat (res si no existeix). | ||
+ | <source lang = "python"> | ||
+ | >>> inventari.get('raspberry_pi_4') | ||
+ | 12 | ||
+ | </source> | ||
+ | |||
+ | :* '''- pop():''' rep una clau, l'elimina i retorna el valor (error! si no existeix). | ||
+ | <source lang = "python"> | ||
+ | >>> inventari.pop('projectors') # elimina l'element projectors | ||
+ | 8 | ||
+ | >>> inventari | ||
+ | {'ordinadors': 150, 'mvs': ['ubuntu_18.04', 'ubuntu_20.04', 'windows_10'], 'raspberry_pi_4': 12} | ||
+ | |||
+ | >>> inventari.pop('mv') # error! la clau 'mv' no existeix | ||
+ | Traceback (most recent call last): | ||
+ | File "<stdin>", line 1, in <module> | ||
+ | KeyError: 'mv' | ||
+ | </source> | ||
+ | |||
+ | :* '''- setdefault():''' pot funcionar com a get, o també pot afegir un nou element. | ||
+ | <source lang = "python"> | ||
+ | >>> inventari.setdefault('ordinadors') # com get() | ||
+ | 150 | ||
+ | >>> inventari.setdefault('impressores', 7) # afegir un nou element | ||
+ | 7 | ||
+ | >>> inventari | ||
+ | {'ordinadors': 150, 'mvs': ['ubuntu_18.04', 'ubuntu_20.04', 'windows_10'], 'raspberry_pi_4': 12, 'impressores': 7} | ||
+ | </source> | ||
+ | |||
+ | :* '''- update():''' rep com a paràmetre un diccionari: les claus coincidents, s'actualitzen els valors, la resta s'agreguen (clau, valor). | ||
+ | <source lang = "python"> | ||
+ | >>> act_inventari = {'ordinadors' : 200, 'raspberry_pi_4' : 10, 'scaners' : 5} | ||
+ | >>> inventari.update(act_inventari) | ||
+ | >>> inventari | ||
+ | {'ordinadors': 200, 'mvs': ['ubuntu_18.04', 'ubuntu_20.04', 'windows_10'], 'raspberry_pi_4': 10, 'impressores': 7, 'scaners': 5} | ||
+ | </source> | ||
===Tuples=== | ===Tuples=== | ||
+ | |||
+ | :* Semblant a les llistes però '''immutables'''. | ||
+ | <source lang = "python"> | ||
+ | >>> dies = ('dilluns', 'dimarts', 'dimecres', 'dijous', 'divendres', ['dissabte', 'diumenge']) | ||
+ | >>> dies | ||
+ | ('dilluns', 'dimarts', 'dimecres', 'dijous', 'divendres', ['dissabte', 'diumenge']) | ||
+ | </source> | ||
+ | |||
+ | ====Operacions==== | ||
+ | https://www.w3resource.com/python-exercises/tuple/ | ||
+ | |||
+ | :* Indexació i slicing | ||
+ | <source lang = "python"> | ||
+ | >>> dies[0] | ||
+ | 'dilluns' | ||
+ | >>> dies[-1] | ||
+ | ['dissabte', 'diumenge'] | ||
+ | >>> dies[2:4] | ||
+ | ('dimecres', 'dijous') | ||
+ | >>> dies[2:-1] | ||
+ | ('dimecres', 'dijous', 'divendres') | ||
+ | </source> | ||
+ | |||
+ | :* Element en tupla? | ||
+ | <source lang = "python"> | ||
+ | >>> 'dimecres' in dies | ||
+ | True | ||
+ | >>> 'gener' in dies | ||
+ | False | ||
+ | </source> | ||
+ | |||
+ | :* '''-len():''' mida de la tupla o de l'element | ||
+ | <source lang = "python"> | ||
+ | >>> len(dies) # mida de la tupla (quants elements?) | ||
+ | 6 | ||
+ | >>> len(dies[4]) # mida de l'element (cadena) | ||
+ | 9 | ||
+ | >>> len(dies[5]) # mida de la llista | ||
+ | 2 | ||
+ | </source> | ||
+ | |||
+ | :* Tupla buida | ||
+ | <source lang = "python"> | ||
+ | >>> tup = () | ||
+ | >>> tup | ||
+ | () | ||
+ | >>> tupla = tuple() | ||
+ | >>> tupla | ||
+ | () | ||
+ | </source> | ||
+ | |||
+ | :* assignació multiple | ||
+ | <source lang = "python"> | ||
+ | >>> tupla = 2, 2, 3 | ||
+ | >>> tupla | ||
+ | (2, 2, 3) | ||
+ | >>> num1, num2, num3 = tupla | ||
+ | >>> num1 + num2 + num3 | ||
+ | 7 | ||
+ | >>> num1, num2, num3, num4 = tupla | ||
+ | Traceback (most recent call last): | ||
+ | File "<stdin>", line 1, in <module> | ||
+ | ValueError: need more than 3 values to unpack | ||
+ | </source> | ||
+ | |||
+ | :* afegir elements a la tupla | ||
+ | <source lang = "python"> | ||
+ | >>> tupla = (2, 4, 6, 8) | ||
+ | >>> tupla = tupla + (10,) # No es pot fer amb cadenes | ||
+ | >>> tupla | ||
+ | (2, 4, 6, 8, 10) | ||
+ | >>> tupla = tupla[:3] + (12, 14, 16) | ||
+ | >>> tupla | ||
+ | (2, 4, 6, 12, 14, 16) | ||
+ | </source> | ||
+ | |||
+ | :* convertir tupla a llista i a l'inrevés | ||
+ | <source lang = "python"> | ||
+ | >>> llista = list(tupla) | ||
+ | >>> llista | ||
+ | [2, 4, 6, 12, 14, 16] | ||
+ | >>> llista.append(18) | ||
+ | >>> llista | ||
+ | [2, 4, 6, 12, 14, 16, 18] | ||
+ | >>> tupla = tuple(llista) | ||
+ | >>> tupla | ||
+ | (2, 4, 6, 12, 14, 16, 18) | ||
+ | </source> | ||
+ | |||
+ | :* convertir tupla a cadena | ||
+ | <source lang = "python"> | ||
+ | >>> tupla = ('p', 'y', 't', 'h', 'o', 'n') | ||
+ | >>> tupla | ||
+ | ('p', 'y', 't', 'h', 'o', 'n') | ||
+ | >>> cadena = ''.join(tupla) | ||
+ | >>> cadena | ||
+ | 'python' | ||
+ | </source> | ||
+ | |||
+ | ====Mètodes==== | ||
+ | |||
+ | :* -index(): si troba l'element, ens diu la seva posició i si no el troba error! | ||
+ | <source lang = "python"> | ||
+ | >>> dies.index('dimarts') | ||
+ | 1 | ||
+ | >>> dies.index('gener') | ||
+ | Traceback (most recent call last): | ||
+ | File "<stdin>", line 1, in <module> | ||
+ | ValueError: tuple.index(x): x not in tuple | ||
+ | </source> | ||
+ | |||
+ | :* -count(): retorna nombre de vegades que apareix l'element en la tupla. | ||
+ | <source lang = "python"> | ||
+ | >>> dies.count('dijous') | ||
+ | 1 | ||
+ | >>> dies.count('febrer') | ||
+ | 0 | ||
+ | >>> dies[5].count('dissabte') # per comptar dins de la llista | ||
+ | 1 | ||
+ | </source> | ||
+ | |||
+ | ==Classes== | ||
+ | [https://programacion.net/articulo/como_funcionan_las_clases_y_objetos_en_python_1505] | ||
+ | |||
+ | Python permet crear els teus propis tipus de dades mitjançant classes i objectes. | ||
+ | |||
+ | Una classe es un tipus de dada definit pel programador, i per crear objectes d'aquesta classe cal fer instàncies a la mateixa. | ||
+ | |||
+ | Exemple classe client: | ||
+ | <source lang="python"> | ||
+ | class Client: | ||
+ | nom ='' | ||
+ | nif = '' | ||
+ | adreça = '' | ||
+ | numCompte = 0 | ||
+ | saldo = 0 | ||
+ | </source> | ||
+ | Per poder utilitzar aquesta classe hem de fer una instància: | ||
+ | <source lang="python"> | ||
+ | nouClient = Client() | ||
+ | </source> | ||
+ | Podem identificar a quina classe pertany nouClient i quin espai de memòria ocupa: | ||
+ | <source lang="python"> | ||
+ | print(nouClient) | ||
+ | |||
+ | <__main__.Client object at 0x7eff7844e978> | ||
+ | </source> | ||
+ | Per accedir els camps: | ||
+ | <source lang="python"> | ||
+ | nouClient.nom = "Albert Pérez" | ||
+ | nouClient.nif = ”32435465H” | ||
+ | nouClient.adreça= ”Rue del Percebe, 13” | ||
+ | nouClient.numCompte= 34232312; | ||
+ | nouClient.saldo= 123.45 | ||
+ | </source> | ||
+ | |||
+ | Una forma elegant de inicialitzar la variable (objecte) és utilitzant el mètode inicialitzador: | ||
+ | |||
+ | <source lang="python"> | ||
+ | class Client: | ||
+ | def __init__(self, nomcli, nifcli, adrcli, comptecli, saldocli): | ||
+ | self.nom = nomcli | ||
+ | self.nif = nifcli | ||
+ | self.adreça = adrcli | ||
+ | self.numCompte = comptecli | ||
+ | self.saldo = saldocli | ||
+ | |||
+ | nouClient = Client("Albert Pérez", "32435465H", "Rue del Percebe, 13", 34232312, 123.45) | ||
+ | print(nouClient.adreça) | ||
+ | </source> | ||
+ | |||
+ | Llistes de clients. Omplir una llista amb quatre clients i a continuació mostreu les dades dels quatre clients: | ||
+ | <source lang="python"> | ||
+ | class Client: | ||
+ | nom ='' | ||
+ | nif = '' | ||
+ | adreça = '' | ||
+ | numCompte = 0 | ||
+ | saldo = 0 | ||
+ | NUMCLIENTS = 4 | ||
+ | llCli = [] | ||
+ | for i in range(NUMCLIENTS): | ||
+ | print("Introdueix les dades del client %d" %(i+1)) | ||
+ | nouClient = Client() | ||
+ | nouClient.nom= input("Nom: ") | ||
+ | nouClient.nif= input("nif: ") | ||
+ | nouClient.adreça= input("adreça: ") | ||
+ | nouClient.numCompte= input("numCompte: ") | ||
+ | nouClient.saldo= input("saldo: ") | ||
+ | llCli.append(nouClient) | ||
+ | print("") | ||
+ | print("Dades de tots els clients ") | ||
+ | print("") | ||
+ | for i in range(len(llCli)): | ||
+ | print("Client %d" %(i+1)) | ||
+ | print(" Nom: " + llCli[i].nom ) | ||
+ | print(" Nif: " + llCli[i].nif ) | ||
+ | print(" Adreça: " + llCli[i].adreça ) | ||
+ | print(" Número de compte: " + llCli[i].numCompte ) | ||
+ | print(" Saldo: " + llCli[i].saldo ) | ||
+ | </source> | ||
+ | |||
+ | ==Referències== | ||
+ | <!-- | ||
+ | Cada una de les dades que creem té una referència que podriem entendre com l'adreça de memòria on es pot localitzar. | ||
+ | |||
+ | Si executem: | ||
+ | |||
+ | a = “banana” | ||
+ | b = “banana” | ||
+ | |||
+ | a i b són dos noms diferents amb el mateix valor, però és la "mateixa" cadena de valors o guardem dues vegades a memòria la mateixa cadena de caràcters? | ||
+ | |||
+ | Cada objecte té un identificador únic, que podem obtenir amb la funció id: | ||
+ | |||
+ | id(a) | ||
+ | > 135044008 | ||
+ | id(b) | ||
+ | > 135044008 | ||
+ | |||
+ | Per tant, en aquest cas Python ha creat una estructura banana i les dues variables en fan referència. | ||
+ | |||
+ | Les llistes funcionen diferent (a i b tenen el mateix valor però no fan referència al mateix objecte): | ||
+ | |||
+ | a = [1,2,3] | ||
+ | b = [1,2,3] | ||
+ | print(id(a),id(b)) | ||
+ | > 238870816, 245363636 | ||
+ | |||
+ | Com que les variables fan referència a objectes, si una variable fa referència a una altra tenim: | ||
+ | |||
+ | a = [1,2,3] | ||
+ | b = a | ||
+ | print(id(a),id(b)) | ||
+ | > 238870856, 238870856 | ||
+ | |||
+ | Com que la llista té dos noms, direm que té un àlies. Això és perillós per objectes mutables!!! Pels immutables no hi ha problema. | ||
+ | |||
+ | El clonatge és una tècnica per la que fem una còpia de l’objecte en si, no de la referència. Pel cas de les llistes ho podem fer així: | ||
+ | |||
+ | a = [1,2,3] | ||
+ | b = a[:] | ||
+ | b[0] = 5 | ||
+ | print(a,b) | ||
+ | > [1,2,3] [5,2,3] | ||
+ | |||
+ | Si passem una llista com a argument d’una funció, passem una referència, no una còpia. Considerem aquesta funció: | ||
+ | |||
+ | def head(l): | ||
+ | return(l[0]) | ||
+ | a = [1,2,3] | ||
+ | head(a) | ||
+ | > 1 | ||
+ | |||
+ | Considerem ara aquesta altra funció: | ||
+ | |||
+ | def deleteHead(l): | ||
+ | del l[0] | ||
+ | return l | ||
+ | a = [1,2,3] | ||
+ | deleteHead(a) | ||
+ | > [2,3] | ||
+ | |||
+ | Si retornem una llista també retornem una referència: | ||
+ | |||
+ | def tail(l): | ||
+ | return l[1:] | ||
+ | a = [1,2,3] | ||
+ | rest = tail(a) | ||
+ | print(rest, a) | ||
+ | > [2,3] [1,2,3] | ||
+ | |||
+ | Com que la llista s’ha creat amb : és una nova llista. Qualsevol modificació de rest no té efectes en a. | ||
+ | |||
+ | En canvi en el següent cas: | ||
+ | |||
+ | numbers = [1,2,3] | ||
+ | def test(l): | ||
+ | l.reverse() | ||
+ | print(numbers) | ||
+ | > [3,2,1] | ||
+ | |||
+ | Exemple: Estadística de les paraules d'un document? | ||
+ | |||
+ | def numW(): | ||
+ | ''' | ||
+ | Aquest programa calcula l'estadística de les paraules d'un document | ||
+ | ''' | ||
+ | fname = input("Nom del document") | ||
+ | text = open(fname, 'r').read() | ||
+ | text = text.lower() | ||
+ | for ch in '!"·$%&/()=?¿|@#¢∞¬÷÷“”≠¡{}[]+-,.;:-_><': | ||
+ | text.replace(ch,' ') | ||
+ | words = text.split() | ||
+ | counts = {} | ||
+ | for w in words: | ||
+ | if w in counts: | ||
+ | counts[w] = counts[w] + 1 | ||
+ | else: | ||
+ | counts[w] = 1 | ||
+ | n = eval(input("Quantes paraules vols analitzar (les més freqüents)?")) | ||
+ | lfreq = [] | ||
+ | for w in counts: | ||
+ | lfreq.append((counts[w],w)) | ||
+ | print(lfreq) | ||
+ | lfreq.sort(reverse=True) | ||
+ | print(lfreq) | ||
+ | for i in range(min(n,len(lfreq))-1): | ||
+ | print(lfreq[i][1], lfreq[i][0]) | ||
+ | --> |
Revisió de 12:52, 15 març 2022
Cadenes
https://j2logo.com/ejercicios-python/#retoSemanal
- Una cadena és una seqüència de caràcters (String).
- Es poden assignar directament a variables o llegir des de teclat.
>>> nom = "Joan"
>>> cognoms = input("Introdueix els teus cognoms")
- A cada caràcter de la cadena li correspon una posició:
Hola Joan 012345678
- Podem accedir als caràcters de la cadena indicant la posició i a subcadenes indicant un rang (slicing).
>>> salutacio = "Hola Joan"
>>> salutacio[3] # mostra el caràcter de la posició 3
'a'
>>> salutacio[-3] # mostra el caràcter de la posició 3 comptant des del final de la cadena
'o'
>>> salutacio[2:4] # mostra els caràcters de les posicions 2 i 3
'la'
>>> salutacio[:4] # mostra els caràcters de les posicions 0, 1, 2 i 3
'Hola'
>>> salutacio[5:] # mostra els caràcters des de la posició 5 fins al final
'Joan'
>>> salutacio[:-2] # mostra tota la cadena menys els dos últims caràcters
'Hola Jo'
Operacions amb cadenes
- - Concatenar
>>> nomComplert = "Joan" + "Climent"
>>> print(nomComplert)
JoanCliment
- - Repetir
>>> print('Hola' * 3)
HolaHolaHola
- Codificacions dels caràcters:
- - ASCII: 7 bits per caràcter i només té en compte els caràcters anglesos.
- - UNICODE: 16 bits per caràcter i codifica els caràcters de totes les llengües.
- Funcions per veure els codis:
>>>ord('A')
65
>>>ord('a')
97
>>>chr(65)
'A'
>>>chr(97)
'a'
- - Comparar lexicogràficament
>>>'Hola' > 'hola'
False
>>>'uno' > 'dos'
True
Funcions
- - len(cadena): ens diu la mida en caràcters d'una cadena (-1 si no la troba).
>>> len("Python3")
7
Mètodes
- - startswith(cadena) i endswith(cadena): indiquen si la cadena comença o acaba amb per la cadena pasada com a argument.
>>> cad = "python3 mètodes"
>>> cad.startswith("python3")
True
>>> cad.endswith("mètodes")
True
>>> cad.endswith("metodes")
False
- - find(cadena,inici,fin): ens diu la posició on comença una cadena (o caràcter) en un altra cadena.
>>> frase = "Els millors somriures són els que ningú entén"
>>> frase.find("somriures")
12
>>> frase = "Els millors somriures són els que ningú entén"
>>> frase.find("plors")
-1
- Pot tenir fins a tres paràmetres: cadena.find(subcadena, inici, fin)
Paràmetre | Obligatori | Descripció |
---|---|---|
subcadena | Sí | La subcadena (o caràcter a buscar) |
inici | No | En quina posició començar la búsqueda (0 per defecte) |
fin | No | En quina posició finalitzar la búsqueda (darrer caràcter per defecte) |
- - split(caràcter): permet separar una cadena en diferents parts, indicant el caràcter separador.
>>> cadena = "De les nits més fosques neixen les albes més lluminoses"
>>> cadena.split()
['De', 'les', 'nits', 'més', 'fosques', 'neixen', 'les', 'albes', 'més', 'lluminoses'] # Llista de strings
- Per defecte el caràcter separador és un blanc però es pot especificar qualsevol altre:
>>> numcad = "22.244.567"
>>> numcad.split('.')
['22', '244', '567'] # Llista de strings
- - join(llista): s'utilitza per convertir una llista en una cadena separant cada element de la llista pel caràcter indicat.
>>> paraules = ['Qui', 'té', 'la', 'seva', 'pròpia', 'llum', 'incomoda', 'qui', 'està', 'a', 'les', 'fosques']
>>> " ".join(paraules) # l'espai farà de separador
'Qui té la seva pròpia llum incomoda qui està a les fosques'
- - strip(cadena): Elimina els caràcters indicats de l'inici i del final de la cadena, o els espais en blanc si no s'indiquen caràcters específics.
>>> "Qui dia passa any empeny".strip('Qui')
' dia passa any empeny'
>>> "Qui dia passa any empeny".strip('ny')
'Qui dia passa any empe'
- - upper(): Converteix la cadena a majúscules.
>>> "Python3".upper()
'PYTHON3'
- - lower(): Converteix la cadena a minúscules.
>>> "Python3".lower()
'python3'
- - islower(): True si tots els caràcters de la cadena estan en minúscules (False en cas contrari).
>>> "Python3".islower()
False
>>> "python3".islower()
True
- - isupper(): True si tots els caràcters de la cadena estan en majúscules (False en cas contrari).
>>> "Python3".isupper()
False
>>> "PYTHON3".isupper()
True
- - isalpha(): True si tots els caràcters de la cadena són lletres (False en cas contrari).
>>> "Python3".isalpha()
False
>>> "Python".isalpha()
True
Executar programes amb arguments
- Des de la línia de comandes es pot executar un programa amb arguments separant-los amb espais.
- Els arguments estaran accessibles amb la llista de strings argv del mòdul estàndard sys.
- El primer argument sys.argv[0], contindrà el nom del programa.
Si creamos un programa llamado arguments.py con el siguiente contenido:
import sys
if(len(sys.argv) == 3):
print ("Nom del programa: ", sys.argv[0])
print ("Primer argument: ", sys.argv[1])
print ("Segon argument:", sys.argv[2])
else:
print ("El programa requereix 2 arguments")
- Execució del programa: python3 arguments.py argument1 argument2
Col·leccions de dades
- Les col·leccions de dades poden emmagatzemar un conjunt de valors, normalment, que tenen relació entre ells.
- Són les següents:
- Llistes
- Diccionaris
- Tuples
Llistes
- Una llista és una seqüència ordenada d'elements.
- En una llista es poden afegir i/o eliminar elements.
- Una llista pot contenir elements del mateix tipus o de diferents tipus.
["Maria", "Pere", "Carles", "Sofia", "Raquel", "Joan"] # Llista de noms
[0, 5, "Bé", "Notable", "A+", "B", True, False] # Llista amb elements de diferents tipus
- Es pot accedir als elements d'una llista atenen al seu índex.
>>> llistaNoms =["Maria", "Pere", "Carles", "Sofia", "Raquel", "Joan"]
>>> llistaNoms[0]
'Maria'
>>> llistaNoms[5]
'Joan'
Operacions
>>> llistaNoms =["Maria", "Pere", "Carles", "Sofia", "Raquel", "Joan"]
- - element in llista: retorna una valor booleà en funció de si l'element és a la llista o no.
>>> "Raquel" in llistaNoms
True
>>> "Ricard" in llistaNoms
False
- - len: ens diu el nombre d'elements de la llista.
>>> len(llistaNoms)
6
- - Recorregut d'una llista
>>> llistaNums = [1, 2, 3, 4]
>>> suma = 0
>>> for num in llistaNums:
... suma += num
...
>>> suma
10
>>> llistaNums = [1, 2, 3, 4]
>>> for num in reversed(llistaNums) : # a l'inrevés
... num
...
4
3
2
1
- - Suma dels elements d'una llista
>>> llistaNums = [1, 2, 3, 4]
>>> sum(llistaNums)
10
- - str(): Mostrar el contingut de la llista com un String des d'un programa
print("Contingut llista: " + Str(llistaNoms))
['Maria', 'Pere', 'Carles', 'Sofia', 'Raquel', 'Joan']
Mètodes
>>> llista = [1, 2, 3, 4, 5, 4, 2, 4, 3, 2, 1]
- - append(element): afegeix un element al final de la llista.
>>> llista.append(6)
>>> llista
[1, 2, 3, 4, 5, 4, 2, 4, 3, 2, 1, 6]
- - count(element): retorna el nombre de vegades que apareix element.
>>> llista.count(4)
3
- - sort(): ordena els elements.
>>> llista.sort()
>>> llista
[1, 1, 2, 2, 2, 3, 3, 4, 4, 4, 5, 6]
- - reverse(): inverteix la llista.
>>> llista.reverse()
>>> llista
[6, 5, 4, 4, 4, 3, 3, 2, 2, 2, 1, 1]
- - index(element): retorna l'índex del primer element igual a element.
>>> llista.index(4)
2
- - remove(element): elimina la primera ocurrència de element.
>>> llista.remove(4)
>>> llista
[6, 5, 4, 4, 3, 3, 2, 2, 2, 1, 1]
- - pop(index): elimina l'ièssim element de la llista i retorna el seu valor.
>>> element=llista.pop(1)
>>> element
5
>>> llista
[6, 4, 4, 3, 3, 2, 2, 2, 1, 1]
>>>
- - insert(index,element): afegeix l'element en la posició index de la llista i desplaça els elements posteriors.
>>> llista.insert(7,10)
>>> llista
[6, 4, 4, 3, 3, 2, 2, 10, 2, 1, 1]
- - clear(): buida la llista de tots els elements.
>>> llista.clear()
>>> llista
[]
- - extend(llista): Uneix dues llistes.
>>> llista1=["A", "B", "C"]
>>> llista2=[1, 5, 10]
>>> llista1.extend(llista2)
>>> llista1
['A', 'B', 'C', 1, 5, 10]
Llistes imbricades
- Una llista imbricada és una llista que apareix com a element d’una altra llista.
>>> llistaImbricada = ["Joan" ,[7563, True], "Maria", [5056, False]]
- Obtenir un element d’una llista imbricada:
# obtenin primer la llista imbricada:
>>> llistaImbricada = ["Joan" ,[7563, True], "Maria", [5056, False]]
>>> dadesEmpleat = llistaImbricada[1]
>>> sou = dadesEmpleat[0]
>>> sou
7563
# directament:
>>> sou = llistaImbricada[3][0]
>>> sou
5056
- matrius: per fer una matriu s'utilitzen llistes imbricades
>>> matriu = [[1, 2, 3],['A','B','C'],[True, False, True]]
>>> matriu[0]
[1, 2, 3]
>>> matriu[1][1]
'B'
- Recorregut de les llistes d'una matriu:
>>> for llista in matriu:
... llista
...
[1, 2, 3]
['A', 'B', 'C']
[True, False, True]
- Recorregut dels elements d'una matriu:
>>> for llista in matriu:
... for element in llista:
... element
...
1
2
3
'A'
'B'
'C'
True
False
True
Diccionaris
- Cada element d'un diccionari s'identifica per una clau i permet l'accés per aquesta clau.
>>> passwords = {'lmarin':'l@1n', 'dvidal':'d1@l'}
>>> passwords['dvidal'] # accés per clau
'd1@l'
- Permeten emmagatzemar valors enters, cadenes, llistes...
>>> inventari = {} # diccionari buit
o
>>> inventari = {'ordinadors' : 150, 'projectors' : 7, 'mvs': ['ubuntu_18.04', 'ubuntu_20.04', 'windows_10']}
>>> inventari['projectors'] # accés a un valor
7
>>> inventari['mvs'] # accés a la llista
['ubuntu_18.04', 'ubuntu_20.04', 'windows_10']
>>> inventari['mvs'][1] # accés a un valor de la llista
'ubuntu_20.04'
Operacions
- Nombre d'elements d'un diccionari
>>> len(inventari)
3
- in: Existeix la clau?
>>> 'mvs' in inventari
True
- Afegir i actualitzar elements:
>>> inventari['raspberry_pi_4'] = 12 # afegir
>>> inventari['projectors'] = 8 # actualitzar
>>> inventari
{'ordinadors': 150, 'projectors': 8, 'mvs': ['ubuntu_18.04', 'ubuntu_20.04', 'windows_10'], 'raspberry_pi_4': 12}
>>>
- Recorregut del diccionari
>>> for clau in inventari: # retorna les claus
... clau
...
'ordinadors'
'projectors'
'mvs'
'raspberry_pi_4'
>>> for valor in inventari.values(): # retorna els valors
... valor
...
150
8
['ubuntu_18.04', 'ubuntu_20.04', 'windows_10']
12
>>> for clau, valor in inventari.items(): # retorna les claus i els seus valors
... clau, valor
...
('ordinadors', 150)
('projectors', 8)
('mvs', ['ubuntu_18.04', 'ubuntu_20.04', 'windows_10'])
('raspberry_pi_4', 12)
Mètodes
- - dict(): crea un diccionari.
>>> aules = dict(ISO = 301, Informàtica = 204, Electrònica = 109)
>>> aules
{'ISO': 301, 'Informàtica': 204, 'Electrònica': 109}
- copy(): copia el diccionari.
>>> copy_aules = aules.copy()
>>> copy_aules
{'ISO': 301, 'Informàtica': 204, 'Electrònica': 109}
- - fromkeys(): rep un element iterable (cadena, llista o tupla) i un valor i retorna un diccionari combinant cada component de l'element iteratiu amb el valor.
>>> comptador = dict.fromkeys('ABCD',1)
>>> comptador
{'A': 1, 'B': 1, 'C': 1, 'D': 1}
- - zip(): rep dos elements iterables (cadenes, llistes o tuples) amb el mateix números d'elements i retorna un diccionari combinant cada component de cada element segons la posició que ocupa.
>>> resultat = dict(zip(['Joan','Maria','Pau'],[10,9,9]))
>>> resultat
{'Joan': 10, 'Maria': 9, 'Pau': 9}
- - clear(): buida el diccionari de tots els seus elements.
>>> resultat.clear()
>>> resultat
{}
- - items(): retorna una llista amb totes les tuples (clau, valor).
- - keys(): retorna una llista amb totes les claus.
- - values(): retorna una llista amb tots els valors.
>>> inventari = {'ordinadors' : 150, 'projectors' : 7, 'mvs' : ['ubuntu_18.04', 'ubuntu_20.04', 'windows_10'], 'raspberry_pi_4' : 12}
>>> inventari.items()
dict_items([('ordinadors', 150), ('projectors', 8), ('mvs', ['ubuntu_18.04', 'ubuntu_20.04', 'windows_10']), ('raspberry_pi_4', 12)])
>>> inventari.keys()
dict_keys(['ordinadors', 'projectors', 'mvs', 'raspberry_pi_4'])
>>> inventari.values()
dict_values([150, 8, ['ubuntu_18.04', 'ubuntu_20.04', 'windows_10'], 12])
- - get(): rep una clau i retorna el valor associat (res si no existeix).
>>> inventari.get('raspberry_pi_4')
12
- - pop(): rep una clau, l'elimina i retorna el valor (error! si no existeix).
>>> inventari.pop('projectors') # elimina l'element projectors
8
>>> inventari
{'ordinadors': 150, 'mvs': ['ubuntu_18.04', 'ubuntu_20.04', 'windows_10'], 'raspberry_pi_4': 12}
>>> inventari.pop('mv') # error! la clau 'mv' no existeix
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'mv'
- - setdefault(): pot funcionar com a get, o també pot afegir un nou element.
>>> inventari.setdefault('ordinadors') # com get()
150
>>> inventari.setdefault('impressores', 7) # afegir un nou element
7
>>> inventari
{'ordinadors': 150, 'mvs': ['ubuntu_18.04', 'ubuntu_20.04', 'windows_10'], 'raspberry_pi_4': 12, 'impressores': 7}
- - update(): rep com a paràmetre un diccionari: les claus coincidents, s'actualitzen els valors, la resta s'agreguen (clau, valor).
>>> act_inventari = {'ordinadors' : 200, 'raspberry_pi_4' : 10, 'scaners' : 5}
>>> inventari.update(act_inventari)
>>> inventari
{'ordinadors': 200, 'mvs': ['ubuntu_18.04', 'ubuntu_20.04', 'windows_10'], 'raspberry_pi_4': 10, 'impressores': 7, 'scaners': 5}
Tuples
- Semblant a les llistes però immutables.
>>> dies = ('dilluns', 'dimarts', 'dimecres', 'dijous', 'divendres', ['dissabte', 'diumenge'])
>>> dies
('dilluns', 'dimarts', 'dimecres', 'dijous', 'divendres', ['dissabte', 'diumenge'])
Operacions
https://www.w3resource.com/python-exercises/tuple/
- Indexació i slicing
>>> dies[0]
'dilluns'
>>> dies[-1]
['dissabte', 'diumenge']
>>> dies[2:4]
('dimecres', 'dijous')
>>> dies[2:-1]
('dimecres', 'dijous', 'divendres')
- Element en tupla?
>>> 'dimecres' in dies
True
>>> 'gener' in dies
False
- -len(): mida de la tupla o de l'element
>>> len(dies) # mida de la tupla (quants elements?)
6
>>> len(dies[4]) # mida de l'element (cadena)
9
>>> len(dies[5]) # mida de la llista
2
- Tupla buida
>>> tup = ()
>>> tup
()
>>> tupla = tuple()
>>> tupla
()
- assignació multiple
>>> tupla = 2, 2, 3
>>> tupla
(2, 2, 3)
>>> num1, num2, num3 = tupla
>>> num1 + num2 + num3
7
>>> num1, num2, num3, num4 = tupla
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: need more than 3 values to unpack
- afegir elements a la tupla
>>> tupla = (2, 4, 6, 8)
>>> tupla = tupla + (10,) # No es pot fer amb cadenes
>>> tupla
(2, 4, 6, 8, 10)
>>> tupla = tupla[:3] + (12, 14, 16)
>>> tupla
(2, 4, 6, 12, 14, 16)
- convertir tupla a llista i a l'inrevés
>>> llista = list(tupla)
>>> llista
[2, 4, 6, 12, 14, 16]
>>> llista.append(18)
>>> llista
[2, 4, 6, 12, 14, 16, 18]
>>> tupla = tuple(llista)
>>> tupla
(2, 4, 6, 12, 14, 16, 18)
- convertir tupla a cadena
>>> tupla = ('p', 'y', 't', 'h', 'o', 'n')
>>> tupla
('p', 'y', 't', 'h', 'o', 'n')
>>> cadena = ''.join(tupla)
>>> cadena
'python'
Mètodes
- -index(): si troba l'element, ens diu la seva posició i si no el troba error!
>>> dies.index('dimarts')
1
>>> dies.index('gener')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: tuple.index(x): x not in tuple
- -count(): retorna nombre de vegades que apareix l'element en la tupla.
>>> dies.count('dijous')
1
>>> dies.count('febrer')
0
>>> dies[5].count('dissabte') # per comptar dins de la llista
1
Classes
Python permet crear els teus propis tipus de dades mitjançant classes i objectes.
Una classe es un tipus de dada definit pel programador, i per crear objectes d'aquesta classe cal fer instàncies a la mateixa.
Exemple classe client:
class Client:
nom =''
nif = ''
adreça = ''
numCompte = 0
saldo = 0
Per poder utilitzar aquesta classe hem de fer una instància:
nouClient = Client()
Podem identificar a quina classe pertany nouClient i quin espai de memòria ocupa:
print(nouClient)
<__main__.Client object at 0x7eff7844e978>
Per accedir els camps:
nouClient.nom = "Albert Pérez"
nouClient.nif = ”32435465H”
nouClient.adreça= ”Rue del Percebe, 13”
nouClient.numCompte= 34232312;
nouClient.saldo= 123.45
Una forma elegant de inicialitzar la variable (objecte) és utilitzant el mètode inicialitzador:
class Client:
def __init__(self, nomcli, nifcli, adrcli, comptecli, saldocli):
self.nom = nomcli
self.nif = nifcli
self.adreça = adrcli
self.numCompte = comptecli
self.saldo = saldocli
nouClient = Client("Albert Pérez", "32435465H", "Rue del Percebe, 13", 34232312, 123.45)
print(nouClient.adreça)
Llistes de clients. Omplir una llista amb quatre clients i a continuació mostreu les dades dels quatre clients:
class Client:
nom =''
nif = ''
adreça = ''
numCompte = 0
saldo = 0
NUMCLIENTS = 4
llCli = []
for i in range(NUMCLIENTS):
print("Introdueix les dades del client %d" %(i+1))
nouClient = Client()
nouClient.nom= input("Nom: ")
nouClient.nif= input("nif: ")
nouClient.adreça= input("adreça: ")
nouClient.numCompte= input("numCompte: ")
nouClient.saldo= input("saldo: ")
llCli.append(nouClient)
print("")
print("Dades de tots els clients ")
print("")
for i in range(len(llCli)):
print("Client %d" %(i+1))
print(" Nom: " + llCli[i].nom )
print(" Nif: " + llCli[i].nif )
print(" Adreça: " + llCli[i].adreça )
print(" Número de compte: " + llCli[i].numCompte )
print(" Saldo: " + llCli[i].saldo )