0% encontró este documento útil (0 votos)
38 vistas

Taller 1 Python

Este documento presenta 8 retos o ejercicios de programación en Python para un curso de ciencias de datos. Los retos incluyen temas como aproximaciones numéricas, regresión lineal, series de Fourier, generación de combinatorias, intersección de funciones, análisis de cadenas de ADN y cifrado César. El último reto simula lanzamientos de una ruleta y pagos de apuestas.
Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
38 vistas

Taller 1 Python

Este documento presenta 8 retos o ejercicios de programación en Python para un curso de ciencias de datos. Los retos incluyen temas como aproximaciones numéricas, regresión lineal, series de Fourier, generación de combinatorias, intersección de funciones, análisis de cadenas de ADN y cifrado César. El último reto simula lanzamientos de una ruleta y pagos de apuestas.
Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 4

Pregrado en ciencias de datos

Asignatura: Programación I
Profesor Alber Montenegro
Taller 1 de Python - marzo de 2023

RETO 1

A lo largo de la historia, grandes mentes han desarrollado diferentes esquemas computacionales para el número .
Consideraremos aquí dos de estos esquemas, uno de Leibniz (1646 - 1716) y otro de Euler (1707 1783).

El esquema de Leibniz puede escribirse como

mientras que una forma del esquema de Euler puede aparecer como

Escriba un programa que tome un numero 𝑁𝑁 como entrada del usuario, y imprima como cambia el error con ambos
esquemas a medida que el número de iteraciones se aproxima a 𝑁𝑁 . Su programa también debe imprimir el error final
alcanzado con ambos esquemas, es decir, cuando el número de términos es 𝑁𝑁. Ejecute el programa con 𝑁𝑁 = 100.

RETO 2

Supongamos que se han recogido algunas medidas 𝑦𝑦𝑖𝑖 , 𝑖𝑖 = 1, … ,5  una vez cada segundo. Su tarea es escribir un
programa que ajuste una recta a esos datos (Esto se conoce como ajuste de regresión lineal).

a) Estudie y apropie los conceptos del video https://www.youtube.com/watch?v=4PiiSUxcalg.


b) Implemente una función regrelin, que tenga como entradas los valores de 𝑦𝑦 y que retorne la pendiente y el
corte con el eje vertical de la recta de regresión lineal ajustada a los datos.
c) Implemente una función regrerror, que calcule el error entre la recta y las medidas:

Esta función debe recibir como parámetros los valores de 𝑚𝑚, 𝑏𝑏 y los 𝑦𝑦.
d) Pruebe su función regrerror con los valores 𝑦𝑦 = 2, 4, 6, 8, 10.

RETO 3

Gran parte de la tecnología, especialmente la mayoría de los tipos de dispositivos de audio digital para procesar
sonido, se basa en representar una señal de tiempo como una suma de funciones sinusoidales. Digamos que tenemos
una función 𝑓𝑓(𝑡𝑡) en el intervalo [-𝜋𝜋, 𝜋𝜋]. En lugar de trabajar con 𝑓𝑓(𝑡𝑡) directamente, aproximamos 𝑓𝑓 por la suma
donde los coeficientes 𝑏𝑏𝑘𝑘 deben ajustarse de forma que 𝑆𝑆𝑁𝑁 (𝑡𝑡) sea una buena aproximación de 𝑓𝑓(𝑡𝑡). En este ejercicio
ajustaremos 𝑏𝑏𝑘𝑘 mediante un proceso de ensayo y error.

