Salta el contingut
 

Exercicis: Llistes i cadenes de text

Joan Puigcerver Ibáñez

j.puigcerveribanez@edu.gva.es

Llicència: CC BY-NC-SA 4.0

(Reconeixement - NoComercial - CompartirIgual) 🅭

Objectius

Els objectius d'aquests exercicis són:

  • Conéixer la estructura de dades list.
  • Conéixer les operacions bàsiques amb llistes.
  • Recórrer llistes amb bucles.

Els exercicis marcats amb ✅ seran corregits a classe.

Estructura del projecte

Tots els exercicis han de complir amb la següent estructura:

  • Cada exercici ha d'anar dins del directori corresponent.
  • El nom del fitxer ha de coincidir amb el títol de l'exercici.
  • El format de la eixida del programa ha de ser consistent amb el format demanat.

Exercicis

ud3/exercises/lists

list_utils.py

Crea un mòdul anomenat list_utils que continga les següents funcions:

  • read_list(): Llegeix una llista d'enters des de l'entrada estàndard. Primer demana a l'usuari el nombre d'elements de la llista, i després demana cada element un per un. Retorna la llista d'enters.

  • min(lst): Rep una llista d'enters i retorna el valor mínim.

  • max(lst): Rep una llista d'enters i retorna el valor màxim.
  • sum(lst): Rep una llista d'enters i retorna la suma de tots els elements.

El programa ha de poder-se importar com a mòdul.

Exemple d'ús
from list_utils import read_list, min, max, sum

my_list = read_list()
print("La llista és:", my_list)
print("Mínim:", min(my_list))
print("Màxim:", max(my_list))
print("Suma:", sum(my_list))
Introdueix el nombre d'elements: 3
[0]: 5
[1]: 10
[2]: 15
La llista és: [5, 10, 15]
Mínim: 5
Màxim: 15
Suma: 30

count_odds.py

Crea un programa que compte el nombre de números imparells en una llista d'enters.

Cal reutilitzar la funció read_list()

Exemple d'entrada i eixida
Introdueix el nombre d'elements: 5
[0]: 1
[1]: 2
[2]: 3
[3]: 4
[4]: 5
Nombre de números imparells: 3

swap_elements.py

Crea un programa que intercanvie dos elements en una llista d'enters.

Exemple d'entrada i eixida
Introdueix el nombre d'elements: 4
[0]: 10
[1]: 20
[2]: 30
[3]: 40
Introdueix la posició del primer element a intercanviar: 1
Introdueix la posició del segon element a intercanviar: 3
Llista original: [10, 20, 30, 40]
Llista després de l'intercanvi: [10, 40, 30, 20]

find_multiples.py

Crea un programa que trobe tots els múltiples d'un nombre donat en una llista d'enters.

Exemple d'entrada i eixida
Introdueix el nombre d'elements: 6
[0]: 10
[1]: 15
[2]: 20
[3]: 25
[4]: 30
[5]: 35
Introdueix un nombre per trobar els seus múltiples: 3
Els múltiples de 3 en la llista són: [15, 30]

is_list_sorted.py

Crea un programa que determine si una llista d'enters està ordenada ascendentment o no.

Exemple d'entrada i eixida
Introdueix el nombre d'elements: 5
[0]: 1
[1]: 2
[2]: 3
[3]: 4
[4]: 5
La llista està ordenada ascendentment.
Introdueix el nombre d'elements: 4
[0]: 3
[1]: 1
[2]: 4
[3]: 2
La llista no està ordenada ascendentment.

padlock_simulator.py

Crea un programa que simule un cadenat de seguretat en el com el que es mostra a la imatge, on l'usuari pot prémer els números per intentar obrir el cadenat.

Cadenat de seguretat

Figura 1. Cadenat de seguretat

Cada número pot estar premut o no i el cadenat s'obre quan es prem la combinació correcta.

El programa ha de permetre a l'usuari prémer els números del 0 al 8 i mostrarà l'estat actual del cadenat després de cada número premut.

El programa acabarà quan l'usuari introduïsca el número 0.

Exemple d'entrada i eixida
> 1
1:[X] 2:[ ] 3:[ ] 4:[ ] 5:[ ] 6:[ ] 7:[ ] 8:[ ]
> 5
1:[X] 2:[ ] 3:[ ] 4:[ ] 5:[X] 6:[ ] 7:[ ] 8:[ ]
> 7
1:[X] 2:[ ] 3:[ ] 4:[ ] 5:[X] 6:[ ] 7:[X] 8:[ ]
> 5
1:[X] 2:[ ] 3:[ ] 4:[ ] 5:[ ] 6:[ ] 7:[X] 8:[ ]
> 0
Ampliació: Format de la eixida

Modifica el programa anterior per mostrar l'estat del cadenat semblant a la imatge.

> 1
1:[X] 5:[ ]
2:[ ] 6:[ ]
3:[ ] 7:[ ]
4:[ ] 8:[ ]
> 5
1:[X] 5:[X]
2:[ ] 6:[ ]
3:[ ] 7:[ ]
4:[ ] 8:[ ]
> 7
1:[X] 5:[X]
2:[ ] 6:[ ]
3:[ ] 7:[X]
4:[ ] 8:[ ]
> 0
Ampliació: Orde de premuda

Modifica el programa anterior per enregistrar l'ordre en què s'han premut els números.

Com es podria modelar que s'ha premut un mateix número diverses vegades?

