0% encontró este documento útil (0 votos)
12 vistas5 páginas

Taller 2

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)
12 vistas5 páginas

Taller 2

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
Está en la página 1/ 5

Nombres: Camilo Esteban Gómez Forero Correos electrónicos: cgomezfo@unal.edu.

co
Lia García Pérez ligarciape@unal.edu.co
Paula Estefanía Urrego Villalobos purrego@unal.edu.co

Taller No 2 - Programación en Python Programación de Computadores - Grupo 18

Ejercicio 1: Crear una función llamada actualizarInventario que reciba como parámetros la
matriz de inventario y un conjunto de transacciones (representadas como una lista de tuplas,
donde cada tupla contiene el nombre del producto y la cantidad vendida/comprada). La función
debe actualizar el inventario basándose en estas transacciones y retornar la matriz actualizada.

inventario = [["Manzanas", 100, 0.50], ["Naranjas", 150, 0.30],


["Almojabanas", 50, 0.1], ["Perros", 100, 0.5]]
transacciones = [("Manzanas", -20), ("Naranjas", 30), ("Perros", 20),
("Almojabanas", -30)]

def actualizarInventario(matriz_inventario, lista_transacciones) :


for item in matriz_inventario:
for producto in lista_transacciones:
cantidad = producto[1]
if producto[0] == item[0] :
item[1] += cantidad
else:
continue
return matriz_inventario

actualizarInventario(inventario, transacciones)

Lo que se realizó fue definir una función que tomaba dos parámetros como entrada: la matriz del
inventario y una lista en la que se contienen todas las transacciones que se realizaron en la tienda.
Lo que hace la función es interar (por medio de los for ) en los elementos del arreglo y la lista
para ir mirando si el nombre del producto en la matriz coincide con el de la lista. Luego,
modifica su cantidad dependiendo de si se suma o resta en la transacción.

Ejercicio 2: Desarrollar una función analizarTemperaturas que lea el archivo CSV y encuentre el
día con la mayor diferencia de temperatura. La función debe devolver este día y la diferencia de
temperatura.

import csv

def analizarTemperaturas(archivo):
with open(archivo, 'r') as file:
lector_csv = csv.DictReader(file)
max_dif_temp = 0
dia_max_dif = None

for fila in lector_csv:


temp_max = int(fila["TempMax"])
temp_min = int(fila["TempMin"])
dif_temp = temp_max - temp_min

if dif_temp > max_dif_temp:


max_dif_temp = dif_temp
dia_max_dif = fila["Día"]

return f"Día con mayor diferencia de temperatura:


{dia_max_dif}, Diferencia: {max_dif_temp} grados"

La función extrae los valores de temperatura máxima (TempMax) y mínima (TempMin) de la fila
actual y calcula la diferencia de temperatura entre ambos. Luego, compara la diferencia de
temperatura actual con la mayor diferencia registrada hasta el momento (mayor_diferencia). Si la
diferencia actual es mayor, se actualiza mayor_diferencia y se registra el día correspondiente
(fila[“Día”]). Se retorna el día y la mayor diferencia de temperatura.

import csv
datos = [["Día", "TempMax", "TempMin"],[1, 20, 10],[2, 25, 15],[3, 30,
10]]

with open('temperaturas.csv', 'w', newline='') as archivo:


escritor = csv.writer(archivo)
escritor.writerows(datos)
print(analizarTemperaturas('temperaturas.csv'))

Ejercicio 3: Crear una función llamada detectarConflictos que reciba como parámetro la matriz
de horarios de un estudiante. La función debe verificar si hay conflictos de horario (dos clases
que se solapen) y retornar una lista de todos los conflictos encontrados.

matriz_horarios = [['Matemáticas', 'Lunes', '08:00', '10:00'],


['Física', 'Lunes', '09:00', '11:00'],
['Química', 'Martes', '11:00', '13:00']]
def detectarConflictos(horarios):
conflictos = []

for i in range(len(horarios)):
for j in range(i + 1, len(horarios)):
if (horarios[i][1] == horarios[j][1] and
((horarios[i][2] <= horarios[j][2] < horarios[i][3]) or
(horarios[j][2] <= horarios[i][2] <
horarios[j][3]))):
conflictos.append([horarios[i][0], horarios[j][0]])

return conflictos

resultado = detectarConflictos(matriz_horarios)
print(resultado)

