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

De wikiserver
Dreceres ràpides: navegació, cerca
(Llistes)
(Classes)
 
(Hi ha 71 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 202: Línia 221:
 
[0, 5, "Bé", "Notable", "A+", "B", True, False]  # Llista amb elements de diferents tipus
 
[0, 5, "Bé", "Notable", "A+", "B", True, False]  # Llista amb elements de diferents tipus
 
</source>
 
</source>
:*Es pot accedir als elements d'una llista atenen al seu index.
+
:*Es pot accedir als elements d'una llista atenen al seu índex.
 
<source lang="python">
 
<source lang="python">
>>>llistaNoms =["Maria", "Pere", "Carles", "Sofia", "Raquel", "Joan"]
+
>>> llistaNoms =["Maria", "Pere", "Carles", "Sofia", "Raquel", "Joan"]
>>>llistaNoms[0]
+
>>> llistaNoms[0]
 
'Maria'         
 
'Maria'         
>>>llistaNoms[5]
+
>>> llistaNoms[5]
 
'Joan'
 
'Joan'
 
</source>
 
</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.
+
====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>
  
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!).
 
  
Donada una llista l:
+
::'''- str(): '''Mostrar el contingut de la llista com un String des d'un programa
 +
<source lang="python">
 +
print("Contingut llista: " + Str(llistaNoms))
  
    l.append: afegeix elements al final.
+
['Maria', 'Pere', 'Carles', 'Sofia', 'Raquel', 'Joan']
    l.sort: ordena els elements.
+
</source>
    l.reverse: inverteix la llista.
 
    l.index(x): retorna l'índex del primer element igual a x.
 
    l.count(x): retorna el nombre de vegades que apareix x.
 
    l.remove(x): elimina la primera ocurrència de x.
 
    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?
+
====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>
  
Exemple
+
====Llistes imbricades====
  
def getNumbers():
+
:* Una llista imbricada és una llista que apareix com a element d’una altra llista.
    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)))
 
  
 +
<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
  
Llistes
+
# directament:
 +
>>> sou = llistaImbricada[3][0]
 +
>>> sou
 +
5056
 +
</source>
  
Una llista imbricada és una llista que apareix com a element d’una altra llista.
+
:* 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===
 +
 
 +
:* 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>
  
l = [0,1,3,['a','b']]
+
:* 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>
  
Per obtenir un element d’una llista imbricada ho podem fer de dues maneres:
+
:* Recorregut del diccionari
 +
<source lang = "python">
 +
>>> for clau in inventari:    # retorna les claus
 +
...    clau
 +
...
 +
'ordinadors'
 +
'projectors'
 +
'mvs'
 +
'raspberry_pi_4'
  
# amb dues passes...
+
>>> for valor in inventari.values():  # retorna els valors
li = l[3]
+
...    valor
li[0]
+
...  
> 'a'
+
150
# o bé ...
+
8
l[3][0]
+
['ubuntu_18.04', 'ubuntu_20.04', 'windows_10']
> 'a'
+
12
  
I és que les llistes imbricades es fan servir per representar matrius:
+
>>> 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 = [[1,2,3],[4,5,6],[7,8,9]]
+
====Mètodes====
m[0]
 
> [1,2,3]
 
m[1][1]
 
>5
 
  
===Diccionaris===
+
:* '''- 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>
  
Diccionaris
+
:* '''copy():''' copia el diccionari.
 +
<source lang = "python">
 +
>>> copy_aules = aules.copy()
 +
>>> copy_aules
 +
{'ISO': 301, 'Informàtica': 204, 'Electrònica': 109}
 +
</source>
  
Python ens proporciona un altre tipus de col·lecció molt útil: els diccionaris.
+
:* '''- 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>
  