a) Cree una función sinesum que devuelva 𝑆𝑆5 (𝑡𝑡), dados los coeficientes 𝑏𝑏𝑘𝑘 en una lista 𝑏𝑏 y las coordenadas
temporales en una lista 𝑡𝑡. Como ejemplo podemos usar tres valores de t.
b) Escriba una función test_sinesum que llame a sinesum y determine si la función calcula correctamente un
caso de prueba. Como caso de prueba, sea 𝑡𝑡 = −𝜋𝜋/2, 𝜋𝜋/4, 𝜋𝜋 con 𝑁𝑁 = 2 y b = 1, 2, 3, 4, 5. Calcule 𝑆𝑆5 (𝑡𝑡) a
mano para obtener los valores de referencia.
c) Escriba una función error(b, f, M) que devuelva una medida matemática del error en 𝑆𝑆5 (𝑡𝑡) como aproximación
a f(𝑡𝑡). Donde los valores 𝑡𝑡 son 𝑀𝑀 números distribuidos uniformemente en [−𝜋𝜋, 𝜋𝜋], 𝑏𝑏 contiene los coeficientes
en 𝑆𝑆5 (𝑡𝑡) y 𝑓𝑓 es una función Python que implementa la función matemática 𝑓𝑓(𝑡𝑡) = 𝑡𝑡 2 .

d) Escriba una función trial(f, N) para dar interactivamente valores 𝑏𝑏𝑘𝑘 y obtener el error en la aproximación. La
función trial debe ejecutar un bucle en el que se pide al usuario los valores 𝑏𝑏𝑘𝑘 en cada pasada del bucle y se
imprime el error correspondiente. Debe terminar el bucle cuando los experimentos hayan terminado el
usuario digite la palabra “bye”.
e) Ahora intentaremos automatizar el procedimiento anterior. Escriba una función que tenga cinco bucles
anidados sobre los valores de 𝑏𝑏1 , 𝑏𝑏2 , … , 𝑏𝑏5 . Cada bucle cubrirá el intervalo [-1,1] en pasos de 0.1. Para cada
combinación de valores de 𝑏𝑏1 , 𝑏𝑏2 , … , 𝑏𝑏5 el error en la aproximación 𝑆𝑆5 (𝑡𝑡) debe calcularse. Use esto para
encontrar, e imprimir, el error más pequeño y los valores correspondientes de 𝑏𝑏1 , 𝑏𝑏2 , … , 𝑏𝑏5 .

RETO 4

Considere un número de identificación formado por dos letras y tres dígitos, por ejemplo, RE198. ¿Cuántos ¿Cuántos
números diferentes podemos tener y cómo puede un programa generar todas estas combinaciones?

Para generar todas las combinaciones posibles de identificaciones, debemos tener cinco bucles for anidados. Los dos
primeros recorren todas las letras "A", "B", ..., "Z", mientras que los tres siguientes recorren todos los dígitos 0, 1, ... ,
9.

a) En una baraja de cartas, cada carta es una combinación de un rango y un palo. Hay 13 rangos: (A), 2, 3, 4, 5, 6,
7, 8, 9, 10, sota (J), reina (Q), rey (K), y cuatro palos: tréboles (C), diamantes (D), corazones (H) y picas (S). Una
carta típica puede ser D3. Escriba una función que genere una baraja de cartas, es decir, todas las
combinaciones CA, C2, C3, …, SK.
b) El número de matrícula de un vehículo es el formulario DE562, en el que las letras van de la A a la Z y los
dígitos del 0 al 9. Escriba una función que calcule todas las posibles matrículas y las almacene en una lista.
debe retornar la lista.
c) Escriba una función que genere todas las combinaciones de lanzar dos dados (el número de ojos puede variar
de 1 a 6). Cuenta cuántas combinaciones en las que la suma de los ojos es igual a 7.

RETO 5

Considere dos funciones 𝑓𝑓(x) = x y 𝑔𝑔(x) = 𝑥𝑥 2 en el intervalo [−4,4]. Escriba un programa que, por ensayo y error,
encuentre aproximadamente para qué valores de 𝑥𝑥 las dos gráficas se cruzan, es decir, 𝑓𝑓(x) = g(x). Para ello,
considera 𝑁𝑁 puntos igualmente distribuidos en el intervalo, comprobando en cada punto si |𝑓𝑓(x) − 𝑔𝑔(𝑥𝑥)| < 𝜖𝜖 , donde
𝜖𝜖 es un número pequeño. Permita que 𝑁𝑁 y sea la entrada del usuario al programa y que el resultado se imprima en
pantalla. Ejecuta tu programa con 𝑁𝑁 = 400 y 𝜖𝜖 = 0.01. Explique la salida del programa.
RETO 6

