0% encontró este documento útil (0 votos)
32 vistas28 páginas

Proyectos Compu 2

Cargado por

seemantestio
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
32 vistas28 páginas

Proyectos Compu 2

Cargado por

seemantestio
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

ESCENARIO: AJUSTE DE CURVAS.

Se obtiene una gran cantidad de información técnica como resultado de pruebas de


laboratorio, mediciones y observaciones. Por lo general, una variable se mide mientras que
otra varía, todas las demás cantidades se mantendrán constantes. El resultado de su
prueba sería una tabla de datos empíricos. Aunque es posible trabajar con una tabla de
datos de este tipo, es mucho mejor tener la misma información en forma de ecuación. La
cual proporciona ciertas ventajas: A partir de una ecuación, es mucho más fácil ver la
relación funcional entre las variables. Una ecuación es una forma mucho más compacta de
almacenar información que una tabla. Dados n pares de datos (xi, yi), queremos hallar la
ecuación que mejor se ajusta a este conjunto de datos, este proceso se llama ajuste de
curvas.

En la gráfica superior observamos la tabla de datos compuesta por los datos obtenidos
experimentalmente, y los datos calculados, en la tercera columna los cuadrados para cada
xi, y en la cuarta el producto de xi por yi, una vez obtenidos los valores calculados,
determinamos las sumatorias de cada una de las columnas, si los datos están relacionados
linealmente, entonces debemos encontrar la función de la recta que es la mejor
aproximación al conjunto de datos obtenidos experimentalmente, o sea, y = mx + b, en
donde: m es la pendiente y b el punto de intersección con el eje Y, para x = 0, m y b lo
determinamos usando las expresiones mostradas a la izquierda de la tabla de datos de la
gráfica superior. Sea un conjunto N pares de datos (xi, yi) los cuales almacenamos en el
archivo “TablaXY*.txt”, en cada línea registramos:
El valor de Xi y el valor de Yi
Enunciado:
Crear un proyecto Python 3.6, que procese la información del archivo “TablaXY*.txt”, y
definirá los siguientes archivos, los cuales deberán ser identificados adecuadamente.

Archivo 1:
Funciones:
1. Que reciba como parámetro el nombre del archivo y lea el contenido del archivo
“TablaXY*.txt”,guardando los valores de X ,y, Y en las dos primeras columnas, esta
matriz tendrá dos columnas adicionales, por lo tanto, la función calculará y guardará
en estas dos últimas columnas los valores de X2 y X*Y.
2. Que reciba como parámetros la matriz con los valores experimentales y
calculados, y en un vector de tipo real, almacenará las sumatorias de las columnas
de la matriz. Este vector será retornado por la función.
3. Que reciba como parámetro un vector con las sumatorias de la matriz y el número
de medidas observadas en el experimento. retorné la pendiente de la recta (m), y el
valor de la constante b.
4. Que grabe en un archivo la matriz con los valores experimentales y calculados, el
vector con la sumatoria de las columnas de la matriz (formateada), y al final la
ecuación de la recta que mejor se ajusta al conjunto de valores obtenidos en el
experimento. Ver figura colocada abajo que visualiza el contenido del archivo de
salida.

Archivo 2:

Con el código principal, en el cual se leerá el archivo a procesar y se ejecutaran las


funciones definidas en el Archivo 1

El archivo de salida según la función 4 del archivo 1, los valores reales formateados a 3
decimales tanto en la matriz como en el vector:
Dado un circuito (a) realizar un programa que determine el circuito equivalente (b), se puede
utilizar como base la siguiente notación, en este caso, Req = P(R1, R2), donde P significa
que es un arreglo en paralelo de las resistencias que están dentro del paréntesis y S si
están en serie.
En este caso se tiene una combinación de arreglos en serie y en paralelo.
INGENIERÍA MECÁNICA
PRIMER SEMESTRE

Código Asignatura U.C. T P L Requisitos

DH1B01 PROC. BASICOS DEL PENSAMIENTO 2 0 4 0 NINGUNO

HU1B01 INTROD. A LAS CIENCIAS HUMANAS 3 3 0 0 NINGUNO

MA1B01 ANALISIS MATEMATICO I 5 4 2 0 NINGUNO

MA1B02 GEOMETRIA ANALITICA 5 4 2 0 NINGUNO

SEGUNDO SEMESTRE

Código Asignatura U.C. T P L Requisitos

DE2B01 DEPORTE 0 0 2 0 12 UC

DH2B02 RAZ. VERBAL Y SOL DE PROBLEMAS 1.5 0 3 0 DH1B01

FI2B01 FISICA I 4 3 2 0 MA1B01+MA1B02

MA2B03 ANALISIS MATEMATICO II 4 3 2 0 MA1B01+MA1B02

MA2B04 ALGEBRA LINEAL 3.5 3 1 0 MA1B01+MA1B02

QM2B01 QUIMICA GENERAL I 3.5 3 1 0 7 UC

TERCER SEMESTRE

Código Asignatura U.C. T P L Requisitos

DH3B03 CREATIVIDAD E INVENTIVA 1.5 0 3 0 DH2B02+20 UC

DI3B01 DIBUJO I 2.5 1 3 0 DH2B02+MA1B02

FI3B02 FISICA II 3 2 2 0 FI2B01+MA2B03

FI3B03 LABORATORIO I DE FISICA 3 1 0 2 FI2B01

HU3B02 CULTURA 0 2 0 0 20 UC

MA3B05 FUNCIONES VECTORIALES 3.5 3 1 0 MA2B03+MA2B04


MA3B06 ECUACIONES DIFERENCIALES 3.5 3 1 0 MA2B03+MA2B04

CUARTO SEMESTRE