La función detectar conflictos recibe la matriz como entrada, comprueba si dos clases tienen el
mismo día (horarios[i][1] == horarios[j][1]) y si existe alguna superposición en sus horarios de
inicio y finalización. La comparación (horarios[i][2] <= horarios[j][2] < horarios[i][3]) verifica si
el inicio de la clase j está entre el inicio y final de la clase i. La comparación (horarios[j][2] <=
horarios[i][2] < horarios[j][3]) verifica si el inicio de la clase i está entre el inicio y final de la clase
j. Si alguna de estas condiciones es verdadera, se agrega una lista a conflictos que contiene los
nombres de las clases que están en conflicto.

Ejercicio 4: Desarrollar una función calcular Impuestos que lea el archivo CSV y calcule el
impuesto a pagar para cada contribuyente. La función debe escribir los resultados en un nuevo
archivo CSV.

import csv

ingresos = [["Nombre", "Ingresos", "Deducciones"],


["Juan", 50000, 5000],
["Maria", 70000, 7000]]

with open('ingresos.csv', 'w', newline='') as archivo:


escritor = csv.writer(archivo)
escritor.writerows(ingresos)

def calcularImpuestos(input_file, output_file):


with open(input_file, mode='r') as file:
# Utilizamos csv.DictReader para leer el archivo CSV
reader = csv.DictReader(file)
rows = list(reader)

Ejercicio 5: Implementar una función recursiva llamada busquedaBinaria que reciba una lista
ordenada, un elemento objetivo y retorne la posición del elemento en la lista (o -1 si el elemento
no está presente).
:
def busquedaBinaria(lista, objetivo, inicio=0, fin=None):
if fin is None:
fin = len(lista) - 1

if inicio > fin:


return -1

medio = (inicio + fin) // 2

if lista[medio] == objetivo:
return medio

elif lista[medio] > objetivo:


return busquedaBinaria(lista, objetivo, inicio, medio - 1)

else:
return busquedaBinaria(lista, objetivo, medio + 1, fin)

lista = [1, 3, 5, 7, 9]
elemento_objetivo = 5
busquedaBinaria(lista, elemento_objetivo)

En este ejercicio, se utilizó como base el link de apoyo que el profesor dejó en el taller. Una
analogía a lo que realiza la lista es ordenar los elementos de la lista en una recta numérica. Allí se
definen dos valores: el mínimo siempre estará en la posición 0, pero el máximo se encontrará en
cierta posición dependiendo del tamaño de la lista (esto se halla con el primer condicional).
Como la lista se ordena, si el elemento que se quiere buscar es más grande que el máximo
número en la lista, entonces automáticamente se retorna ‘-1’. Si esto no es así, lo que hace es ir
encontrando los puntos medios de cada partición identificando si el número está allí. Estas
particiones se harán hasta que finalmente se encuentra el número deseado en la mitad de esta.
Así, se va usando la función de manera recursiva.

Ejercicio 6: Desarrollar una función recursiva llamada generarFibonacci que reciba como
parámetro un número entero y retorne los primeros números de la secuencia de Fibonacci.

def generarFibonacci(n):
if n <= 0:
return []
elif n == 1:
return [0]
elif n == 2:
return [0, 1]
else:
fib_sequence = generarFibonacci(n - 1)
fib_sequence.append(fib_sequence[-1] + fib_sequence[-2])
return fib_sequence

generarFibonacci(5)

En esta función se mostrará el resultado en una lista. Si el número es negativo o es 0, se retorna


la lista vacía. Si es 1 o 2, por cómo se comporta la secuencia de Fibonacci, se retorna el 0 o, en el
otro caso, el 0 y el 1. Si n es mayor a 2, luego, utilizará la función recursivamente para ir
agregando a la lista los números de la secuencia.

Ejercicio 7: Desarrollar una función recursiva llamada calcularSuma que reciba como
parámetro un arreglo de números y retorne la suma total de sus elementos.

def calcularSuma(arreglo):
if not arreglo:
return 0
else:
return arreglo[0] + calcularSuma(arreglo[1:])
arreglo = [1, 2, 3, 4, 5, 6, 7]
calcularSuma(arreglo)

La función tiene como parámetro un arreglo. Si el arreglo está vacío, se retorna 0. Si no está
vacío, luego se irá sumando recursivamente cada elemento. La función suma el primer elemento
al resultado de la llamada recursiva, que es la suma de los elementos restantes. Este proceso se
repite hasta que el arreglo está vacío, y así, devuelve la suma total.

También podría gustarte