> 1
1:[1] 2:[ ] 3:[ ] 4:[ ] 5:[ ] 6:[ ] 7:[ ] 8:[ ]
> 5
1:[1] 2:[ ] 3:[ ] 4:[ ] 5:[2] 6:[ ] 7:[ ] 8:[ ]
> 7
1:[1] 2:[ ] 3:[ ] 4:[ ] 5:[2] 6:[ ] 7:[3] 8:[ ]
> 0

cap_i_cua.py

Crea un programa que indique si una llista d'enters és cap i cua, és a dir, que si llegim la llista des del principi o des del final, donarà el mateix resultat.

Exemple d'entrada i eixida
Introdueix el nombre d'elements: 5
[0]: 1
[1]: 2
[2]: 3
[3]: 2
[4]: 1
La llista és cap i cua.
Introdueix el nombre d'elements: 4
[0]: 1
[1]: 2
[2]: 3
[3]: 4
La llista no és cap i cua.

list_utils.py: ampliació

Afegeix al mòdul list_utils les següents funcions:

  • equals(lst1, lst2): Rep dues llistes i retorna True si són iguals o False en cas contrari.

    Dos llistes són iguals si tenen el mateix nombre d'elements i els elements en les mateixes posicions són iguals.

  • reverse(lst): Rep una llista i retorna una nova llista amb els elements en ordre invers.

  • find(lst, value): Rep una llista i un valor, i retorna la posició de la primera ocurrència del valor en la llista. Si el valor no es troba, retorna -1.

find_nearest_average.py

Crea un programa que trobe l'element d'una llista d'enters més proper a la mitjana dels seus elements.

Exemple d'entrada i eixida
Introdueix el nombre d'elements: 5
[0]: 9
[1]: 19
[2]: 31
[3]: 42
[4]: 45
La mitjana és: 29.2
L'element més proper a la mitjana és: 31

parse_users.py

Crea un programa que reba línies del fitxer /etc/passwd fins que trobe la paraula END.

El programa mostrarà tots els usuaris que tinguen configurada la shell /bin/bash i mostrarà la seua carpeta d'usuari.

Exemple d'entrada i eixida

Entrada

root:x:0:0:root:/root:/bin/bash
bin:x:2:2:bin:/bin:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
jpuigcerver:x:1000:1000:,,,:/home/jpuigcerver:/bin/bash
END
Eixida
root (/root)
jpuigcerver (/home/jpuigcerver)

check_isbn.py

Crea un programa que valide un codi ISBN és correcte.

Els codi ISBN estan formats pels següents grups:

  1. Prefix (3 dígits): 978 o 979
  2. Grup d'identificació (1-5 dígits): Identifica el país o regió lingüística.
  3. Editor (1-7 dígits): Identifica l'editorial.
  4. Número de sèrie (1-6 dígits): Identifica l'obra específica.
  5. Dígit de control (1 dígit): S'utilitza per a la validació del codi.

    • Aquest dígit es calcula mitjançant el mòdul 11 dels altres dígits.
    • Si el resultat és 10, el dígit de control és 'X'.
Exemple d'entrada i eixida
Introdueix un codi ISBN-13: 9780306406157
El codi ISBN és vàlid.
Introdueix un codi ISBN-13: 9780306406158
El codi ISBN no és vàlid.

matrix_sum.py

Crea un programa que llegeix dues matrius de dimensions m x n i calcula la seua suma.

Exemple d'entrada i eixida
Introdueix el nombre de files: 2
Introdueix el nombre de columnes: 3
Matriu 1:
[0][0]: 1
[0][1]: 2
[0][2]: 3
[1][0]: 4
[1][1]: 5
[1][2]: 6
Matriu 2:
[0][0]: 7
[0][1]: 8
[0][2]: 9
[1][0]: 10
[1][1]: 11
[1][2]: 12
Matriu 1:
1 2 3
4 5 6
Matriu 2:
7 8 9
10 11 12
Suma:
8 10 12
14 16 18

Ampliació

sort_list.py

Crea un programa que ordene una llista d'enters utilitzant l'algorisme de l'ordenació per selecció.

Exemple d'entrada i eixida
Introdueix el nombre d'elements: 5
[0]: 64
[1]: 25
[2]: 12
[3]: 22
[4]: 11
Llista original: [64, 25, 12, 22, 11]
Llista ordenada: [11, 12, 22, 25, 64]

is_matrix_symmetric.py

Crea un programa que determine si una matriu quadrada és simètrica.

Matriu simètrica

Figura 2. Matriu simètrica

Exemple d'entrada i eixida
Introdueix el nombre de files/columnes: 3
[0][0]: 1
[0][1]: 2
[0][2]: 3
[1][0]: 2
[1][1]: 4
[1][2]: 5
[2][0]: 3
[2][1]: 5
[2][2]: 6
Matriu:
1 2 3
2 4 5
3 5 6
La matriu és simètrica.
Introdueix el nombre de files/columnes: 2
[0][0]: 1
[0][1]: 2
[1][0]: 3
[1][1]: 4
Matriu:
1 2
3 4
La matriu no és simètrica.
📌 Aquest document pot quedar desactualitzat després d’imprimir-lo. Pots consultar la versió més recent a la pàgina web.
🌿 Abans d’imprimir aquest document, considera si és realment necessari. Redueix el consum de paper i ajuda a protegir el nostre entorn.