Código Asignatura U.C. T P L Requisitos

DA4M01 DIBUJO MECANICO 4 3 3 0 DH3B03+DI3B01+45 UC

DA4M02 COMPUTACION PARA INGENIEROS 4.5 3 0 3 DH3B03+MA3B05+MA3B06

ID4B01 INGLES I 3 2 2 0 DH2B02+20 UC

IE4M01 MECANICA RACIONAL 4.5 4 1 0 FI3B02+FI3B03

MA4B07 MATEMATICAS APLICADAS 3.5 3 1 0 MA3B05+MA3B06

Dada la información de un pensum guarde los datos con los datos estructurados que
considere conveniente.

Dado un código indique asignaturas preladas y sus requisitos.


Copiese el horario de la página de dae y utilice una hoja de cálculo electrónica hasta tener
un archivo de datos bien estructurado y fácilmente manejable.

SA9E18 AUTOMATIZACION INDUSTRIAL II 41 PROF. PEREZ R JESÚS R


MA0800 SIE1 MA0850 SIE1

SA9E18L AUTOMATIZACION INDUSTRIAL II 01 PROF. PEREZ R JESÚS R


LU0800 LAU2 LU0850 LAU2 LU0940 LAU2

SA9E18L AUTOMATIZACION INDUSTRIAL II 02 PROF. ANUARES P ANDRES


SA1030 LAU2 SA1120 LAU2 SA1210 LAU2

SA9T05 DISEÑO DIGITAL 71 PROF. CASTRO CARLOS


MA0940 SIE1 MA1030 SIE1 MA1120 SIE1

SS0T10 TRANSMISION DE DATOS 71 PROF. RUIZ P RUBEN C


MA0940 A7E MA1030 A7E JU0800 A7E JU0850 A7E

SS0T12 REDES DE TELECOMUNICACIONES 71 PROF. SANCHEZ S PEDRO H


LU0800 LCTEL LU0850 LCTEL LU0940 LCTEL LU1030 LCTEL

SS5T01 ANALISIS DE SEÑALES Y SIST. LINEALES 71 PROF. RODRIGUEZ U


FRANCISCO
MA0940 SEIN MA1030 SEIN JU0940 SEIN JU1030 SEIN

Dado el horario, realice lo siguiente:

1. Indique los datos de todas las asignaturas asignadas al profesor, sin repetir el
horario.
2. Cuántas horas de clase dicta cada profesor.
3. Cuántos profesores hay por escuela.
4. Cuántas asignaturas se dictan por escuela.
5. Cuántas secciones tiene cada sección.
6. Cuántas asignaturas se dictan por día.
7. Cuál es el día y la hora más concurrida y la de menor concurrencia.
Programación – Evaluación Formativa Diagnóstica – Uso de Listas
A. Enfermer@s
En un hospital, la información del personal de enfermería se almacena en una lista de
tuplas, donde cada tupla tiene un identificador único para cada profesional, su nombre y su
tipo o especialidad. El tipo puede ser Maternidad (’M’), Emergencias (’E’) o General (’G’).
Por otra parte, los turnos se encuentran almacenados en una lista de tuplas, donde el
primer elemento de cada tupla es el identificador del o la profesional, y el segundo es una
lista con los números de los bloques en donde tiene turno. Los bloques van del 1 al 10.

profesionales = [ (125,'Ann','M'), (271,'Beth','E'), (443,'John','G'), (105,'Ben','M'), (85,'Fer','E'), . . .


]

turnos = [ (443,[5,8,2]), (126,[6,2,4,7]), (271,[1,9]), (85,[2,9]), . . .


]

1. Implemente la función turno_emergencias(profesionales, turnos), que recibe como


parámetro las listas descritas en el enunciado del problema. La función debe retornar una
lista con todos los turnos, sin repetición, en los que trabajan profesionales de Emergencias.

Ejemplo:
>>> print(turno_emergencias(profesionales,turnos))
[1, 9, 2]

2. Implemente la función buscar_profesional(profesional, identificador), que recibe como


parámetro la lista con la información de los profesionales y el identificador de uno o una de
ellos. La función debe retornar el nombre del o la profesional individualizado por ese
identificador, o un string vacío en caso de que el identificador no se encuentre en la lista.

Ejemplo:
>>> print(buscar_profesional(profesionales, 443))
John

3. Implemente la función jefe(profesionales, turnos), que recibe las listas descritas en el


enunciado del problema. La función debe retornar el nombre del o la profesional que menor
cantidad de turnos tiene asignados. Si hay empate, debe retornar cualquiera de los que
empatan en el mínimo.

Ejemplo:
>>> print(jefe(profesionales, turnos))
Beth
Programación – Evaluación Formativa Diagnóstica – Uso de Listas

B. Trenes

En la ciudad de Pythonia todos los trenes realizan el mismo recorrido, pasando por cada
una de las estaciones cuyo orden se encuentra en la lista estaciones. El tiempo entre una
estación y otra depende del tipo de tren. Los trenes Expreso tardan 2 minutos en ir desde
una estación a la siguiente, los trenes Normal demoran 5 minutos, y los trenes de tipo Corto
tardan 7 minutos. Suponga que el tiempo que el tren se detiene en las estaciones es
despreciable, por lo que no será considerado para la solución de este problema. Los tipos
de trenes se encuentran en la lista de tuplas tipos. Cada tupla contiene dos elementos: El
primero corresponde a un string con el tipo de tren, y el segundo a una lista de strings con
los identificadores únicos de los trenes que pertenecen a ese tipo.
Finalmente, la lista de trenes contiene tuplas de tres elementos. El primero corresponde al
identificador único del tren y los dos siguientes son strings que corresponden a las horas y
minutos del horario de salida del tren desde la primera estación de la línea: la Estación
Central de Pythonia.

