Logo Studenta

practica4

¡Estudia con miles de materiales!

Vista previa del material en texto

INTRODUCCIÓN A LA PROGRAMACIÓN · ESCUELA DE NEGOCIOS, UTDT · PRIMER SEMESTRE 2021
Guía de Ejercicios 4: Listas
Objetivos:
Ejercitar el uso del tipo de datos lista y sus operaciones básicas, disponibles en la mayoría
de los lenguajes de programación.
Comprender la asignación y el pasaje de argumentos de tipos mutables e inmutables.
Incorporar el uso prudente de iteradores, entendiendo sus ventajas y desventajas respecto
de la instrucción while.
Importante: Usar solo las operaciones de listas vistas en clase, y a medida que cada enunciado
lo indique. Python ofrece muchísimas operaciones para el procesamiento de listas: max, sum, join,
split, map, etc. Por ahora es importante ir despacio, y ganar práctica en la manipulación de listas
usando solo operaciones básicas. Con eso, después todo lo demás se aprende rápido.
Ejercicio 1. Hacer un seguimiento a manoa manoa manoa manoa manoa manoa manoa manoa manoa manoa manoa manoa manoa manoa manoa manoa mano, instrucción a instrucción, de la variable lista en el
siguiente programa, y determinar qué valor tiene al terminar.
1 lista:List[str] = ['w', 'l', 'g', 'r', 'x', 't', 't', 'm', 'z']
2 lista.pop()
3 lista.append('o')
4 if 'w' in lista:
5 lista [0] = 'a'
6 elif 'g' in lista:
7 lista [0] = 'b'
8 else:
9 lista [0] = 'c'
10 lista.insert(3, lista[len(lista) -1])
11 lista [5] = 'i'
12 lista.pop(6)
Ejercicio 2. Escribir el encabezado y el docstring de cada una de las siguientes funciones, descri-
biendo qué hace y especificando su precondición y su postcondición.
(a) .
1 from typing import List
2 def ________(n:int) -> ________:
3 '''
4 ... COMPLETAR ...
5 '''
6 vr:List[str] = []
7 while n > 0:
8 vr.append(str(n))
9 n = n - 1
10 vr.append('¡Despegue!')
11 return vr
1
(b) .
1 from typing import List
2 def ________(a:________) -> ________:
3 '''
4 ... COMPLETAR ...
5 '''
6 vr:int = 0
7 i:int = 0
8 while i < len(a):
9 vr = vr + round(a[i])
10 i = i + 1
11 return vr
(c) .
1 from typing import List
2 def ________(a:________) -> ________:
3 '''
4 ... COMPLETAR ...
5 '''
6 vr:List[int] = []
7 i:int = len(a) -1
8 while i >= 0:
9 vr.append(a[i])
10 i = i - 1
11 return vr
Ejercicio 3. Especificar, programar y verificar funciones para resolver los siguientes problemas.
En los ciclos usar while; no usar iteradores (for) todavía. Para la verificación, se pide hacer testing
de unidad y dar una demostración informal que incluya la terminación y la correctitud de los ciclos
involucrados, con sus predicados invariantes.
(a) Dada una lista no vacía de float, encontrar su máximo elemento. Por ejemplo, para la lista
[1.0, 12.7, 1.0, 8.8, 12.7, 3.0], debería devolverse 12.7.
(b) Dada una lista de strings, construir un string que sea la concatenación de todos sus elemen-
tos. Por ejemplo, para la lista ['ab','c','','def'], se debe devolver 'abcdef'.
(c) Dada una lista de enteros, determinar si está ordenada en forma estrictamente creciente. Por
ejemplo, [1,4,6] y [] están ordenadas, pero [6,4,1] y [4,6,6] no lo están. Notar que una
lista vacía se considera ordenada.
(d) Dado un número natural n, construir una lista con los primeros n números naturales impares,
ordenados de menor a mayor. Por ejemplo, para n=3, la lista esperada es [1,3,5].
(e) Dada una lista de enteros l y un entero n, construir una nueva lista, resultante de sumarle
n a cada elemento de l. Por ejemplo, para l=[1,9,7,7] y n=10, se debe devolver la lista
[11,19,17,17].
(f) Dada una lista de strings, contar la cantidad total de caracteres. Por ejemplo, para ['tor',
'c','ua','to'] el resultado esperado es 8.
(g) Dada una lista de strings, contar la cantidad de veces que aparece la letra 'a'. Por ejemplo,
para ['abba','acdc','bee gees','a-ha'] el resultado esperado es 5.
(h) Dado un string txt de longitud arbitraria y un string sep de un carácter de longitud, se-
parar txt en cada aparición de sep, construyendo así una nueva lista. Por ejemplo, para
txt='a;bb;c;;ddd;' y sep=';', la lista resultante es ['a','bb','c','','ddd',''].
2
Ejercicio 4. En una lista no vacía de números enteros, llamamos mesetas a las sublistas de núme-
ros iguales que aparecen en forma consecutiva. Por ejemplo, la lista [1,1,2,6,6,6,3,3] contiene
las mesetas [1,1], [2], [6,6,6] y [3,3]. Especificar, programar y verificar funciones para resolver
los siguientes problemas, dada una lista de enteros:
(a) Determinar el número de la meseta más larga. Para la lista del ejemplo, la función debe
devolver 6. Si hay más de una meseta de longitud máxima, devolver el número de la primera.
(b) Construir una lista de listas, conteniendo las mesetas de la lista original, en el mismo orden.
Para la lista del ejemplo, la lista resultante es [[1,1],[2],[6,6,6],[3,3]].
(c) Construir una lista de enteros, conteniendo la longitud de cada meseta de la lista original,
en el mismo orden. Para la lista del ejemplo, se debe devolver [2,1,3,2].
Ejercicio 5. Evaluación de expresiones. Dada la lista x = [0,1,2,3,4,5,6,7,8,9], determinar
a mano el valor de las siguientes expresiones. Después, evaluarlas en una consola ipython para
revisar las respuestas.
(a) x[3:7]
(b) x[3:]
(c) x[:3]
(d) x[:]
(e) x[3:-2]
(f) x[-7:7]
(g) x[-5:]
(h) x[:-5]
(i) x[::-1]
(j) x[1:8:-2]
(k) x[8:1:-2]
(l) x[::]
Tipos mutables e inmutables
Ejercicio 6. ¿Qué valor se imprime en la última instrucción del siguiente programa?
1 from typing import List
2
3 a:List[int] = [1,2]
4 b:List[int] = a
5 a.append (3)
6 print(len(b))
¿Por qué no imprime 2, si luego de ejecutar la línea 4, b tenía 2 elementos y luego no se modifica?
Comparar con el ?? de la Guía 1. ¿Qué se imprime si reemplazamos la línea 4 por b:List[int]
= list(a)?
Ejercicio 7. Sin ejecutarlo en Python, determinar qué imprime por pantalla el siguiente código.
1 from typing import List
2
3 def despedir(x:str):
4 x.append('chau')
5
6 a:List[str] = ['hola', 'mundo ']
7 despedir(a)
8 print(a)
9 despedir(list(a))
10 print(a)
3
Ejercicio 8. Sin ejecutarlo en Python, determinar qué imprime por pantalla el siguiente código.
1 from typing import List
2
3 def suma_problematica(lista:List[int]) -> int:
4 n:int = 0
5 i:int = 0
6 while i < len(lista):
7 n = n + lista[i]
8 i = i + 1
9 lista.clear () # clear () elimina todos los elementos de la lista.
10 return n
11
12 a:List[int] = [1,2,3,4]
13 print(suma_problematica(a))
14 print(suma_problematica(a))
¿Qué cambia si reemplazamos la línea 9 por lista = []? Es importante entender la diferencia
entre esas dos instrucciones.
Iteradores en strings y listas
Ejercicio 9. Reescribir los ciclos de los ejercicios 1 y 2, ahora usando for en vez de while para
iterar listas y strings.
Ejercicio 10. while vs. for: Considerar el siguiente programa:
1 from typing import List
2
3 def buscar_v1(elem:int , lista:List[int]) -> bool:
4 ''' Determina si elem está en la lista.
5 Pre: Ninguna.
6 Post: vr equivale a que elem aparece al menos una vez en la lista.
7 '''
8 vr:bool = False
9 i:int = 0
10 while i < len(lista):
11 vr = vr or (lista[i] == elem)
12 i = i + 1
13 return vr
14
15 def buscar_v2(elem:int , lista:List[int]) -> bool:
16 ''' Determina si elem está en la lista.
17 Pre: Ninguna.
18 Post: vr equivale a que elem aparece al menos una vez en la lista.
19 '''
20 vr:bool = False
21 i:int = 0
22 while i < len(lista) and not vr:
23 vr = lista[i] == elem
24 i = i + 1
25 return vr
26
4
27 a:List[int] = [1,2,4,1,5]
28 print(buscar_v1 (1, a), buscar_v2 (1, a))
29 print(buscar_v1 (3, a), buscar_v2 (3, a))
30 print(buscar_v1 (5, a), buscar_v2 (5, a))
(a) Hacer un seguimiento a mano de la ejecución de las líneas 28, 29 y 30, y observar cuándo
termina la ejecución del ciclo en cada caso.
(b) Reescribir las funciones buscar_v1 y buscar_v2 usando for en lugar de while. En una de
ellas, para terminar la ejecución del ciclo en el mismo momento, será necesario usar break
o return en el cuerpo del ciclo.
Ejercicio 11. while vs. for: Reescribir la función del Ejercicio 3(c), de modo que la ejecución del
ciclo corte en cuanto se sepa que la lista no está ordenada.Escribir dos versiones: una con while
y otra con for.
Ejercicio 12. while vs. for: Considerar el siguiente programa:
1 from typing import List
2
3 def primera_ocurrencia(elem:int , lista:List[int]) -> int:
4 ''' Devuelve el índice de la primera ocurrencia de elem en la lista.
5 Pre: La lista contiene al menos una ocurrencia de elem.
6 Post: vr es igual al índice de la primera ocurrencia de elem en la
7 lista.
8 '''
9 i:int = 0
10 while lista[i] != elem:
11 i = i + 1
12 return i
13
14 a:List[int] = [1,2,4,1,5]
15 print(primera_ocurrencia (1, a))
16 print(primera_ocurrencia (5, a))
(a) Reescribirlo usando for en lugar de while.
(b) (Opcional) Reescribirlo usando for (i,x) in enumerate(a). Buscar y leer la documenta-
ción de enumerate.
5
Ejercicio 13. (Idealmente, para hacer después del Ejercicio 2.) Para las siguientes funciones,
demostrar que el ciclo efectivamente termina para cualquier entrada válida, escribir un predicado
invariante del ciclo y demostrar que la función hace lo esperado.
(a) .
1 def iniciales(a:List[str]) -> List[str]:
2 ''' Dada una lista de strings , devuelve una lista con el primer
3 carácter de cada string.
4 Pre: Todos los strings de a tienen longitud >0.
5 Post: len(vr)==len(a), y en toda posición j entre 0 y len(a) -1:
6 vr[j]== primer carácter de a[j].
7 '''
8 vr:List[str] = []
9 i:int = 0
10 while i < len(a):
11 primer_carácter = a[i][0]
12 vr.append(primer_carácter)
13 i = i + 1
14 return vr
(b) .
1 def iniciales2(a:List[str]):
2 ''' Modifica una lista de strings , dejando solo el primer
3 carácter de cada string.
4 Pre: Todos los strings de a tienen longitud >0. Llamamos A al
5 valor inicial de a.
6 Post: len(a)==len(A), y en toda posición j entre 0 y len(a) -1:
7 a[j]== primer carácter de A[j].
8 '''
9 i:int = 0
10 while i < len(a):
11 primer_carácter = a[i][0]
12 a[i] = primer_carácter
13 i = i + 1
6

Continuar navegando

Materiales relacionados

171 pag.
Estructuras de Datos con Java

IPN

User badge image

Todos los Materiales

66 pag.
ResumenIIC1103-2 (1)

User badge image

Central de Apuntes

9 pag.
intro_listas

User badge image

alejandra Montes