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

ejercicio resuelto #8

Open
wants to merge 1 commit 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
105 changes: 105 additions & 0 deletions funciones.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
import csv

# Función para leer el archivo CSV y cargar los datos en una lista de diccionarios
def read_data(data_file):
with open(data_file, 'r') as file:
reader = csv.DictReader(file)
data = [dict(row) for row in reader]
return data

# Función para obtener todos los estudiantes que pertenezcan a una ciudad dada
def get_students_from_city(data,city):
estudiantes = [estudiante for estudiante in data if estudiante['ciudad']==city]
print(estudiantes)
return estudiantes

# Función para obtener todos los estudiantes que vivan en un país dado
def get_students_from_country(data,country):
estudiantes = [estudiante for estudiante in data if estudiante['pais']==country]
print(estudiantes)
return estudiantes

# Función para obtener todos los estudiantes que estén dentro del rango de edades dado
def get_students_in_age_range(data,min_age, max_age):
estudiantes = [estudiante for estudiante in data if min_age<= estudiante['edad'] <= max_age]
print(estudiantes)
return estudiantes

# Función para obtener todas las ciudades de residencia de los estudiantes
def get_cities(data):
ciudades = {estudiante['ciudad'] for estudiante in data}
print(ciudades)
return ciudades

# Función para calcular la edad promedio por carrera
def age_average_by_career(data):
edades_por_carrera = {}
cantidad_por_carrera = {}
for estudiante in data:
carrera = estudiante['carrera']
edad = int(estudiante['edad'])
edades_por_carrera[carrera] = edades_por_carrera.get(carrera, 0) + edad
cantidad_por_carrera[carrera] = cantidad_por_carrera.get(carrera, 0) + 1
edad_promedio_por_carrera = {carrera: edades_por_carrera[carrera] / cantidad_por_carrera[carrera] for carrera in edades_por_carrera}
print(edad_promedio_por_carrera)
return edad_promedio_por_carrera

# Función para Indicar por carrera si el estudiante está por encima o por debajo del promedio de edad.
def above_or_below_average(data):
estudiantes_por_carrera = {}
for estudiante in data:
carrera = estudiante['carrera']
estudiantes_por_carrera.setdefault(carrera, []).append(estudiante)

estudiantes_por_encima = {}
estudiantes_por_debajo = {}
for carrera, estudiantes in estudiantes_por_carrera.items():
estudiantes_por_encima[carrera] = []
estudiantes_por_debajo[carrera] = []
edad_promedio = age_average_by_career(estudiantes)
for estudiante in estudiantes:
if int(estudiante['edad']) < edad_promedio[carrera]:
estudiantes_por_debajo[carrera].append(estudiante)
else:
estudiantes_por_encima[carrera].append(estudiante)
print("# \n# \n#\n")
print('estudiantes por encima del promedio por carrera:\n')
print(estudiantes_por_encima)
print("# \n# \n#\n")
print('estudiantes por debajo del promedio por carrera:\n')
print(estudiantes_por_debajo)
return estudiantes_por_encima, estudiantes_por_debajo

# Función para agrupar los estudiantes en diferentes rangos de edad
def group_students_by_age_range(data):
estudiantes_por_rango = {
'18-25': [],
'26-35': [],
'mayores de 35': []
}

for estudiante in data:
edad = int(estudiante['edad'])
if 18 <= edad <= 25:
estudiantes_por_rango['18-25'].append(estudiante)
elif 26 <= edad <= 35:
estudiantes_por_rango['26-35'].append(estudiante)
else:
estudiantes_por_rango['mayores de 35'].append(estudiante)
for range in estudiantes_por_rango:
print(range)
print(estudiantes_por_rango[range])
print('####################################################\n')
return estudiantes_por_rango

# Función para obtener la ciudad con la mayor variedad de carreras universitarias entre los estudiantes
def get_city_with_greatest_variety(data):
ciudades_carreras = {}
for estudiante in data:
ciudad = estudiante['ciudad']
carrera = estudiante['carrera']
ciudades_carreras.setdefault(ciudad, set()).add(carrera)

ciudad_con_mayor_variedad = max(ciudades_carreras, key=lambda ciudad: len(ciudades_carreras[ciudad]))
print(ciudad_con_mayor_variedad)
return ciudad_con_mayor_variedad
40 changes: 40 additions & 0 deletions main.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
from funciones import *

def menu():
data = read_data('data.csv')
option = "no option selected"
while option != 9:
print('MENU DE OPCIONES')
print('1) Obtener todos los estudiantes que pertenezcan a una ciudad dada.')
print('2) Obtener todos los estudiantes que vivan en un país dado.')
print('3) Obtener todos los estudiantes que estén dentro del rango de edades dado.')
print('4) Obtener todas las ciudades de residencia de los estudiantes.')
print('5) Identificar la edad promedio por carrera.')
print('6) Indicar por carrera si el estudiante está por encima o por debajo del promedio de edad.')
print('7) Agrupa los estudiantes en diferentes rangos de edad (18-25, 26-35, mayores de 35).')
print('9) SALIR')
option = int(input("Ingrese el número de la opción que desea ejecutar: "))
if option == 1:
city = input('Ingrese la ciudad que quiere buscar: ')
get_students_from_city(data, city)
elif option == 2:
country = input('Ingrese el pais que quiere buscar: ')
get_students_from_country(data, country)
elif option == 3:
min_age = input('Ingrese la edad minima: ')
max_age = input('Ingrese la edad maxima: ')
get_students_in_age_range(data, min_age,max_age)
elif option == 4:
get_cities(data)
elif option == 5:
age_average_by_career(data)
elif option == 6:
above_or_below_average(data)
elif option == 7:
group_students_by_age_range(data)
elif option == 8:
get_city_with_greatest_variety(data)


if __name__ == "__main__":
menu()