estaciones = [
'Estacion Central' , 'Sal y Santo' , 'Pytronato' , 'La Pysterna' , 'Pynstein' , 'Estadio Nacional' ,
'Pio-Pio' ,
'Plaza Python Alto', . . .
]
tipos = [
('Expreso', ['E07','F07','F08', ...]),
('Normal', ['G00','H00', ...]),
('Corto', ['B00','C01', ...])
]
trenes = [ ('E07','09','03'), ('F07','10','14'), ('H00','09','23') , ('B00','08','00') , ('G00','08','46') ,
('C01','13','59') , ('F08','11','02'), . . .
]

Desarrolle la función proximos_trenes(estaciones, tipos, trenes, est, hor) donde est es un


string con el nombre de la estación en la que se encuentra el pasajero y hor es una tupla en
formato (’HH’,’MM’) que indica la hora actual. La función debe retornar una lista de tuplas
con los trenes que aún no han pasado por la estación actual est a la hora actual hor. El
primer elemento de cada tupla corresponde al identificador del tren, y el segundo a los
minutos que faltan para el arribo del tren a la estación actual est. En caso de no haber
trenes que queden por pasar en la hora consultada, se debe retornar una lista vacía.

Ejemplos:
>>> proximos_trenes(estaciones, tipos, trenes, 'Pytronato', ('09','06'))
[('E07',1), ('F07',72), ('H00',27), ('F08',120), ('C01',307)]
>>> print proximos_trenes(estaciones, tipos, trenes, 'Pio-Pio', ('11','00'))
[('C01',221), ('F08',14)]
>>> proximos_trenes(estaciones, tipos, trenes, 'Sal y Santo', ('15','00'))
[]
IWI131 Programación (Fase 2) — Ejercicios Semana 1: Strings
1. El ministro de educación de Pythonia tiene una política para atender las necesidades
que tienen los colegios que están bajo su jurisdicción. Cada vez que se requiere hacer
reparaciones en la infraestructura en un colegio, el ministro les sugiere organizar un bingo
para que se puedan recaudar los fondos necesarios. Para jugar al bingo, se utilizan
cartones que contienen N números distintos y desordenados, representados por strings de
la forma ‘numero1-numero2-...-numeroN’ con el carácter guión ‘-’ como separador de los
números. Tener en cuenta que los números x del cartón están en el rango 0 < x ≤ 99, es
decir, tienen solo 2 dígitos.

En base a lo anterior, se le solicita:

1. Escriba la función verificar numero(numero,cartón) que recibe como parámetro un


número entero y un string con un cartón de bingo. Esta función debe retornar True si el
El número ingresado está contenido en el cartón de bingo y False en caso contrario.

>>> verificar_numero(2,'1-12-54-5')
False
>>> verificar_numero(54,'1-12-54-5')
True

2. Escriba un programa que simule un juego de bingo para dos jugadores y muestre al
ganador. Deberá ingresar como entrada los cartones de cada jugador y luego los números
que vayan saliendo en la tómbola. El ganador será aquel jugador que logre marcar todos los
números de su cartón. Si ocurre un empate deberá indicar que ambos jugadores ganaron.
Observaciones: Los datos de la tómbola que se van ingresando serán siempre correctos y
no se debe considerar mal uso del programa, como por ejemplo, ingresar números
repetidos de la tómbola.

Carton del Jugador 1: 1-12-54-5 Carton del Jugador 1: 1-12-54-5


Carton del Jugador 2: 3-6-12-2 Carton del Jugador 2: 3-6-12-2
Ingrese numero de la tombola: 1 Ingrese numero de la tombola: 1
Ingrese numero de la tombola: 6 Ingrese numero de la tombola: 6
Ingrese numero de la tombola: 4 Ingrese numero de la tombola: 4
Ingrese numero de la tombola: 3 Ingrese numero de la tombola: 3
Ingrese numero de la tombola: 54 Ingrese numero de la tombola: 54
Ingrese numero de la tombola: 8 Ingrese numero de la tombola: 2
Ingrese numero de la tombola: 5 Ingrese numero de la tombola: 5
Ingrese numero de la tombola: 12 Ingrese numero de la tombola: 12
El ganador es el Jugador 1 Ambos jugadores ganan
IWI131 Programación (Fase 2) — Ejercicios Semana 1: Strings
2. El servicio de inteligencia de Pythonia ha estado monitoreando los mensajes de texto
que recibe el líder del país de Javapolis, y ha detectado un patrón en estos, pero no ha
podido descifrar qué dicen los mensajes, puesto que requieren de un servicio rápido. Como
han estado celebrando sus fiestas patrias, nadie ha tenido tiempo de implementar una
solución, por lo que han acudido a ud para que los apoye en esta importante misión.
Ellos detectaron que el líder recibe muchas palabras, pero solo las que contienen una clave
en alguna parte, son consideradas en el mensaje. Además, notaron que cuando quieren dar
por finalizado un mensaje, usan la palabra out. Notar que en Javapolis, solo trabajan con
letras minúsculas.
El servicio de inteligencia logró crear la función get_pos(palabra, clave), la cual devuelve la
posición en la cual comienza la clave dentro de la palabra y en caso contrario retorna -1.
Notar que las posiciones comienzan desde 0. A continuación, se presentan ejemplos de
cómo funciona get_pos.

>>> get_pos('foniwida', 'iwi')


3
>>> get_pos('primavera','iwi')
-1

En base a lo descrito anteriormente se le solicita a usted lo siguiente:


1. Escriba la función get palabra(palabra, clave) la cual recibe 2 textos. La función debe
retornar la palabra desencriptada, es decir, sin la palabra clave en su interior. Si no existe la
palabra clave en su interior debe retornar -1. Asuma que la palabra contiene a lo m´as una
vez la clave.

