Computing">
Practica 5
Practica 5
Practica 5
Boletin 5
Universidad Politécnica de Valencia
2021-2022
Ejercicio 1. Hacer un programa interactivo en Python que pida el número de personas a almacenar y
de cada una de ellas nos pida los siguientes datos por teclado: día mes y año de nacimiento (enteros)
y nombre de la persona (String) y lo almacene en un fichero llamado "fechas.txt" con el siguiente
formato:
fechas.txt
12 03 1996 | Salvador Ruiz Blanco
16 05 1997 | Javier Sanchez Aguado
08 10 1976 | Maria Magdalena Negro
04 03 2010 | Ramón Moneda Ricos
1
Ejercicio 2. A partir del ejercicio anterior, haz un programa que lea el fichero "fechas.txt" y nos
diga cuantas personas nacieron en mayo. En el ejemplo anterior solo hay una persona que ha nacido
en mayo. Para testear bien tu programa asegura que lo pruebas también con diferentes ficheros
"fechas.txt":
un fichero "fechas.txt" que no tiene ninguna persona nacido en mayo
un fichero "fechas.txt" que tiene más de una persona nacido en mayo
Ejercicio 3. Continuando con el fichero "fechas.txt", escribe una función con paráme-
tros opcionales para permitir a su usuario buscar en el fichero de fechas. Por ejemplo
buscar_fechas("fechas.txt", mes=5) devuelve una lista con los nombres de las personas nacidos
en mayo; buscar_fechas("fechas.txt", mes=2, dia=29) devuelve una lista con los nombres de las
personas nacidos en 29 de febrero, etc. La función debe aceptar como parámetros opcionales día,
mes y año.
Ejercicio 4. Tenemos el siguiente formato para un fichero de texto:
tresnotas.txt
23 2.5 3.0 1.1
34 2.0 1.0 1.0
17 1.0 1.0 1.1
450 4.0 2.1 2.2
55 4.0 4.0 2.0
Ejercicio 5. Escribe un programa en Python que puede generar una cantidad de ficheros con una
cantidad aleatoria (entre 1 y 10) de números reales aleatorios (entre 1.00 y 200.00). Los números
tienen que estar alineados a la derecha y con 2 decimales. Puedes importar random y usar randint
para generar números enteros de forma aleatorio, y uniform para generar números reales de forma
aleatorio.
Tu programa:
primero tiene que pedir al usuario la cantidad de ficheros que quiere generar
después le pide el nombre que quiere usar como base de los ficheros generados. Por ejemplo,
si el usuario quiere 5 ficheros con nombre de basefichero, tu programa generará los ficheros
fichero1.txt, fichero2.txt, . . . , fichero5.txt
Por ejemplo:
2
ejemplo de sesión interactiva
>>> %Run
Cuantos ficheros?: 4
Cual es el nombre base?: fichero
>>>
Ejercicio 6. Escribe una función calcular_varianza en Python que recibe el nombre de un fichero y
que lea una cantidad de números reales de este fichero, almacenándolos en una lista, y que muestre
por pantalla la varianza de dichos datos. La varianza se calcula como la suma de las diferencias al
cuadrado entre cada elemento de la lista, v[i], y la media, todo ello dividido entre el número de
elementos (N):
PN
(x[i] − media)2
w = i=1 (1)
N −1
Para testear tu función vamos a utilizar el Ejercicio 5 para generar una cantidad de ficheros (p. ej. 5
ficheros numeros1.txt, numeros2.txt, numeros3.txt, numeros4.txt y numeros5.txt).
Después, termina el siguiente código pytest para ejecutar tus pruebas de forma automático. Como
salida_esperada podéis usar statistics.variance(lista).
import pytest
3
assert abs( calcular_varianza ( f_entrada ) − salida_esperada ) < 10∗∗−7 ,\
"caso {0}". format ( testcase )
Recuerda que hay que tener en cuenta que comparar flotantes para la igualdad tiene problemas
de redondeo y precisión. Por eso hay que comparar que la diferencia entre lo que sale de nuestra
función y lo que esperamos es menor a por ejemplo 10−7
Ejercicio 7. Escribir una función que, dado un número entero n mayor que cero, devuelve una lista de
los múltiplos de 3 que hay entre 3 y n. Escribe otra función que, dado un número entero n mayor
que cero, devuelve una lista de los divisores de n. Prueba tus funciones con pytest, por ejemplo:
@pytest .mark. parametrize ( ' testcase , entrada , salida_esperada ' ,[
(1, 10, [3, 6, 9]),
(2, 0, []),
(3, 1, []),
(4, −5, []),
(5, 12, [3, 6, 9, 12]) ,
(6, 3, [3])
])
def test_multiplos_de_3 (testcase , entrada , salida_esperada ):
assert multiplos_de_3 ( entrada )== salida_esperada , ' caso {0} ' . format ( testcase )
Ahora, usa estas funciones para escribir un programa main que pide un numero mayor que cero al
usuario a través del teclado que devuelve el siguiente:
>>> %Run
Teclea un numero entero mayo a cero: 1
No hay multiplos de 3
>>> %Run
Teclea un numero entero mayo a cero: 2
No hay multiplos de 3
>>> %Run
Teclea un numero entero mayo a cero: 3
multiplo = 3 divisores del 3 = [1, 3]
>>> %Run
Teclea un numero entero mayo a cero: 13
multiplo = 3 divisores del 3 = [1, 3]
multiplo = 6 divisores del 6 = [1, 2, 3, 6]
multiplo = 9 divisores del 9 = [1, 3, 9]
multiplo = 12 divisores del 12 = [1, 2, 3, 4, 6, 12]
>>>
Ejercicio 8. Implementar una función fib(n) que devuelve una lista con los primeros n números de
Fibonacci. Si n==0, la función tiene que devolver la lista [1], si n==1, la función tiene que devolver la
4
lista[1,1]. Cuando n<1, entonces hay que empezar con la lista [1,1] y añadir el siguiente numero
Fibonacci sumando los números anteriores en la lista.
Por ejemplo tecleando:
>>> print(fib(0))
[1]
>>> print(fib(1))
[1, 1]
>>> print(fib(2))
[1, 1, 2]
>>> print(fib(12))
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233]
>>> miSplit('Una frase formada con palabras. Otra frase con otras palabras.')
['una', 'frase', 'formada', 'con', 'palabras', 'otra', 'otras']
>>> miSplit('Hi! Helloooo HI')
['hi', 'helloooo']
Para diseñar tu conjunto de tests que tienes que ejecutar de forma automáticos con pytest piensa en
casos:
que la cadena es vacía
que la cadena tiene signos de puntuación, como ,;.:-¿?+*()!¡
que la cadena termine con un punto
que la cadena no termine con un punto
que la cadena tiene números
5
que la cadena tiene palabras repetidos, pero unos tiene mayúsculas y otras no (por ejemplo:
' HOla hola hoLa'
que la cadena tiene más de 1 espacio entre palabras
etc.