Skip to content

Tarea dojo finalizada #12

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

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
128 changes: 128 additions & 0 deletions ClassEstudiantes.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,128 @@
class Estudiantes:

def __init__(self, datos: list):
self.datos = datos
self.ciudades = set()
self.paises = set()
self.carreras = set()
self.__set_columnas()


def __set_columnas(self) -> None:

for row in self.datos:
self.ciudades.add(row['ciudad'])
self.paises.add(row['pais'])
self.carreras.add(row['carrera'])

def get_ciudades(self) -> set:
return self.ciudades

def get_paises(self) -> str:
return self.paises

def get_carreras(self) -> str:
return self.carreras

# Obtener todos los estudiantes que pertenezcan a una ciudad dada.
def get_estudiantes_por_ciudad(self, ciudad: str) -> dict:

estudiantes_por_ciudad = {f"{row['nombre']} {row['apellido']}": [row['ciudad']]
for row in self.datos if row['ciudad'] == ciudad}

return estudiantes_por_ciudad

# Obtener todos los estudiantes que vivan en un país dado.
def get_estudiantes_por_pais(self, pais: str) -> dict:

estudiantes_por_pais = {f"{row['nombre']} {row['apellido']}": [row['pais']]
for row in self.datos if row['pais'] == pais}

return estudiantes_por_pais

# Obtener todos los estudiantes que estén dentro del rango de edades dado.
def get_estudiantes_por_edad(self, edad_inicial: int, edad_final: int) -> dict:

estudiantes_por_edad = {f"{row['nombre']} {row['apellido']}": [
row['edad']] for row in self.datos if int(row['edad']) >= edad_inicial and int(row['edad']) <= edad_final}

return estudiantes_por_edad if len(estudiantes_por_edad) > 0 else "No existen valores con ese rango"

# Identificar la edad promedio por carrera.
def get_edad_promedio_por_carrera(self, carrera: str) -> dict:

estudiantes_por_carrera = {f"{row['nombre']} {row['apellido']}": [row['edad']]
for row in self.datos if row['carrera'] == carrera}

carrera_sum = 0

for estudiantes in estudiantes_por_carrera.values():

carrera_sum += float(str.join('', estudiantes))

return (carrera_sum / len(estudiantes_por_carrera)) if carrera_sum > 0 else 0

# Indicar por carrera si el estudiante está por encima o por debajo del promedio de edad.

def get_estudiantes_nivel_academico(self, carrera: str) -> dict:
estudiantes_por_carrera = {f"{row['nombre']} {row['apellido']}": [row['edad']]
for row in self.datos if row['carrera'] == carrera}
carrera_sum = 0

for estudiantes in estudiantes_por_carrera.values():
carrera_sum += float(str.join('', estudiantes))

edad_promedio = (carrera_sum / len(estudiantes_por_carrera))

print(f"Edad promedio de la carrera es: {edad_promedio}")
estudiantes_nivel_academico = {}
for key, value in estudiantes_por_carrera.items():

estudiantes_nivel_academico[key] = f"edad: {str.join('', value)} por arriba"
if edad_promedio > float(str.join('', value)):
estudiantes_nivel_academico[key] = f"edad: {str.join('', value)} por debajo"

return estudiantes_nivel_academico

# Agrupa los estudiantes en diferentes rangos de edad (18-25, 26-35, mayores de 35).
def get_estudiantes_por_rangos(self) -> list:

estudiante_primer_rango = {row['nombre']: row['edad'] for row in self.datos if int(
row['edad']) >= 18 and int(row['edad']) <= 25}
estudiante_segundo_rango = {row['nombre']: row['edad'] for row in self.datos if int(
row['edad']) >= 26 and int(row['edad']) <= 35}
estudiante_tercer_rango = {row['nombre']: row['edad']
for row in self.datos if int(row['edad']) > 35}

estudiantes_por_rangos = [estudiante_primer_rango,
estudiante_segundo_rango, estudiante_tercer_rango]

return estudiantes_por_rangos

# Identifica la ciudad que tienen la mayor variedad de carreras universitarias entre los estudiantes.
def get_ciudad_mayor_carrera(self) -> dict:

dict_carrera = {ciudad: list((set(alumno['carrera']
for alumno in self.datos if alumno['ciudad'] in ciudad))) for ciudad in self.ciudades}

mayor = 0
for clave, valor in dict_carrera.items():

print(f"{clave}, {valor}")