>>> get_palabra('foniwida', 'iwi')


fonda
>>> get_palabra('iwien','iwi')
en
>>> get_palabra('fiesta','iwi') -1

2. Desarrolle un programa que solicite el ingreso de la clave que se usó para encriptar las
palabras y luego solicite el ingreso de palabras hasta que se ingrese el texto out. En dicho
momento, convertirá las palabras encriptadas y desplegará por pantalla el mensaje oculto,
desifrado.
Ingrese clave: iwi
Ingrese palabra: i wana be
Ingrese palabra: feliiwices
Ingrese palabra: programar
Ingrese palabra: public
Ingrese palabra: stdout
Ingrese palabra: iwilos
Ingrese palabra: class
Ingrese palabra: primavera
Ingrese palabra: cuatroiwi
Ingrese palabra: cueca
Ingrese palabra: i win
Ingrese palabra: out
El mensaje oculto es: felices los cuatro
IWI131 Programación (Fase 2) — Ejercicios Semana 1: Strings
3. La comisión organizadora de la semana mechona creó un concurso on line, en el cual
sus 3 alianzas deben participar. El concurso consta de una serie de turnos, en los cuales
cada alianza debe ingresar una palabra. La palabra con mayor cantidad de vocales gana. Si
dos o más alianzas igualan en el máximo de vocales, nadie gana esa ronda. El concurso
termina cuando una alianza logre ganar x juegos (meta), donde x debe definirse al inicio del
juego. En base a lo anterior, la comisión solicita a usted implementar lo siguiente:

1. Escriba la función ganador(c1,c2,c3,meta), la cual recibe 4 parámetros, la cantidad de


juegos ganados por la alianza 1, 2 y 3 y la meta a lograr en el juego. La función debe
retornar el número de la alianza ganadora. En caso de no existir ganador, debe retornar el
valor entero 0 (cero).
Nota: Tener en cuenta que no pueden existir empates en las alianzas al momento de
alcanzar la meta.

>>> ganador(2,5,3,5)
2
>>> ganador(1,3,3,5)
0

2. Escriba la función contar(palabra) que reciba un string palabra. La función debe retornar
la cantidad de vocales existentes en la palabra recibida.
>>> contar('paralelepipedo')
7
>>> contar('str')
0

3. Desarrolle un programa que solicite la meta del Juego, y luego solicite las palabras de
cada alianza por turno, hasta que exista una alianza que logre la meta. Asuma que las
palabras pueden ser ingresadas en mayúsculas o minúsculas. A continuación se presenta
un ejemplo de cómo debería lucir el programa.

Ingrese meta del juego: 3


alianza 1: Paralelepipedo
alianza 2: reunA
alianza 3: salIda
alianza 1: Tartamudo
alianza 2: Mauricio
alianza 3: semana
alianza 1: mUrciElAgO
alianza 2: rescate
alianza 3: Salvavida
alianza 1: temperatura
alianza 2: Sala
alianza 3: Certamen
La alianza ganadora es 1
IWI131 Programación (Fase 2) — Ejercicios Semana 2: Listas y Tuplas
1. La empresa PyCornerShop dispone de una aplicación que le permite a sus usuarios
conseguir productos del supermercado desde la comodidad del hogar usando sus teléfonos
móviles. La información de los repartidores y usuarios se encuentra almacenada en dos
listas llamadas repartidores y usuarios, respectivamente. La lista usuarios contiene tuplas
de 2 elementos: Código del usuario y ubicación del domicilio (tupla con coordenadas):
usuarios = [(1221, (5, 2)), (441, (8, 2)), (587, (10, 1)), ...]
La lista repartidores contiene tuplas de 4 elementos: El nombre del repartidor, su ubicación
actual (tupla con coordenadas), disponibilidad (valor booleano) y lista de visitas a usuarios.
Esta lista contiene tuplas con el código del usuario y la cantidad de veces que ha sido
visitado por el repartidor:

repartidores = [
('rayo macuin', (10, 2), True, [(1221, 5), (441, 8), (587, 2)]),
('reparti dhor', (9, 3), True, [(1221, 2), (441, 5), (587, 3)]),
('eliseo al-azar', (5, 5), False, [(1221, 8), (441, 2)]), ...
]

Si un repartidor nunca ha visitado a un usuario, no aparecerá en la lista una tupla con el


código de ese usuario.
Para que la PyCornerShop pueda funcionar de manera eficiente, le solicita a Ud. que
implemente una función llamada buscar repartidor(usuarios,repartidores,código) que reciba
como parámetros las listas antes mencionadas y un código de usuario. La función debe
retornar una lista de repartidores disponibles y cercanos, ordenados de manera
descendente, según el número de visitas que hayan realizado al usuario indicado. Un
repartidor se considera cercano si está ubicado a menos de 4 km del usuario y para esto
considere que las tuplas de ubicación tienen valores enteros medidos en km. Finalmente, si
no hay repartidores cercanos, la función debe retornar una lista vacía.

Ejemplos:

>>> buscar_repartidor(usuarios,repartidores,587)
['reparti dhor', 'rayo macuin']
>>> buscar_repartidor(usuarios,repartidores,441)
['rayo macuin', 'reparti dhor']
>>> buscar_repartidor(usuarios,repartidores,1221)
[]

Nota: Para calcular la distancia d entre un usuario ubicado en (x1, y1) y un repartidor
2 2
ubicado en (x2, y2) se debe utilizar la fórmula: 𝑑 = (𝑥1 − 𝑥2) + (𝑦1 − 𝑦2)
IWI131 Programación (Fase 2) — Ejercicios Semana 2: Listas y Tuplas

