Proyectos Compu 2
Proyectos Compu 2
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:
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
SEGUNDO SEMESTRE
DE2B01 DEPORTE 0 0 2 0 12 UC
TERCER SEMESTRE
HU3B02 CULTURA 0 2 0 0 20 UC
CUARTO SEMESTRE
Dada la información de un pensum guarde los datos con los datos estructurados que
considere conveniente.
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.
Ejemplo:
>>> print(turno_emergencias(profesionales,turnos))
[1, 9, 2]
Ejemplo:
>>> print(buscar_profesional(profesionales, 443))
John
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'), . . .
]
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.
>>> 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.
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:
>>> 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.
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)]), ...
]
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
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
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:
Para entender mejor, en cartelera la película ‘Gloria’ (Chilena) creada en 2013, se exhibirá
el mes de ‘enero’ en las ‘sala1’ y ‘sala2’.
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
>>> 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.txt
Total de votos: 3
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.
opiniones.txt
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 ...
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
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.
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
...
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
...
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