if len(valor) > mayor:

mayor = len(valor)
ciudad = clave

return f"{ciudad} tiene la mayor variedad de carreras {dict_carrera.get(ciudad)}"

def guardar_datos(self, ruta: str, archivo: str, datos):
with open(f"{ruta}{archivo}", 'w') as reporte:
for k, v in datos.items():
reporte.write(f"{k},{v}\n")

def guardar_datos_lista(self, ruta: str, archivo: str, datos):
with open(f"{ruta}{archivo}", 'w') as reporte:
for _ in datos:
reporte.write(f"{_}\n")
91 changes: 91 additions & 0 deletions __dojo__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
# -*- coding: utf-8 -*-
import csv
import os
from ClassEstudiantes import Estudiantes

opciones = [1, 2, 3, 4, 5, 6, 7, 8, 9]
option = 1

ruta = ""


with open('data.csv') as file:
csv_reader = csv.DictReader(file, delimiter=',')
datos = list(csv_reader)

keys = csv_reader.fieldnames
estudiantes = Estudiantes(datos=datos)

while option in opciones:
print("Menu de opciones:")
print(f"1) Obtener todos los estudiantes que pertenezcan a una ciudad dada.")
print(f"2) Obtener todos los estudiantes que vivan en un país dado.")
print(
f"3) Obtener todos los estudiantes que estén dentro del rango de edades dado.")
print(f"4) Obtener todas las ciudades de residencia de los estudiantes.")
print(f"5) Identificar la edad promedio por carrera.")
print(f"6) Indicar por carrera si el estudiante está por encima o por debajo del promedio de edad.")
print(f"7) Agrupa los estudiantes en diferentes rangos de edad (18-25, 26-35, mayores de 35).")
print(f"8) Identifica la ciudad que tienen la mayor variedad de carreras universitarias entre los estudiantes.")
print(f"0) Salir.\n")

# Obtener todos los estudiantes que pertenezcan a una ciudad dada.
option = int(input(f"Elija una opción: "))
if option == 1:
print(f"Las ciudades son: {estudiantes.get_ciudades()}")
ciudad = input("Escriba una ciudad: ")
print(estudiantes.get_estudiantes_por_ciudad(ciudad=ciudad))
estudiantes.guardar_datos(
ruta=ruta, archivo="estudiantes_por_ciudad.txt", datos=estudiantes.get_estudiantes_por_ciudad(ciudad=ciudad))

# Obtener todos los estudiantes que vivan en un país dado.
elif option == 2:
print(f"Los paises son: {estudiantes.get_paises()}")
pais = input("Escriba un pais: ")
print(estudiantes.get_estudiantes_por_pais(pais=pais))
estudiantes.guardar_datos(
ruta=ruta, archivo="estudiantes_por_pais.txt", datos=estudiantes.get_estudiantes_por_pais(pais=pais))

# Obtener todos los estudiantes que estén dentro del rango de edades dado.
elif option == 3:
edad_inicial = int(input("Escriba un rango de edad inicial: "))
edad_final = int(input("Escriba un rango de edad final: "))
print(
f"Estudiantes por el rango seleccionado son: \n{estudiantes.get_estudiantes_por_edad(edad_inicial=edad_inicial,edad_final=edad_final)}")
estudiantes.guardar_datos(
ruta=ruta, archivo="get_estudiantes_por_edad.txt", datos=estudiantes.get_estudiantes_por_edad(edad_inicial=edad_inicial, edad_final=edad_final))

# Obtener todas las ciudades de residencia de los estudiantes.
elif option == 4:
print(
f"Las ciudades de residencia son: {estudiantes.get_ciudades()}")
estudiantes.guardar_datos_lista(
ruta=ruta, archivo="get_ciudades.txt", datos=estudiantes.get_ciudades())

# Identificar la edad promedio por carrera.
elif option == 5:
print(f"Las carreras son: {estudiantes.get_carreras()}")
carrera = input("Selecciones una carrera: ")
print(
f" La edad promedio para la carrera {carrera} es: \n {estudiantes.get_edad_promedio_por_carrera(carrera=carrera)}")

# Indicar por carrera si el estudiante está por encima o por debajo del promedio de edad.
elif option == 6:
print(f"Las carreras son: {estudiantes.get_carreras()}")
carrera = input("Selecciones una carrera: ")
print(f"{estudiantes.get_estudiantes_nivel_academico(carrera=carrera)}")
estudiantes.guardar_datos(
ruta=ruta, archivo="get_estudiantes_nivel_academico.txt", datos=estudiantes.get_estudiantes_nivel_academico(carrera=carrera))