2. El prestamista Vito Corleone, aburrido de perseguir a sus clientes, ha solicitado la ayuda


de algún astro de la programación para resolver sus problemas logísticos.
Vito cuenta con la lista clientes, la que tiene tuplas con el nombre de cada cliente, el monto
adeudado y la fecha del último pago (también dentro de una tupla).

clientes = [
('Don Ramon', 3500, (9, 4, 2014)),
('Miguel', 2785, (30,10, 2014)),
('Cesar', 100, (28, 5, 2015)), ...]

Nota: Esto solo es un ejemplo, considere que la lista puede tener muchos clientes. Sin
embargo, asume que cada nombre de cliente aparece solo una vez.

1. Implemente la función deuda total(clientes), que reciba como entrada la lista de tuplas
clientes, y retorne la suma de las deudas de todos los deudores.
>>> deuda_total(clientes)
6385

2. Implemente la función mayor deudor(clientes, ultimo), que retorne el nombre del


cliente que tiene la mayor deuda, y que además su último pago haya sido realizado en el
año último. Si no hay clientes con pagos en el año último, retorna un string vacío.

>>> mayor_deudor(clientes, 2014)


'Don Ramon'
>>> mayor_deudor(clientes, 2015)
'Cesar'
>>> mayor_deudor(clientes, 2016)
''
IWI131 Programaci´on (Fase 2) — Ejercicios Semana 2: Listas y Tuplas
3. Una organización internacional de conservación construyó un domo de cristal para
mantener un micro clima en una cierta superficie. Para esto, se instalaron miles de paneles
de cristal, contando cada uno de ellos con varios sensores que reportan información
diariamente a un computador central. Cada sensor transmite una vez al día una tupla con su
medición, indicando la fecha, su identificador único y el valor de la medición. Como ejemplo,
una medición sería: (2016, 3, 27, ’aa:01:10’, 0.0021)
Todas estas mediciones son colocadas en una lista en el computador central, la cual es
mantenida ordenada descendentemente por el valor medido. Esto facilita la recuperación
posterior de mediciones, debido a que por el gran volumen del registro resulta imposible
ordenarlo con cualquiera de los algoritmos disponibles en la actualidad. A modo de ejemplo,
un posible registro sería:

registro = [
(2016, 1, 25,'d2:00:10', 0.0112),
(2015, 10, 24,'3e:15:c2', 0.0105),
(2015, 11, 3,'28:0b:5c', 0.0009), ...
]

Usted debe:

1. Construir la función agregar_medicion(registro, A, M, D, id, val), la que agrega la


información capturada al registro. Considere A el año, M el mes y D el día de la
medición.

>>> agregar_medicion(registro, 2016, 3, 27, 'aa:01:10', 0.0021)


>>> print(registro)
[(2016, 1, 25, 'd2:00:10', 0.0112), (2015, 10, 24, '3e:15:c2', 0.0105), (2016, 3, 27, 'aa:01:10',
0.0021), (2015, 11, 3, '28:0b:5c', 0.0009)]

2. Construir la función corregir_medicion(registro, A, M, D, id, nvo valor) que


corrige el valor medido de un sensor. La función recibe como parámetro el registro, el año,
mes y día de la medición a corregir, el identificador único y el nuevo valor medido.
Considere que luego de esta actualización el registro debe permanecer ordenado como se
indicó en el enunciado.

>>> corregir_medicion(registro, 2016, 3, 27, 'aa:01:10', 0.0221)


>>> print(registro)
[(2016, 3, 27, 'aa:01:10', 0.0221), (2016, 1, 25, 'd2:00:10', 0.0112), (2015, 10, 24, '3e:15:c2',
0.0105), (2015, 11, 3, '28:0b:5c',0.0009)]

3. Construir la función sensores sobre umbral(registro, u), la que recibe un valor de


medición usado como umbral y también el registro. Esta función entrega un listado con ´
todos aquellos sensores, cuyo valor medido se encontró por sobre el umbral u entregado.
Este listado no debe contener identificadores duplicados.
>>> sensores_sobre_umbral(registro, 0.01)
['aa:01:10', 'd2:00:10', '3e:15:c2']
IWI131 Programación (Fase 2) — Ejercicios Semana 2: Listas y Tuplas
4. Cineton, una nueva cadena de cines creada por emprendedores de la USM, está
ingresando al mercado cinematográfico. Por eso, necesita de su ayuda para implementar
ciertas funciones en Python y con ellas manejar la cartelera. Para ello, se cuenta con la
información de la cartelera de cine en una lista de tuplas como cartelera. El formato de cada
tupla en la lista es el siguiente:

(mes, país, nombre_película, ano_filmación, [sala1, sala2, ...])

Un ejemplo se muestra a continuación: ´ cartelera = [


('febrero','FRANCIA','El muelle', 1962, ['sala1','sala3']),
('febrero','FRANCIA','La dama de honor', 2004, ['sala1','sala4']),
('abril','RUSIA','Padre del soldado', 1964, ['sala3','sala2','sala4']),
('enero','CHILE','Gloria', 2013, ['sala1','sala2']),
('mayo','MEXICO','Cumbres', 2013, ['sala3','sala2']),
('julio','FRANCIA','Melo', 1986, ['sala3','sala1']),
('junio','BELGICA','Rondo', 2012, ['sala4','sala2']),
('marzo','ALEMANIA','Tiempo de Canibales', 2014, ['sala1','sala2']),
('marzo','ALEMANIA','Soul Kitchen', 2009, ['sala3','sala4']),
...]

Para entender mejor, en cartelera la película ‘Gloria’ (Chilena) creada en 2013, se exhibirá
el mes de ‘enero’ en las ‘sala1’ y ‘sala2’.