En el análisis de genes se plantean muchos problemas que implican buscar determinadas combinaciones de letras en
una cadena larga. Por ejemplo, podemos tener una cadena como

gene = 'AGTCAATGGAATAGGCCAAGCGAATATTTGGGCTACCA'

Podemos recorrer esta cadena, letra a letra, mediante el bucle for para letra en gene. La longitud de la cadena viene
dada por len(gene), por lo que un recorrido alternativo sobre un índice i es índice i es for i in range(len(gene)). El
número de letra i se alcanza a través de gene[i], y una subcadena desde el índice i hasta, pero sin incluir j, se crea
mediante gen[i:j].

a) Escribe una función freq (letra, texto) que devuelva la frecuencia de la letra en la cadena de texto. Llame a la
función para determinar la frecuencia de “C” y “G” en la cadena de genes anterior. Calcule también la
frecuencia a mano.
b) Escribe una función pares(letra, texto) que cuente cuántas veces un par de la letra (por ejemplo, “GG”)
aparece dentro de la cadena texto. Utiliza la función para determinar cuántas veces aparece el par “AA” en la
cadena gen anterior. Realice también un recuento manual para comprobar la respuesta.
c) Escribe una función mystruct(texto) que cuente el número de una determinada estructura en la cadena texto.
La estructura se define como “G” seguida de “A” o “T” hasta un doble “GG”. Realice también una búsqueda
manual de la estructura para controlar los cálculos por mystruct.

RETO 7

Uno de los primeros ejemplos conocidos de cifrado lo utilizó Julio César. César necesitaba dar instrucciones por escrito
a sus generales, pero no quería que sus enemigos se enteraran de sus planes si el mensaje caía en sus manos. Como
resultado, desarrolló lo que más tarde se conoció como el Cifrado César.

La idea detrás de este cifrado es simple (y como resultado, no proporciona ninguna protección contra las técnicas
modernas de descifrado de códigos). Cada letra del mensaje original se desplaza 3 posiciones. Como resultado, A se
convierte en D, B se convierte en E, C se convierte en F, D se convierte en G, etc. Las tres últimas letras del alfabeto se
giran hasta el principio. principio: X pasa a ser A, Y pasa a ser B y Z pasa a ser C. Los caracteres que no son letras no son
modificados por el cifrado. no son modificados por el cifrado.

Escriba un programa que implemente un cifrado César. Permita que el usuario proporcione el mensaje y la cantidad de
desplazamiento y, a continuación, muestre el mensaje desplazado. Asegúrese de que su programa codifique tanto las
mayúsculas como las minúsculas. Su programa debe también admitir valores de desplazamiento negativos para que
pueda utilizarse tanto para codificar mensajes como para decodificar mensajes.

RETO 8

Una ruleta tiene 38 casillas. De estos espacios, 18 son negros, 18 son rojos y dos son verdes. Los espacios verdes están
numerados 0 y 00. Las casillas rojas se numeran como 1, 3, 5, 7, 9, 12, 14, 16, 18, 19, 21, 23, 25, 27, 30 32, 34 y 36. Los
números enteros restantes entre 1 y 36 se utilizan para numerar los espacios negros.

En la ruleta se pueden hacer muchas apuestas diferentes. En este ejercicio de ellas en este ejercicio:

 Número único (de 1 a 36, 0 ó 00)


 Rojo contra negro
 Impar frente a par (tenga en cuenta que el 0 y el 00 no pagan par)
 1 a 18 frente a 19 a 36
Escribe un programa que simule el lanzamiento de una ruleta utilizando el generador de números aleatorios de
Python. Muestra el número seleccionado y todas las apuestas que deben ser pagarse. Por ejemplo, si se selecciona 13
entonces su programa debe mostrar:
El lanzamiento resultó en 13
Pagar 13
Pagar Negro
Paga Impar
Paga 1 a 18