# Agrupa los estudiantes en diferentes rangos de edad (18-25, 26-35, mayores de 35).
elif option == 7:
print(
f"Estudiantes por rago son:{[est for est in estudiantes.get_estudiantes_por_rangos()]}")
estudiantes.guardar_datos_lista(
ruta=ruta, archivo="get_estudiantes_por_rangos.txt", datos=estudiantes.get_estudiantes_por_rangos())

# Identifica la ciudad que tienen la mayor variedad de carreras universitarias entre los estudiantes.
elif option == 8:
print(f"{estudiantes.get_ciudad_mayor_carrera()}")
os.system('pause')
os.system('cls')
24 changes: 12 additions & 12 deletions data.csv
Original file line number Diff line number Diff line change
@@ -1,41 +1,41 @@
nombre,apellido,ciudad,pais,edad,carrera
John,Smith,Ciudad de Mexico,Mexico,22,Computer Engineering
Emily,Johnson,New York,United States,25,Psychology
David,Williams,Medellín,Colombia,30,Medicine
Sophie,Jones,Bogotá,Colombia,28,Art History
David,Williams,Medellin,Colombia,30,Medicine
Sophie,Jones,Bogota,Colombia,28,Art History
Daniel,Brown,Lima,Peru,23,Education
Emma,Davis,Buenos Aires,Argentina,39,Computer Engineering
Benjamin,Miller,Barcelona,Spain,26,Psychology
Olivia,Moore,Ciudad de Mexico,Mexico,24,Medicine
Noah,Wilson,New York,United States,27,Art History
Isabella,Anderson,Medellín,Colombia,31,Education
Isabella,Anderson,Medellin,Colombia,31,Education
Liam,Taylor,Lima,Peru,21,Computer Engineering
Ava,Thomas,Bogotá,Colombia,19,Psychology
Ava,Thomas,Bogota,Colombia,19,Psychology
James,Clark,Barcelona,Spain,50,Medicine
Mia,Hall,New York,United States,20,Art History
Ethan,Lee,Lima,Peru,23,Education
Sophia,White,Ciudad de Mexico,Mexico,26,Computer Engineering
Alexander,Martin,New York,United States,29,Psychology
Natalie,Lopez,Medellín,Colombia,32,Medicine
Lucas,Harris,Bogotá,Colombia,24,Art History
Natalie,Lopez,Medellin,Colombia,32,Medicine
Lucas,Harris,Bogota,Colombia,24,Art History
Chloe,Allen,Lima,Peru,27,Education
Max,Young,Buenos Aires,Argentina,22,Computer Engineering
Emma,Scott,Barcelona,Spain,25,Psychology
Jacob,Walker,Ciudad de Mexico,Mexico,23,Medicine
Ava,Hall,New York,United States,21,Art History
Daniel,Rodriguez,Medellín,Colombia,40,Education
Daniel,Rodriguez,Medellin,Colombia,40,Education
Sophia,Hernandez,Lima,Peru,28,Computer Engineering
Logan,Lewis,Bogotá,Colombia,26,Psychology
Logan,Lewis,Bogota,Colombia,26,Psychology
Isabella,Hill,Barcelona,Spain,24,Medicine
Elijah,Green,Ciudad de Mexico,Mexico,27,Art History
Emily,Turner,New York,United States,42,Education
Mateo,Jackson,Medellín,Colombia,19,Computer Engineering
Mateo,Jackson,Medellin,Colombia,19,Computer Engineering
Sofia,Clark,Lima,Peru,31,Psychology
Liam,Taylor,Bogotá,Colombia,29,Medicine
Liam,Taylor,Bogota,Colombia,29,Medicine
Olivia,Moore,Barcelona,Spain,23,Art History
Noah,Wilson,Ciudad de Mexico,Mexico,26,Education
Isabella,Anderson,New York,United States,24,Computer Engineering
James,Lee,Medellín,Colombia,21,Psychology
James,Lee,Medellin,Colombia,21,Psychology
Mia,Hall,Lima,Peru,30,Medicine
Ethan,Miller,Bogotá,Colombia,38,Art History
Ethan,Miller,Bogota,Colombia,38,Art History
Sophia,Clark,Barcelona,Spain,22,Education