1. Desarrolle la función película por país(cartelera, país) que recibe la lista de la


cartelera y el nombre de un país, y que retorne la lista con las pelıculas realizadas en dicho
país. Cada elemento de esta lista resultante es una tupla con el nombre de la película y el
año de filmación.

>>> pelicula_por_pais(cartelera, 'FRANCIA')


[('El muelle', 1962), ('La dama de honor', 2004), ('Melo', 1986)]

2. Desarrolle la función peliculas por sala(cartelera, sala) que reciba la lista de la


cartelera y la sala donde se exhibirán las distintas películas. Esta función debe retornar una
lista de tuplas, donde cada tupla tiene la forma (mes, listapelis) con mes un string
de un mes y listapelis una lista con todas las películas que se exhibirán en sala. Solo
deberá incluir tuplas en donde listapelis contenga al menos una película.

>>> pelicula_por_sala(cartelera, 'sala1')


[('enero', ['Gloria']), ('febrero', ['El muelle', 'La dama de honor']),
('marzo', ['Tiempo de Canibales']), ('julio', ['Melo'])]

3. Desarrolle la función más antigua(cartelera) que retorne el nombre de la película y el


país donde fue filmada la película más antigua. Si dos o más películas son las más
antiguas,
seleccione cualquiera.
>>> mas_antigua(cartelera) ('El muelle', 'FRANCIA')
IWI131 Programación (Fase 2) — Ejercicios Semana 2: Listas y Tuplas
5. Inversiones RCaray está siendo investigada por una presunta estafa millonaria. Su
presidente género una asociación ilícita utilizando los dineros de cientos de personas
durante los tres últimos años por medio de varias empresas fantasma. Las investigaciones
pudieron reunir una información parcial acerca de las personas y las sumas de dinero
involucradas. La policía ha recaudado esta información en una lista llamada estafados, la
que almacena tuplas de la forma (rut, deuda, empresa, fecha), donde rut está en el formato
string, deuda en formato entero, empresa en formato string y fecha es una tupla (dd, mm,
aaaa). A continuación, se muestra un ejemplo de la estructura estafados:

estafados = [
('12.234.567-8', 2000000,'pelados_furiosos', (25, 5, 2015)), ('9.111.567-k',
5500000,'multibank', (1, 10, 2014)), ('14.987.007-1', 100000000,'inversiones_seguras', (30,
11, 2016)), ('12.234.567-8', 10000000,'multibank', (2, 7, 2015)), ('12.234.567-8',
2500000,'multibank', (18, 1, 2016)), ...]

Una misma persona pudo ser estafada por varias empresas en distintas fechas. De acuerdo
a la información anterior, se le solicita implementar las siguientes funciones:

1. estafado por(lista, rut), función que recibe 2 parámetros. La lista de tuplas estafados
y un string correspondiente al rut de la persona. Esta debe retornar una lista con las
distintas
empresas que estafaron a la persona con dicho rut. En caso de que el rut ingresado no se
encuentre, entregar el mensaje ’Rut no estafado’.

>>> estafado_por(estafados,'12.234.567-8')
['pelados_furiosos','multibank']
>>> estafado_por(estafados,'19.678.222-2')
Rut no estafado

2. ranking(estafados), función que recibe como parámetro la lista de estafados y retorna


una lista de tuplas, donde cada tupla (nombre, dinero) contiene el nombre de una
empresa y la cantidad de dinero que cada empresa logró acumular. La lista debe estar
ordenada de mayor a menor por el dinero recaudado.

>>> ranking(estafados)
[('inversiones_seguras', 100000000), ('multibank', 18000000),
('pelados_furiosos', 2000000), ...]

3. estafados por fecha(estafados, inicial, final), función que recibe como parámetros la lista
de estafados, la tupla fecha inicial y la tupla fecha final en formato tuplas (dd,
mm, aaaa). La función retorna una lista de tuplas (rut, deuda) ordenadas en forma
descendente según la deuda total generada entre las fechas entregadas.

>>> estafados_por_fecha(estafados,(03,01,2016),(01,01,2017))
[('14.987.007-1', 100000000), ('12.234.567-8', 2500000), ...]
IWI131 Programación (Fase 2) — Ejercicios Semana 3: Diccionarios y Archivos
1. En el año 28908 hay elecciones municipales en Pythonlandia y cada mesa de votación
cuenta con una urna sumamente tecnológica. Esta urna escanea el voto depositado y
escribe la información en un archivo siguiendo el formato rut:voto, donde rut es el rut de la
persona y voto es el código del candidato por el cual vota dicha persona. Ver ejemplo:
votaciones.txt. Además, el código y nombre de los candidatos se encuentran en el archivo
candidatos.txt:

votaciones.txt
9173315-3:A1
19642628-0:A2
21933617-9:X
27 173315-8:A2
516314-1:C2
...

candidatos.txt
A1:Alejandro Pinera
A2:Sebastian Guillier
A3:Beatriz Kast
A4:Leopoldo Sharp
A5:Jorge Mendez
...

Desarrolle la función resultados(vot, can), donde vot y can son strings con los nombres de
los archivos anteriores. Esta función debe generar el archivo resultados.txt, cuyo
encabezado es el total de votos válidamente emitidos, es decir, eliminando los votos nulos.
Luego está el porcentaje de votos que obtuvo cada candidato ordenado de mayor a menor.
Si un elector vota por un candidato que no se encuentra en el archivo candidatos.txt el voto
es nulo. Guíese por el ejemplo (resultados.txt):

>>> resultados('votaciones.txt', 'candidatos.txt')

resultados.txt
Total de votos: 3

