Está en la página 1de 6

Introducción a la Programación

Profesor: Carlos Ramírez Tarea 5

Esta es la Tarea 5 del curso Introducción a la Programación, 2022-1. La actividad debe


desarrollarse de forma completamente individual. Sus soluciones deben ser entregadas a través
de Discord a más tardar el día 13 de Abril a las 11:59pm. En caso de dudas y aclaraciones
puede escribir por el canal #tareas en el servidor de Discord del curso o comunicarse
directamente con el profesor y/o el monitor.

Todos los puntos de esta tarea deben ser realizados en un único archivo llamado tarea5.py.
Debe incluir una cabecera con su nombre y código y comentarios que permitan distinguir a qué
ejercicio corresponde cada operación en el archivo. Para los puntos 4 y 5 escriba también la operación
leerImprimir que permite solicitar al usuario el número de veces que se realizará el cálculo y los
datos respectivos y mostrar los resultados. Tenga en cuenta que los ejercicios de esta tarea deben ser
resueltos usando únicamente los conceptos y elementos de Python vistos en clase. Cualquier solución
que utilice elementos no permitidos no será tenida en cuenta.

1. (7 pts.) Escriba una operación en Python que reciba una lista de números y retorne True si la
lista tiene números repetidos y False en caso contrario. Pista: piense su solución considerando
el uso de ciclos anidados.

2. (10 pts.) Escriba una operación de leer e imprimir para el ejercicio anterior en la que primero
se lea el número de ejecuciones que se van a realizar y luego para cada ejecución en una línea
se escriban los números que conformarán la lista separados por espacios. Por ejemplo, en una
invocación podría escribirse:

3
12 4 15 6 7 8 90 5 1 15 10
1 2 3 4 5 8 11 15 6 7 90 91 75 72 45 16
12 18 12

Para cada ejecución se debe imprimir un mensaje con el número de la ejecución y la palabra
YES o NO dependiendo de si la lista tiene números repetidos o no. Para los datos anteriores el
programa debería imprimir:

Case 1: YES
Case 2: NO
Case 3: YES

Debe ejecutar su programa con los datos que están en el archivo datos.in y producir un archivo
llamado datos.out. El archivo datos.out debe entregarse como parte de esta tarea.
Nota: Recuerde que si archivo en Python se llama archivo.py puede ejecutar lo siguiente
para procesar los datos que están en el archivo datos.in y enviar los resultados al archivo
datos.out:

python archivo.py < datos.in > datos.out

Página 1 de 6
Introducción a la Programación
Profesor: Carlos Ramírez Tarea 5

3. (7 pts.) Escriba la definición de la función cuantosEnCuadrante que recibe una lista de listas
de dos elementos donde los elementos de cada lista interna corresponden a las coordenadas de
puntos en el plano cartesiano. Esta función debe producir una tupla o lista de 4 elementos en
donde cada posición contiene el número de puntos en cada cuadrante del plano. Puede asumir
que ninguno de los puntos estará ubicado sobre los ejes del plano cartesiano. De esta manera,
una ejecución como:

cuantosEnCuadrante([[2, 3.4], [3, 1], [-2.1, -3], [-4, 1], [3, -2], [5, -3]])

debe producir como resultado la lista [2, 1, 1, 2] ya que en la lista hay 2 puntos en el primer
cuadrante, 1 en el segundo cuadrante, 1 en el tercer cuadrante y 2 en el cuarto cuadrante.

4. (7 pts.) Escribir en Python la función mezclar que reciba dos listas de enteros ordenadas
ascendentemente. La función retorna una lista ordenada de todos los elementos en ambas listas.
Por ejemplo:

mezclar([35, 62, 81, 90, 91], [3, 83, 85, 90, 108, 119])

debe retornar [3, 35, 62, 81, 83, 85, 90, 90, 91, 108, 119].
Nota: En este ejercicio se espera una solución diferente a juntar las dos listas en una sola lista
y ordenarla. Por ende no debería usarse la operación sort de Python ni utilizarse un algoritmo
de ordenamiento.

5. (7 pts.) Escriba la definición de la operación esSubcadena que reciba una cadena cad1 y una
cadena cad2 y determine si la cadena cad1 es subcadena de la cadena cad2. Una cadena es
subcadena de otra si la segunda cadena contiene todos los carácteres de la primera cadena en el
mismo orden y de forma consecutiva.
De esta manera, una invocación como

esSubcadena("fici", "tuveunproblemadedificilsolucion")

debería producir como resultado True, en tanto que una invocación como

esSubcadena("venu", "tuveunproblemadedificilsolucion")

debería producir como resultado False.

6. Zlatan es un cinefilo empedernido que ha visto muchas películas y mantiene registro escrito de
los datos más importantes de sus películas preferidas. Para cada película se conoce su nombre,
el nombre del director, su genero, el año en que se estrenó, su costo, su recaudación y los
actores que particaron en ella. Zlatan desea sistematizar esta información y para esto necesita
su ayuda. Como se vió en clase, es posible representar las películas en Python como listas. De
esta manera, una película corresponde a una lista que tendrá 7 elementos en el siguiente orden:
nombre, director, género, año, costo, recaudación y actores. Un ejemplo de esta representación
es el siguiente:

Página 2 de 6
Introducción a la Programación
Profesor: Carlos Ramírez Tarea 5

["Erase una vez en Hollywood", "Quentin Tarantino", "Humor Negro",


2016, 90, 374, ["Leonardo Di Caprio", "Brad Pitt", "Margot Robbie"]]

En los siguientes items se describe las tareas que requieren su ingenio como programador para
ayudar a Zlatan. Para resolver estas tareas debe utilizar la representación de películas como
listas indicada anteriormente.

