Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Solucion al ejercicio de dataestructure #11

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
123 changes: 123 additions & 0 deletions functions.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
import csv


def almacenar_datos(archivo_csv):
datos = []

with open(archivo_csv, 'r') as archivo:
lector_csv = csv.reader(archivo)
encabezados = next(lector_csv)

for fila in lector_csv:
diccionario = dict(zip(encabezados, fila))
datos.append(diccionario)

return datos


def filtro_por_ciudad(datos, ciudad):

datos_filtrados = [dato['nombre'] for dato in datos if dato['ciudad'] == ciudad]

if datos_filtrados:
for nombre in datos_filtrados:
print(f"El estudiante {nombre} vive en la ciudad de {ciudad}")
else:
print(f"No se encontro la ciudad: {ciudad}")


def filtro_por_pais(datos, pais):

datos_filtrados = [dato['nombre'] for dato in datos if dato['pais'] == pais]

if datos_filtrados:
for nombre in datos_filtrados:
print(f"El estudiante {nombre} vive en el pais {pais}")
else:
print(f"No se encontro el pais: {pais}")


def mostrar_datos_rango_edades(datos, edad_min, edad_max):

datos_filtrados = [dato['nombre'] for dato in datos if edad_min <= int(dato['edad']) <= edad_max]

if datos_filtrados:
for nombre in datos_filtrados:
print(f"El estudiante {nombre} esta dentro del rango")
else:
print(f"No hay alumnos dentro del rango {edad_min}-{edad_max}")


def mostrar_todas_ciudades(datos):

datos_filtrados = {dato['ciudad'] for dato in datos}

for ciudad in datos_filtrados:
print(ciudad)


def promedio_de_edad_por_carrera(datos, carrera):

datos_filtrados = [int(dato['edad']) for dato in datos if dato['carrera'] == carrera]

suma = sum(datos_filtrados)
promedio = suma / len(datos_filtrados)

return promedio


def estado_estudiante_promedio_edad(datos, carrera):

nombres = [dato['nombre'] for dato in datos if dato['carrera'] == carrera]
edades = [int(dato['edad']) for dato in datos if dato['carrera'] == carrera]
promedio = promedio_de_edad_por_carrera(datos, carrera)

for nombre, edad in zip(nombres, edades):
if edad > promedio:
print(f"{nombre} ({edad}) esta por encima del promedio de edad ({promedio}) de la carrera.")
elif edad < promedio:
print(f"{nombre} ({edad}) esta por debajo del promedio de edad ({promedio}) de la carrera.")
else:
print(f"{nombre} tiene la misma ({edad}) que el promedio de edad ({promedio}) de la carrera.")


def agrupar_estudiantes_por_rangos_de_edad(datos):

nombres = [dato['nombre'] for dato in datos]
edades = [int(dato['edad']) for dato in datos]

rangos_edad = {
'18-25': [],
'26-35': [],
'mayores de 35': []
}

for nombre, edad in zip(nombres, edades):
if 18 <= edad <= 25:
rangos_edad['18-25'].append(nombre)
elif 26 <= edad <= 35:
rangos_edad['26-35'].append(nombre)
else:
rangos_edad['mayores de 35'].append(nombre)

print(f"Estudiantes dentro del rango 18-25: {rangos_edad['18-25']}")
print(f"Estudiantes dentro del rango 26-55: {rangos_edad['26-35']}")
print(f"Estudiantes dentro del rango <35: {rangos_edad['mayores de 35']}")


def mayor_variedad_carreras_por_ciudad(datos):

ciudades_carreras = {}

ciudades = [dato['ciudad'] for dato in datos]
carreras = [dato['carrera'] for dato in datos]

for ciudad, carrera in zip(ciudades, carreras):
if ciudad in ciudades_carreras:
ciudades_carreras[ciudad].append(carrera)
else:
ciudades_carreras[ciudad] = [carrera]

carreras_por_ciudad = {ciudad: len(set(carreras)) for ciudad, carreras in ciudades_carreras.items()}

print(carreras_por_ciudad)
53 changes: 53 additions & 0 deletions main.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
from functions import almacenar_datos, filtro_por_ciudad, filtro_por_pais
from functions import mostrar_datos_rango_edades, mostrar_todas_ciudades
from functions import promedio_de_edad_por_carrera, estado_estudiante_promedio_edad
from functions import agrupar_estudiantes_por_rangos_de_edad, mayor_variedad_carreras_por_ciudad


def mostrar_menu():
print("----- MENU -----")
print("1. Mostrar estudiantes que pertenezcan a una ciudad dada")
print("2. Mostrar estudiantes que viven en un pais dado")
print("3. Mostrar datos por rango de edad dado")
print("4. Mostrar todas las ciudades")
print("5. Mostrar la edad promedio por carrera")
print("6. Mostrar si el estudiante es < o > de la edad promedio por carrera")
print("7. Mostrar estudiantes por rango de edad")
print("8. Mostrar ciudad con mayor variedad de carreraras")
print("9. Salir")


datos = almacenar_datos('data.csv')

while True:
mostrar_menu()
opcion = input("Seleccione una opción: ")

if opcion == "1":
ciudad = (input("Ingrese la ciudad deseada: "))
filtro_por_ciudad(datos, ciudad)
if opcion == "2":
pais = (input("Ingrese el pais deseado: "))
filtro_por_pais(datos, pais)
elif opcion == "3":
edad_min = int(input("Ingrese la edad mínima del rango: "))
edad_max = int(input("Ingrese la edad máxima del rango: "))
mostrar_datos_rango_edades(datos, edad_min, edad_max)
elif opcion == "4":
mostrar_todas_ciudades(datos)
elif opcion == "5":
carrera = (input("Ingrese la carrera deseada: "))
promedio = promedio_de_edad_por_carrera(datos, carrera)
print(promedio)
elif opcion == "6":
carrera = (input("Ingrese la carrera deseada: "))
estado_estudiante_promedio_edad(datos, carrera)
elif opcion == "7":
agrupar_estudiantes_por_rangos_de_edad(datos)
elif opcion == "8":
mayor_variedad_carreras_por_ciudad(datos)
elif opcion == "9":
print("¡Hasta luego!")
break
else:
print("Opción inválida. Por favor, seleccione una opción válida.")