Sebastian Guillier 66.6 %


Alejandro Pinera 33.3 %
Beatriz Kast 0.0 %
Leopoldo Sharp 0.0 %
Jorge Mendez 0.0 %
IWI131 Programación (Fase 2) — Ejercicios Semana 3: Diccionarios y Archivos
2. Un servicio de streaming le ha pedido a sus suscriptores que voten y dejen comentarios
sobre sus series favoritas. Toda la información recopilada se tiene en el archivo ´
opiniones.txt. Este archivo contiene en cada línea el título de la serie, el comentario de la
persona y su voto.

opiniones.txt
Lost:Que gran final:4.8
Westworld:Interesante, pero aburre:2.5
GOT:Fome, aguante SPARTACUS:1.0
Westworld:No entiendo nada:4.5
Mr. Robot:La T2 apesta:5.0
GOT:#DominGOT:5.0
...

TAREA 1. Escriba la función promedio(archivo) que recibe un string con el nombre del
archivo y retorna un diccionario cuyas llaves sean el nombre de todas las series del archivo
y su valor un flotante con el promedio de las opiniones de la gente.

>>> promedio('opiniones.txt')
{'Lost': 4.8, 'Westworld': 3.5, 'GOT': 3.0, 'Mr. Robot': 5.0}

TAREA 2. Escriba la función opinar(archivo, serie, comentario, nota) que recibe un string
con el nombre del archivo, un string con el título de una serie, un string con un mensaje y un
flotante con un voto. Esta función debe agregar esa información al final del archivo.

>>> opinar('opiniones.txt', 'GOT', 'Me gusta pero asusta', 4.0)

opiniones.txt

Lost:Que gran final:4.8


Westworld:Interesante, pero aburre:2.5
GOT:Fome, aguante SPARTACUS:1.0
Westworld:No entiendo nada:4.5
Mr. Robot:La T2 apesta:5.0
GOT:#DominGOT:5.0
GOT:Me gusta pero asusta:4.0
IWI131 Programación (Fase 2) — Ejercicios Semana 3: Diccionarios y Archivos
3. Un concesionario de una autopista mantiene información relevante de sus clientes en 3
archivos:
Un registro diario de patentes que circulan por ella, la información de las patentes que
contienen o no contienen TAG (indicado con un 1 o un 0 respectivamente) y por último, la
información de los dueños y de sus patentes asociadas. A modo de ejemplo se presenta
cada uno de los archivos ˜ en el cuadro a continuación:

registro_diario.txt
abmn32
crtj12
dflp11
hb5101
...

info_dueños.txt
Alex Perez;crtj12,hb5101,kcfl36,emda16
Aquiles Castro ;abmn32,tljg99,avrv33
Maria Gana;ab7677
Fede Santos;utfs90,dflp11
...

De la información de ejemplo se desprende que Alex Perez tiene cuatro vehículos con
patentes crtj12, hb5101, kcf136 y emda16. Solo crtj12 cuenta con dispositivo TAG y los
otros tres no. Además, los vehículos con patente crtj12 y hb5101 pasaron durante el día por
la autopista. Siguiendo con el ejemplo, Maria Gana tiene solamente un vehículo y no circuló
durante el día por la autopista. Considere que en el archivo info_dueños.txt cada persona
aparece solamente una vez y puede tener un número variable de patentes.

patentes.txt
crtj12,1
abmn32,0
hb5101,0
dflp11,1
tljg99,0
jfzo10,0
kcfl36,0
utfs90,0
ab7677,0
avrv33,0
emda16,0 ...

a) Para saber cuántos vehículos tiene cada persona construya la función


patentes_por_dueño(ar) que recibe el nombre del archivo que contiene la información de los
dueños y retorna un diccionario. Este diccionario debe tener como llave el nombre y apellido
de la persona y como valor el número de vehículos que posee.
>>> patentes_por_due˜ no('info_due˜ nos.txt')
{'Alex Perez': 4, 'Aquiles Castro ': 3, 'Fede Santos': 2, 'Maria Gana': 1}

b) Se requiere listar a aquellas patentes que circularon durante el día por la autopista y que
no disponen de TAG. Para esto, construya la función patentes_multadas(registro,patentes)
que recibe los nombres de los archivos que contienen el registro diario de patentes y el
registro general de patentes respectivamente. Esta función debe retornar una lista con las
patentes que satisfacen el criterio ya mencionado.
>>> patentes_multadas('registro_diario.txt', 'patentes.txt')
['abmn32', 'hb5101']

c) Finalmente, se necesita listar el nombre de cada persona multada. Para esto construya la
función personas_multadas(registro, patentes, dueños) que recibe los nombres de los tres
archivos anteriores. Esta función debe retornar una lista con los nombres de los dueños de
las patentes multadas. Este listado no debe contener nombres repetidos.
>>> personas_multadas('registro_diario.txt','patentes.txt','info_dueños.txt')
['Aquiles Castro ', 'Alex Perez']
IWI131 Programación (Fase 2) — Ejercicios Semana 3: Diccionarios y Archivos
4. PyLab es un laboratorio que está desarrollando vacunas para dos tipos de
enfermedades. Cada mes algunos pacientes son inyectados con vacunas experimentales y
se mide la presencia de tres sustancias en su cuerpo: BR1, BR2 y KR.
En un archivo (datos.txt) se guardan los resultados tras probar una nueva vacuna. La
información de un paciente está en una línea del tipo: CP;G;BR1;BR2;KR, donde CP es el
código del paciente, G es el género (1: femenino, 0: masculino) y BR1, BR2, KR son las tres
sustancias que, cuando están presentes, tienen un 1 y sino un 0. Por ejemplo la paciente
JP87 solo presenta la sustancia KR.