(a) (5 pts.) Escriba una función que reciba una lista de películas y retorne una lista con el
nombre de las películas que fracasaron. Se dice que una película fracasó si su costo fue
mayor a su recaudación.
(b) (9 pts.) Escriba la definición de la función conteoPeliculasActor que reciba un lista
de películas y retorne una lista de parejas donde cada pareja tenga el nombre un actor y el
número de películas en las que actuó dicho actor. Por jemplo, considere la siguiente lista
de películas:
l = [["Erase una vez en Hollywood", "Quentin Tarantino",
"Humor Negro", 2016, 90, 374,
["Leonardo Di Caprio", "Brad Pitt", "Margot Robbie"]],
["Avengers Endgame", "Hermanos Russo",
"Acción", 2019, 356, 2800,
["Mark Ruffalo", "Robert Downey Jr.", "Chris Evans",
"Chris Hemsworth", "Scarlett Johansson"]],
["The wolf of wall street", "Martin Scorsese",
"Humor Negro", 2013, 100, 392,
["Leonardo Di Caprio", "Margot Robbie", "Jonah Hill"]],
["The Ladykillers", "Alexander Mackendrick",
"Humor Negro", 1955, 2, 10,
["Alec Guinness", "Herbert Lom",
"Peter Sellers", "Cecil Parker"]],
["50 First Dates", "Peter Segal",
"Comedia Romántica", 2004, 75, 120,
["Adam Sandler", "Drew Barrymore", "Rob Schneider"]],
["Titanic", "James Cameron", "Drama", 1997, 200, 1843,
["Leonardo Di Caprio", "Kate Winslet", "Billy Zane",
"Gloria Stuart"]]]
La invocación conteoPeliculasActor(l) debería producir la siguiente lista:
[["Leonardo Di Caprio", 3], ["Brad Pitt", 1],
["Margot Robbie", 2], ["Mark Ruffalo", 1],
["Robert Downey Jr.", 1], ["Chris Evans", 1],
["Chris Hemsworth", 1], ["Scarlett Johansson", 1],
["Alec Guinness", 1], ["Herbert Lom", 1],
["Peter Sellers", 1], ["Cecil Parker", 1],
["Adam Sandler", 1], ["Drew Barrymore", 1],
["Rob Schneider", 1], ["Kate Winslet", 1],
["Billy Zane", 1], ["Gloria Stuart", 1], ["Johan Hill", 1]]

Página 3 de 6
Introducción a la Programación
Profesor: Carlos Ramírez Tarea 5

El orden de los actores en la lista no es particularmente relevante.

7. (7 pts.) Escriba una solución al Python para el problema 591 (https://onlinejudge.org/


external/5/591.pdf). Tenga en cuenta que los datos deben ser leídos y los resultados deben
ser imprimidos siguiendo las indicaciones en el enunciado.

Página 4 de 6
Introducción a la Programación
Profesor: Carlos Ramírez Tarea 5

Ejercicios Adicionales Sugeridos

1. Escriba la definición de la operación acumularSuma que recibe un número n y construye una


lista con las sumas acumuladas de 1 hasta n. Una invocación como acumularSuma(5) debe
producir la lista [1, 3, 6, 10, 15]. Note que

1 = 1
3 = 1 + 2
6 = 1 + 2 + 3
10 = 1 + 2 + 3 + 4
15 = 1 + 2 + 3 + 4 + 5

2. Escribir en Python la función concatenar que toma como entrada dos listas y retorna una lista
con la concatenación de dichas listas. No se puede utilizar el operador + sobre listas de Python
ni utilizar la operación extend y se debe crear una nueva lista, i.e., no deben agregar elementos
a la primera lista.

3. Escribir en Python la función sustituir que tiene 3 entradas: una lista de amigos (cadenas)
y dos cadenas, la anterior y la nueva. La función debe retornar una lista en donde la cadena
anterior es cambiada por la nueva.
Por ejemplo:

sustituir(["James", "Cuadrado", "Falcao"], "Falcao", "Bacca")

debe retornar

["James", "Cuadrado", "Bacca"]

4. Desarrolle la función convertirADolar que recibe una lista l de montos en pesos y un valor t
correspondiente a la tasa de cambio y retorna una lista con la conversión de los montos de dicha
lista a dolares.

5. Escribir en Python la definición de la operación mezclar que recibe dos listas l1 y l2 y


construye una nueva lista que debe contener el primer elemento de l1, luego los dos primeros
elementos de l2, luego el segundo elemento de l1, luego los dos elementos siguientes de l2 y
así hasta usar todos los elementos de l1 y l2.
Es importante precisar que las listas pueden tener cualquier tamaño y en consecuencia cuando
ya no queden más elementos en alguna de las listas se debe incluir en la lista que se está
construyendo todos los elementos restantes de la otra lista.
A partir de lo anterior, una invocación como

mezclar([1, 2, 3, 4, 5, 6, 7], [11, 12, 13, 14, 15])|

debe producir la lista

[1, 11, 12, 2, 13, 14, 3, 15, 4, 5, 6, 7]

Página 5 de 6
Introducción a la Programación
Profesor: Carlos Ramírez Tarea 5

6. Escriba la operación leerImprimir para los ejercicios anteriores.

7. Escriba una solución al Python para el problema 12503 (https://onlinejudge.org/external/


125/12503.pdf). Tenga en cuenta que los datos deben ser leídos cada uno en una línea
diferente y los resultados deben ser imprimidos siguiendo las indicaciones en el enunciado.

Página 6 de 6

También podría gustarte