Diferència entre revisions de la pàgina «ASIX-M3-UF1-A4»

De wikiserver
Dreceres ràpides: navegació, cerca
(Llistes)
(Classes)
 
(Hi ha 76 revisions intermèdies del mateix usuari que no es mostren)
Línia 6: Línia 6:
  
 
<source lang = "python">
 
<source lang = "python">
>>> nom = Joan
+
>>> nom = "Joan"
  
 
>>> cognoms = input("Introdueix els teus cognoms")
 
>>> cognoms = input("Introdueix els teus cognoms")
Línia 31: Línia 31:
 
'Hola'
 
'Hola'
 
>>> salutacio[5:]  # mostra els caràcters des de la posició 5 fins al final  
 
>>> salutacio[5:]  # mostra els caràcters des de la posició 5 fins al final  
'Hola'
+
'Joan'
 
>>> salutacio[:-2]  # mostra tota la cadena menys els dos últims caràcters
 
>>> salutacio[:-2]  # mostra tota la cadena menys els dos últims caràcters
 
'Hola Jo'
 
'Hola Jo'
Línia 56: Línia 56:
  
 
:* Funcions per veure els codis:
 
:* Funcions per veure els codis:
<pre>
+
<source lang = "python">
 
>>>ord('A')
 
>>>ord('A')
 
65
 
65
Línia 65: Línia 65:
 
>>>chr(97)
 
>>>chr(97)
 
'a'
 
'a'
</pre>
+
</source>
 +
::- Comparar lexicogràficament
 +
<source lang = "python">
 +
>>>'Hola' > 'hola'
 +
False
 +
>>>'uno' > 'dos'
 +
True
 +
</source>
  
 
===Funcions===
 
===Funcions===
  
::- '''len''': ens diu la mida en caràcters d'una cadena (-1 si no la troba).
+
::- '''len(cadena)''': ens diu la mida en caràcters d'una cadena (-1 si no la troba).
<pre>
+
<source lang="python">
 
>>> len("Python3")
 
>>> len("Python3")
 
7
 
