---
title: ASIX1 M03. 006. Exemples de bucles, condicionals i diferents tipus de dades.
tags: asix, programació, exemples
---
<div style="width: 30%; margin-left: auto;">

</div>
<a rel="license" href="http://creativecommons.org/licenses/by-sa/4.0/"><img alt="Llicència de Creative Commons" style="border-width:0" src="https://i.creativecommons.org/l/by-sa/4.0/88x31.png" /></a><br />Aquesta obra està subjecta a una llicència de <a rel="license" href="http://creativecommons.org/licenses/by-sa/4.0/">Reconeixement-CompartirIgual 4.0 Internacional de Creative Commons</a>
# ASIX1 M03: Programació bàsica
[vincle a font en MarkDown](https://hackmd.io/@JdaXaviQ/SydLqS_4K)
---
## 006. Exemples de bucles, condicionals i diferents tipus de dades.
### id, type i value d'una variable.
- id: És l'adreça de memòria on està desada una variable (en realitat qualsevol objecte).
- type: És la classe a la que pertany la variable (en realitat objecte).
- value [valor]: És el contingut de la variable.
Podem consultar totes aquestes propietats amb les següents comandes:
```python=
# Declarem la variable foo i desem a dins el contingut 'bar'. 'bar' passa a ser el valor de foo.
foo = 'bar'
# value
print(foo) # S'escriurà: bar
# id
print(id(foo)) # Obtindrem un nombre similar a: 139947605665264
# type
print(type(foo)) # Obtindrem: <class 'str'>
```
Qualsevol valor dins d'un programa Python ha de tenir un tipus i una adreça a la memòria ('id').
```python=
>>> print(type(5))
<class 'int'>
```
La sentència 'is' serveix per a comparar les ids de dues variables. Si la id és la mateixa, al modificar una de les variables també es modifica l'altra.
```python=
>>> foo = [1,2,3]
>>> bar = [1,2,3]
>>> foo == bar
True
>>> foo is bar
False
>>> foo is foo
True
>>> foo.append(4)
>>> print(bar)
[1, 2, 3]
>>> print(foo)
[1, 2, 3, 4]
>>> foo=5
>>> bar=5
>>> foo is bar
True
>>> foo=[1,2,3]
>>> bar = foo
>>> foo is bar
True
>>> foo.append(4)
>>> print(bar)
[1, 2, 3, 4]
>>> foo=[1,2,3]
>>> bar = foo
>>> foo is bar
True
>>> foo.append(4)
>>> print(bar)
[1, 2, 3, 4]
```
### Tuples
És uns dels tipus de variables que ens permeten desar més d'un element.
Una tupla és un conjunt **ordenat** i **inalterable** d'elements.
```python=
la_meva_tupla = ('Dilluns', 'Dimarts', 'Dimecres', \
'Dijous', 'Divendres', 'Dissabte', 'Diumenge')
>>> for dia in la_meva_tupla:
... print(dia)
...
Dilluns
Dimarts
Dimecres
Dijous
Divendres
Dissabte
Diumenge
>>> foo = (1, 'hola', (1,2,3,4))
>>> for element in foo:
... print(element)
...
1
hola
(1, 2, 3, 4)
```
#### Propietats de les tuples:
1. Ordenades
2. Inmutables
3. Permeten duplicats
#### Mètodes de les tuples:
**count()**: Ens permet comptar quants elements amb aquest valor hi ha dins d'una tupla.
```python=
>>> una_tupla = (1, 3, 7, 8, 7, 5, 4, 6, 8, 5)
>>> quantitat = una_tupla.count(5)
>>> print(quantitat)
2
```
**index()**: Ens diu quina posició ocupa la primera ocurrència d'aquest element dins del a tupla.
```python=
>>> print(una_tupla.index(7))
2
```
### Llistes
És un tipus de dades similar a les tuples però que a diferència d'aquestes es pot modificar.
#### Propietats de les llistes:
1. Ordenades
2. Mutables
3. Permeten duplicats
#### Mètodes de les llistes:
Permeten **index()** i **count()** com les tuples i a més alguns altres mètodes per modificar el contingut, com ara:
- append()
- clear()
- copy()
- pop()
- reverse()
- sort()
### Diccionaris
És una colecció modificable i ordenada (*a partir de python 3.7*) de parelles clau-valor que no permet duplicats.
```python=
>>> un_profe = {'nom' : 'Xavi', \
... 'grups' : ('ASIX1', 'DAM1', 'DAW2'), \
... 'centre' : "IES Joan d'Austria"}
>>> print(un_profe)
{'nom': 'Xavi', 'grups': ('ASIX1', 'DAM1', 'DAW2'), 'centre': "IES Joan d'Austria"}
>>> print(un_profe["nom"])
Xavi
```
#### Mètodes dels diccionaris:
- get()
- clear()
- copy()
- items()
- keys()
- values()
- pop()
### Exemples d'ús.
1. Tenim una aplicació informàtica que a partir d'una llista de diccionaris que conté la informació de diferents alumnes, volem escriure per consola aquesta informació en format CSV (Comma Separated Values), de manera que si redirigim la sortida estàndar a un fitxer el poguem obrir amb el LibreOffice o el MS Excel.
```python=
alumnes = [{"nom":"Marcel", "cognom_1":"Garcia"}, \
{"nom":"Marina", "cognom_1":"Cullell"}, \
{"nom":"Mario", "cognom_1":"Vizuete"}, \
{"nom":"Antoni", "cognom_1":"Valent"}, \
{"nom":"Annabel","cognom_1":"Segura"}, \
{"nom":"Loulou", "cognom_1":"Nadal"} \
]
print("nom,cognom_1")
for alumne in alumnes:
print(alumne["nom"] + "," + alumne["cognom_1"])
```
Desprès podríem analitzar la informació amb el LibreOffice amb aquestes comandes:
```bash=
$ python3 alumnes.py > alumnes.csv
$ libreoffice alumnes.csv &
```
2. Volem generar una pàgina web de forma dinàmica amb els alumnes del exemple anterior.
[PEP 263. Defining Python Source Code Encodings.](https://www.python.org/dev/peps/pep-0263/)
```python=
#!/usr/bin/python3
# _*_ coding: utf-8 _*_
alumnes = [{"nom":"Marcel", "cognom_1":"Garcia"}, \
{"nom":"Marina", "cognom_1":"Cullell"}, \
{"nom":"Mario", "cognom_1":"Vizuete"}, \
{"nom":"Antoni", "cognom_1":"Valent"}, \
{"nom":"Annabel","cognom_1":"Segura"}, \
{"nom":"Loulou", "cognom_1":"Nadal"} \
]
print("<DOCTYPE html>")
print("<html>")
print("<head>")
print('<meta charset="utf-8">')
print("<title>Alumnes</title>")
print("<style>")
print("table, th, td {border: 1px solid black;}")
print("</style>")
print("</head>")
print("<body>")
print("<h1>Llistat d'alumnes</h1>")
# A la vida real potser només la part de la taula la escriuria
# el codi i la resta formaria part d'una plantilla.
print("<table>")
print("<tr>")
print("<th>Nom</th><th>Cognom</th>")
print("</tr>")
for alumne in alumnes:
print("<tr>")
print("<td>",alumne["nom"],"</td><td>",alumne["cognom_1"],"</td>")
print("</tr>")
print("</table>")
print("</body>")
print("</html>")
```
3. Escriu un programa que demani nombres naturals. L'usuari entrarà els nombres fins que entri el nombre 0 que donarà per finalitzada la entrada de nombres. Llavors ens imprimirà per pantalla la llista de nombres i el valor mig.
```python=
#!/usr/bin/python3
# _*_ coding: utf-8 _*_
nombres = []
valor_mig = 0;
while True:
user_input = int(input("Introduce un nombre natural o '0' per finalitzar: "))
if user_input != 0:
nombres.append(user_input)
else:
break
acumulat = 0
for n in nombres:
acumulat = acumulat + n
valor_mig = acumulat / len(nombres)
print("La llista de nombres és:", nombres)
print("---")
print("El valor mig es:", valor_mig)
print("A10!")
```