datos.txt
JP87;1;0;0;1
AY0231;0;1;1;0
DR762399;0;0;0;0
ED235;1;0;0;1
W4350;1;0;1;1
...
La probabilidad de desarrollar la enfermedad 1 esta dada por:

Enfermedad-1 = 10 · KR + 30 · BR2 + 4

La probabilidad de desarrollar la enfermedad 2 depende del género y está dada por:

Enfermedad-2 = 15 · BR1 + 65 · BR2 + 3 si G == 1,


5 · BR1 + 8 · BR2 + 6 si G == 0.

Por otro lado se cuenta con el archivo histórico de pacientes en el formato CP;PE1;PE2,
donde CP es el código del paciente, PE1 es la probabilidad de desarrollar la enfermedad 1 y
PE2 la enfermedad 2.

Escriba la función actualizar(ad,ah,ah2), donde ad es el nombre de un archivo de datos tras


probar una nueva vacuna (como datos.txt), ah es el nombre de un archivo de tipo histórico
(como historico.txt) y ah2 es el nombre del nuevo archivo donde se escribirá la información
actualizada considerando los dos archivos anteriormente descritos (el de datos y el
histórico).

historico.txt
JP87;4 %;3 %
KL898989;4 %;14 %
AY0231;4 %;6 %
DR762399;34 %;11 %
ED235;14 %;3 %
W4350;14 %;68 %
...

H2.txt
JP87;14 %;3 %
KL898989;4 %;14 %
AY0231;34 %;19 %
DR762399;4 %;6 %
ED235;14 %;3 %
W4350;44 %;68 %
...
Por ejemplo al ejecutar actualizar("datos.txt", "historico.txt", "H2.txt"), se genera el archivo
’historico2.txt’ como se ve en el ejemplo anterior.
El archivo ah2 será un nuevo archivo histórico en donde, si el paciente existía y probó la
vacuna, se reemplazan las probabilidades de las enfermedades según el archivo de datos
(ad). Si el paciente no existía, lo agrega en cualquier lugar y finalmente si el paciente
existía, pero no probó la vacuna, es decir, no aparece en el archivo ad, lo copia directo en el
archivo ah2. Guíese por el ejemplo.

Nota: Los archivos de ejemplo tienen más líneas. Recuerde que puede crear todas las
funciones auxiliares que estime conveniente.
IWI131 Programación (Fase 2) — Ejercicios Semana 3: Diccionarios y Archivos
5. El traductor de Openinglish.com es un éxito porque ha recopilado en el archivo
english.txt todas las palabras del idioma inglés y su correspondiente traducción al español.

english.txt
the:el
i:yo
and:y
to:a
my:mi
or:o
...

libro.txt
Call me Ishmael Some years ago never mind how long precisely having little or no money in
my purse and nothing particular to interest me on shore I thought I would sail about a little
and see the watery part of the world
...

Ahora es posible traducir cualquier archivo de texto en inglés al español buscando la


traducción de cada término en el archivo english.txt y escribiendo en un nuevo archivo la
palabra en español.

Escriba la función traducir(archivo) que recibe un string con el nombre del archivo que se
quiere traducir y genera un archivo de nombre ‘traducido.txt’ con todas las palabras del
archivo original traducidas. Si alguna palabra no aparece en el archivo english.txt es porque
no tiene traducción y se debe mantener intacta. Vea a continuaci ´ on que resultado entrega
el traductor de Openinglish para el archivo libro.txt

traducido.txt
llama me ishmael algunos años atras nunca mente como largo precisamente teniendo poco
o no dinero en mi bolso y nada particular a interes me en costa yo pensaba yo haria
navegar sobre un poco y ver el mojado parte de el mundo
IWI131 Programación (Fase 2) — Ejercicios Semana 3: Diccionarios y Archivos
6. En el cine Ciclo el precio de la entrada para ver cualquier película por primera vez es de
$2000, luego el precio va reduciéndose a la mitad, cada vez que una misma persona ve la
misma película, teniendo en cuenta que el precio más bajo a pagar por una entrada es
$125.
Para esto, el cine cuenta con un archivo llamado clientes.txt como se muestra en el ejemplo,
en el cual se registra a todos sus clientes solo con un nombre y un apellido (separado por
espacio).

clientes.txt
Luca Caminacielos
Artur Ito
...

Por cada cliente se tiene un archivo llamado nombre_apellido.txt, cuyo contenido


corresponde a cada película que dicha persona ha visto en este cine, donde la primera línea
corresponde a la primera película que este cliente vio en este cine, luego la segunda línea
corresponde a la segunda película vista y así sucesivamente. A continuación se muestra a
modo de ejemplo las películas que han visto los clientes del archivo anterior.

Luca_Caminacielos.txt
Star Wars
Rogue One
Star Wars
El origen
Star Wars
Star Wars
Star Wars
Star Wars

Artur_Ito.txt
El origen
Star Wars

Desarrolle un programa que solicite como entrada el nombre de cierta película, y muestre
por pantalla el total de dinero recaudado por esa película en este cine. Además, debe
generar un archivo de texto cuyo nombre coincida con el nombre COMPLETO de la
película, separado por espacios en blanco (por ejemplo: El origen.txt), que tenga como
contenido el nombre completo de todos los clientes que la han visto al menos una vez (el
nombre no debe estar repetido y no importa el orden en que se escriban). Es importante
considerar que si ningún cliente ha visto la película indicada, el archivo no debe crearse.

Nota: Los puntos suspensivos en los archivos reflejan que pueden existir muchos más
datos.

Ejemplo
Star Wars
Dinero recaudado por Star Wars : $6000
Star Wars.txt
Luca Caminacielos
Artur Ito

También podría gustarte