La raó de la seva existència és que no sempre serà possible accedir a una dada pel seu índex, sinó per exemple, per algun valor que el defineix (p.e. un empleat pel seu DNI). És a dir, volem accedir a un valor per una clau.
+
:* '''- 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>
  
Python crea els diccionaris així:
+
:* '''- clear():''' buida el diccionari de tots els seus elements.
 +
<source lang = "python">
 +
>>> resultat.clear()
 +
>>> resultat
 +
{}
 +
</source>
  
passwd = {'bill':'clinton', 'barack':'obama'}
+
:* '''- items():''' retorna una llista amb totes les tuples (clau, valor).
  
I ens permet accedir-hi així:
+
:* '''- keys():''' retorna una llista amb totes les claus.
  
passwd['bill']
+
:* '''- values():''' retorna una llista amb tots els valors.
> clinton
+
<source lang = "python">
 +
>>> inventari = {'ordinadors' : 150, 'projectors' : 7, 'mvs' : ['ubuntu_18.04', 'ubuntu_20.04', 'windows_10'], 'raspberry_pi_4' : 12}
  
Els diccionaris són mutables:
+
>>> inventari.items()
 +
dict_items([('ordinadors', 150), ('projectors', 8), ('mvs', ['ubuntu_18.04', 'ubuntu_20.04', 'windows_10']), ('raspberry_pi_4', 12)])
  
passwd['bill'] = 'gates'
+
>>> inventari.keys()
 +
dict_keys(['ordinadors', 'projectors', 'mvs', 'raspberry_pi_4'])
  
Exemple: omplir un diccionari des d'un fitxer.
+
>>> inventari.values()
 +
dict_values([150, 8, ['ubuntu_18.04', 'ubuntu_20.04', 'windows_10'], 12])
 +
</source>
  
Suposem que tenim una llista d'usuaris i els seus passwords en un fitxer. El format és una línia per usuari formada per dues paraules: el nom d'usuari i el password.
+
:* '''- get():''' rep una clau i retorna el valor associat (res si no existeix).
 +
<source lang = "python">
 +
>>> inventari.get('raspberry_pi_4')
 +
12
 +
</source>
  
passwords = {}
+
:* '''- pop():''' rep una clau, l'elimina i retorna el valor (error! si no existeix).
f = open('passwords.txt','r')
+
<source lang = "python">
for line in f.readlines():
+
>>> inventari.pop('projectors')     # elimina l'element projectors
    usr, passw = line.split()
+
8
    passwords[usr] = passw
+
>>> inventari
f.close()
+
{'ordinadors': 150, 'mvs': ['ubuntu_18.04', 'ubuntu_20.04', 'windows_10'], 'raspberry_pi_4': 12}
  
Diccionaris
+
>>> inventari.pop('mv')            # error! la clau 'mv' no existeix
 +
Traceback (most recent call last):
 +
  File "<stdin>", line 1, in <module>
 +
KeyError: 'mv'
 +
</source>
  
p = {'a':'A', 'b':'B', 'c':'C', 'd':'D'}
+
:* '''- setdefault():''' pot funcionar com a get, o també pot afegir un nou element.
for i in p.keys():
+
<source lang = "python">
    print(i,end=',')
+
>>> inventari.setdefault('ordinadors') # com get()
> a,b,c,d
+
150
for i in p.values():
+
>>> inventari.setdefault('impressores', 7) # afegir un nou element
    print(i,end=',')
+
7
> A,B,C,D
+
>>> inventari
for i in p.items():
+
{'ordinadors': 150, 'mvs': ['ubuntu_18.04', 'ubuntu_20.04', 'windows_10'], 'raspberry_pi_4': 12, 'impressores': 7}
    print(i,end=',')
+
</source>
> ('a','A'),('b','B'),('c','C'),('d','D')
+
 
list(p.values())
+
:* '''- update():''' rep com a paràmetre un diccionari: les claus coincidents, s'actualitzen els valors, la resta s'agreguen (clau, valor).
> ['A','B','C','D']
+
<source lang = "python">
'a' in p
+
>>> act_inventari = {'ordinadors' : 200, 'raspberry_pi_4' : 10, 'scaners' : 5}
> True
+
>>> 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===
  
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>
  
Hi ha una altra classe de col·lecció a Python que és semblant a la llista, però que és immutable: la tupla.
+
====Operacions====
 +
https://www.w3resource.com/python-exercises/tuple/
  
t = 'a','b','c','d'
+
:* 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>
  
o
+
:* Element en tupla?
 +
<source lang = "python">
 +
>>> 'dimecres' in dies
 +
True
 +
>>> 'gener' in dies
 +
False
 +
</source>
  
t = ('a','b','c','d')
+
:* '''-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>
  
Si només hi ha un element s'ha d'escriure amb una coma final:
+
:* Tupla buida
 +
<source lang = "python">
 +
>>> tup = ()
 +
>>> tup
 +
()
 +
>>> tupla = tuple()
 +
>>> tupla
 +
()
 +
</source>
  
t = ('a',)
+
:* assignació multiple
type(t)
+
<source lang = "python">
> tuple
+
>>> tupla = 2, 2, 3
t = ('a')
+
>>> tupla
type(t)
+
(2, 2, 3)
> str
+
>>> 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>
  
Les operacions son les mateixes que per les llistes (tenint en compte que són immutables!)
+
:* 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==
 
==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.
 
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.
  
Línia 457: Línia 882:
 
     for i in range(min(n,len(lfreq))-1):
 
     for i in range(min(n,len(lfreq))-1):
 
         print(lfreq[i][1], lfreq[i][0])
 
         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