7
</pre>
+
</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''': ens diu la posició on comença una cadena (o caràcter) en un altra cadena.
+
::- '''find(cadena,inici,fin)''': ens diu la posició on comença una cadena (o caràcter) en un altra cadena.
<pre>
+
<source lang="python">
 
>>> frase = "Els millors somriures són els que ningú entén"
 
>>> frase = "Els millors somriures són els que ningú entén"
 
>>> frase.find("somriures")
 
>>> frase.find("somriures")
Línia 83: Línia 103:
 
>>> frase.find("plors")
 
>>> frase.find("plors")
 
-1                         
 
-1                         
</pre>
+
</source>
  
 
::Pot tenir fins a tres paràmetres: cadena.find(subcadena, inici, fin)
 
::Pot tenir fins a tres paràmetres: cadena.find(subcadena, inici, fin)
Línia 99: Línia 119:
 
|}
 
|}
  
::- '''split''': permet separar una cadena en diferents parts, indicant el caràcter separador.
+
::- '''split(caràcter)''': permet separar una cadena en diferents parts, indicant el caràcter separador.
<pre>
+
<source lang="python">
>>>cadena = "De les nits més fosques neixen les albes més lluminoses"
+
>>> cadena = "De les nits més fosques neixen les albes més lluminoses"
>>>cadena.split()
+
>>> cadena.split()
 
['De', 'les', 'nits', 'més', 'fosques', 'neixen', 'les', 'albes', 'més', 'lluminoses'] # Llista de strings
 
['De', 'les', 'nits', 'més', 'fosques', 'neixen', 'les', 'albes', 'més', 'lluminoses'] # Llista de strings
</pre>
+
</source>
 
:Per defecte el caràcter separador és un blanc però es pot especificar qualsevol altre:
 
:Per defecte el caràcter separador és un blanc però es pot especificar qualsevol altre:
<pre>
+
<source lang="python">
 
>>> numcad = "22.244.567"
 
>>> numcad = "22.244.567"
 
>>> numcad.split('.')
 
>>> numcad.split('.')
 
['22', '244', '567'] # Llista de strings
 
['22', '244', '567'] # Llista de strings
</pre>
+
</source>
 
+
::- '''join(llista)''': s'utilitza per convertir una llista en una cadena separant cada element de la llista pel caràcter indicat.
::- '''join''': s'utilitza per convertir una llista en una cadena separant cada element de la llista pel caràcter indicat.
+
<source lang="python">
<pre>
+
>>> paraules = ['Qui', 'té', 'la', 'seva', 'pròpia', 'llum', 'incomoda', 'qui', 'està', 'a', 'les', 'fosques']
>>>paraules = ['Qui', 'té', 'la', 'seva', 'pròpia', 'llum', 'incomoda', 'qui', 'està', 'a', 'les', 'fosques']
+
>>> " ".join(paraules)  # l'espai farà de separador
>>>" ".join(paraules)  # l'espai farà de separador
 
 
'Qui té la seva pròpia llum incomoda qui està a les fosques'
 
'Qui té la seva pròpia llum incomoda qui està a les fosques'
</pre>
+
</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">
::- '''strip''': 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')
<pre>
 
>>>"Qui dia passa any empeny".strip('Qui')
 
 
' dia passa any empeny'
 
' dia passa any empeny'
>>>"Qui dia passa any empeny".strip('ny')
+
>>> "Qui dia passa any empeny".strip('ny')
 
'Qui dia passa any empe'
 
'Qui dia passa any empe'
</pre>
+
</source>
::- '''upper''': Converteix la cadena a majúscules.
+
::- '''upper()''': Converteix la cadena a majúscules.
<pre>
+
<source lang="python">
 
>>> "Python3".upper()
 
>>> "Python3".upper()
 
'PYTHON3'
 
'PYTHON3'
</pre>
+
</source>
::- '''lower''': Converteix la cadena a minúscules.
+
::- '''lower()''': Converteix la cadena a minúscules.
<pre>
+
<source lang="python">
 
>>> "Python3".lower()
 
>>> "Python3".lower()
 
'python3'
 
'python3'
</pre>
+
</source>
::- '''islower''': True si tots els caràcters de la cadena estan en minúscules (False en cas contrari).
+
::- '''islower()''': True si tots els caràcters de la cadena estan en minúscules (False en cas contrari).
<pre>
+
<source lang="python">
>>>"Python3".islower()
+
>>> "Python3".islower()
 
False
 
False
>>>"python3".islower()
+
>>> "python3".islower()
 
True
 
True
</pre>
+
</source>
::- '''isupper''': True si tots els caràcters de la cadena estan en majúscules (False en cas contrari).
+
::- '''isupper()''': True si tots els caràcters de la cadena estan en majúscules (False en cas contrari).
<pre>
+
<source lang="python">
>>>"Python3".isupper()
+
>>> "Python3".isupper()
 
False
 
False
>>>"PYTHON3".isupper()
+
>>> "PYTHON3".isupper()
 
True
 
True
</pre>
+
</source>
::- '''isalpha''': True si tots els caràcters de la cadena són lletres (False en cas contrari).
+
::- '''isalpha()''': True si tots els caràcters de la cadena són lletres (False en cas contrari).
<pre>
+
<source lang="python">
 
>>> "Python3".isalpha()
 
>>> "Python3".isalpha()
 
False
 
False
 
>>> "Python".isalpha()
 
>>> "Python".isalpha()
 
True
 
True
</pre>
+
</source>
  
 
===Executar programes amb arguments===
 
===Executar programes amb arguments===
Línia 170: Línia 187:
  
 
<source lang = "python">
 
<source lang = "python">
 +
import sys
 +
 
if(len(sys.argv) == 3):
 
if(len(sys.argv) == 3):
 
     print ("Nom del programa: ", sys.argv[0])
 
     print ("Nom del programa: ", sys.argv[0])
Línia 182: Línia 201:
  
 
==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===
  
El que necessitem és emmagatzemar una col·lecció de coses (a priori no sabem quantes) en un “objecte”.
+
:*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====
  
De fet, aquest tipus d’objecte ja l’hem fet servir, i es diu llista:
+
:* Una llista imbricada és una llista que apareix com a element d’una altra llista.
  
list(range(10))
+
<source lang="python">
> [0,1,2,3,4,5,6,7,8,9]
+
>>> llistaImbricada = ["Joan" ,[7563, True], "Maria", [5056, False]]
a='ABCD'
+
</source>
a.split()
+
:* Obtenir un element d’una llista imbricada:
> ['A','B','C','D']
+
<source lang="python">
 +
# obtenin primer la llista imbricada:
 +
>>> llistaImbricada = ["Joan" ,[7563, True], "Maria", [5056, False]]
 +
>>> dadesEmpleat = llistaImbricada[1]
 +
>>> sou = dadesEmpleat[0]
 +
>>> sou
 +
7563
  
Una llista és una seqüència ordenada de coses.
+
# directament:
 +
>>> sou = llistaImbricada[3][0]
 +
>>> sou
 +
5056
 +
</source>
  
Els elements d'una llista s'indexen de la mateixa manera que una cadena de caràcters. De fet les llistes i els strings són conceptualment molt semblants, i podem aplicar-hi operadors semblants.
+
:* 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>
  
La diferència és el que contenen. Les llistes poden contenir qualsevol tipus de dades, incloent “classes” definides pel programador. Les llistes són mutables, és a dir, es poden canviar sobre la mateixa estructura (els strings no!).
+
:* 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>
  
Donada una llista l:
+
===Diccionaris===
  
    l.append: afegeix elements al final.
+
:* Cada element d'un diccionari s'identifica per una clau i permet l'accés per aquesta clau.
    l.sort: ordena els elements.
+
<source lang = "python">
    l.reverse: inverteix la llista.
+
>>> passwords = {'lmarin':'l@1n', 'dvidal':'d1@l'}
    l.index(x): retorna l'índex del primer element igual a x.
+
>>> passwords['dvidal']                            # accés per clau
    l.count(x): retorna el nombre de vegades que apareix x.
+
'd1@l'
    l.remove(x): elimina la primera ocurrència de x.
+
</source>
    l.pop(i): elimina l'ièssim element de la llista i retorna el seu valor.
 
    x in l: retorna una valor booleà en funció de si x és a la llista o no.
 
  
Suposant que tenim una llista formada per milers de milions d'elements, podriem ordenar aquestes operacions en funció del temps que trigarien a executar-se?
+
:* 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>
  
Exemple
+
====Operacions====
  
def getNumbers():
 
    nums = []
 
    xStr = eval(input("Entra un nombre (<Enter> per acabar): "))
 
    while xStr != "":
 
        x = eval(xStr)
 
        nums.append(x)
 
        xStr = eval(input("Entra un nombre (<Enter> per acabar): "))
 
    return nums
 
def m(nums):
 
    suma = 0.0
 
    for num in nums:
 
        suma += num
 
    return suma/len(nums)
 
def stdDev(nums, mean):
 
    import math
 
    sumDev = 0.0
 
    for num in nums:
 
        dev = mean - num
 
        sumDev += dev * dev
 
    return math.sqrt(sumDev/len(nums)-1)
 
data = getNumbers()
 
print("Mitja: ", mean(data), " | Desviació: ", stdDev(data, mean(data)))
 
  
 +
:* Nombre d'elements d'un diccionari
 +
<source lang = "python"> 
 +
>>> len(inventari)
 +
3
 +
</source>
  
Llistes
+
:* in: Existeix la clau?
 +
<source lang = "python"> 
 +
>>> 'mvs' in inventari
 +
True
 +
</source>
  
Una llista imbricada és una llista que apareix com a element d’una altra llista.
+
:* 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>
  
l = [0,1,3,['a','b']]
+
:* Recorregut del diccionari
 +
<source lang = "python">
 +
>>> for clau in inventari:    # retorna les claus
 +
...    clau
 +
...
 +
'ordinadors'
 +
'projectors'
 +
'mvs'
 +
'raspberry_pi_4'
  
Per obtenir un element d’una llista imbricada ho podem fer de dues maneres:
+
>>> for valor in inventari.values(): # retorna els valors
 +
...    valor
 +
...
 +
150
 +
8
 +
['ubuntu_18.04', 'ubuntu_20.04', 'windows_10']
 +
12
  
# amb dues passes...
+
>>> for clau, valor in inventari.items():  # retorna les claus i els seus valors
li = l[3]
+
...   clau, valor
li[0]
+
...
> 'a'
+
('ordinadors', 150)
# o bé ...
+
('projectors', 8)
l[3][0]
+
('mvs', ['ubuntu_18.04', 'ubuntu_20.04', 'windows_10'])
> 'a'
+
('raspberry_pi_4', 12)
 +
</source>
  
I és que les llistes imbricades es fan servir per representar matrius:
+
====Mètodes====
  
m = [[1,2,3],[4,5,6],[7,8,9]]
+
:* '''- dict():''' crea un diccionari.
m[0]
+
<source lang = "python">
> [1,2,3]
+
>>> aules = dict(ISO = 301, Informàtica = 204, Electrònica = 109)
m[1][1]
+
>>> aules
>5
+
{'ISO': 301, 'Informàtica': 204, 'Electrònica': 109}
 +
</source>
  
===Diccionaris===
+
:* '''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 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

[1]

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 )

Referències