Si la simulación resulta en 0 o 00 entonces su programa debe mostrar “Paga 0” o “Paga 00” sin ninguna otra salida.

RETO 9

Algunas medidas 𝑦𝑦𝑖𝑖 , 𝑖𝑖 = 0,1, … , 𝑁𝑁 , de una cantidad 𝑦𝑦 han sido recogidas regularmente, una cada minuto, en los
instantes 𝑡𝑡 =, 𝑖𝑖 = 0,1, … , 𝑁𝑁 . Se desea estimar un valor 𝑦𝑦̈̇ entre las mediciones, por ejemplo, en 𝑡𝑡̈̇ =  3.2 min. El
𝑖𝑖
cálculo de tal valor 𝑦𝑦̈̇ se denomina interpolación.

A continuación, se resumen los pasos que sigue la interpolación lineal para calcular 𝑦𝑦̈̇ entre dos mediciones
consecutivas:

1. Solicite un valor de 𝑡𝑡̇̈ tal que  1  ≤ 𝑡𝑡̈̇  ≤ 𝑁𝑁 .


2. Determine en cuál de los subintervalos se encuentra el valor 𝑡𝑡̇̈ . 𝑡𝑡𝑖𝑖 ≤ 𝑡𝑡 ≤ 𝑡𝑡𝑖𝑖+1 ?
3. Encuentre una expresión matemática 𝑦𝑦 = 𝑚𝑚𝑚𝑚 + 𝑏𝑏 para la recta que pasa por los puntos (𝑡𝑡𝑖𝑖 , 𝑦𝑦𝑖𝑖 ) y (𝑡𝑡𝑖𝑖+1 , 𝑦𝑦𝑖𝑖+1 ).
4. Calcule el valor de 𝑦𝑦̈̇ reemplazando el valor del tiempo 𝑡𝑡̈̇ del usuario en la expresión para la recta 𝑦𝑦 = 𝑚𝑚𝑚𝑚 + 𝑏𝑏.

a) Implemente la técnica de interpolación lineal en una función, llamada interlin, que tome como entrada una lista con
las medidas 𝑦𝑦 , 𝑖𝑖 = 0,1, … , 𝑁𝑁 como entrada, junto con un tiempo 𝑡𝑡̈̇, y devuelva el valor 𝑦𝑦̈ interpolado en el tiempo 𝑡𝑡̈̇.
𝑖𝑖

b) Escriba otra función, llamada interbucle, con un bucle en el que se pida al usuario un tiempo 𝑡𝑡̈̇ tal que  1  ≤ 𝑡𝑡̈̇  ≤ 𝑁𝑁 y
el correspondiente valor 𝑦𝑦̈̇ (interpolado) se escribe en la pantalla. El bucle se detiene cuando el usuario da un tiempo
negativo. Esta función recibe como parámetro los valores de 𝑦𝑦 y usa la función interlin.

c) El programa principal deberá solicitar al usuario 𝑁𝑁 y los valores de 𝑦𝑦. Luego el programa utiliza la función interbucle.

d) Pruebe su programa con los valores 𝑦𝑦 = 4.4,2, 11, 21.5, 7.5 correspondientes a tiempos t = 0,1,2,3,4 (min), y
calcula valores interpolados en t= 2.5 y t= 3.1.

e) Realice cálculos manuales por separado para comprobar que la salida del programa es correcta.

RETO 10

Consideremos un juego en el que cada participante extrae una serie de números enteros al azar distribuidos
uniformemente entre 0 y 10, con el objetivo de que la suma sea lo más cercana posible a 21, pero no mayor que 21. Si
la suma supera 21, el participante queda fuera del juego. Después de cada extracción, se le indica el número y la suma
total, y se le pregunta si desea otra extracción o no. desea otra extracción o no. El que más se acerque a 21 es el
ganador. Implementa este juego en un programa.

RETO 11

Primero revise el video: https://www.youtube.com/watch?v=cftgEWhAdgw. Implemente su propio programa que


simule el juego “guayabita” para dos jugadores: la máquina y el usuario.

También podría gustarte