Skip to content
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
193 changes: 193 additions & 0 deletions POO_sistemaGestionNotas.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,193 @@
class Curso:
def __init__(self,nombre,nota):
self.nombre=nombre
self.nota=nota
def __str__(self):
return f"{self.nombre}: {self.nota}"

class Estudiante:
def __init__(self,codigo,nombre):
self.codigo=codigo
self.nombre=nombre
self.cursos=[] #Lista de objetos curso

def agregarCurso(self,curso):
#control de curso duplicado
duplicado=False
for c in self.cursos:
if c.nombre==curso.nombre:
duplicado=True
break
if duplicado:
print(f"El curso {curso.nombre} ya se encuentra registrado.")
else:
self.cursos.append(curso)
print(f"Curso {curso.nombre} ha sido agregado")
def insertarCursoEnPosicion(self,curso,posicion):
if posicion>=0 and posicion<=len(self.cursos):
#Evitamos la duplicidad del curso a agregar
duplicado=False
for c in self.cursos:
if c.nombre==curso.nombre:
duplicado=True
break
if duplicado:
print(f"El curso {curso.nombre} ya se encuentra registrado.")
else:
self.cursos.insert(posicion,curso)
print(f"Curso {curso.nombre} ha sido agregado en la posición {posicion}")
else:
print("Posición fuera del rango")
def eliminarCurso(self,nombre):
for c in self.cursos:
if c.nombre==nombre:
self.cursos.remove(c)
print(f"Curso {nombre} ha sido eliminado.")
return True
print("El curso no ha sido encontrado")

def listarCursos(self):
if len(self.cursos)==0:
print(f"{self.nombre} no tiene cursos registrados")
return
print(f"\nCódigo {self.codigo}\t{self.nombre}")
print("-"*40)
for c in self.cursos:
print(f"\t{c}")
print("-"*40)
print(f"\tPromedio Simple = {self.promedioSimple():.2f}")
print(f"\tPromedio Ponderado = {self.promedioPonderado():.2f}")
print("="*40)

def promedioSimple(self):
if len(self.cursos)==0:
print(f"{self.nombre} no tiene cursos registrados")
return
suma = 0
for c in self.cursos:
suma = suma + c.nota
return suma/len(self.cursos)
def promedioPonderado(self):
creditos={"Álgebra":4,"Cálculo":5,"Programación":4}
totalNotas=0
totalCreditos=0
for c in self.cursos:
if c.nombre in creditos:
totalNotas += c.nota*creditos[c.nombre]
totalCreditos += creditos[c.nombre]
return totalNotas/totalCreditos


def menu():
print("\n=== MENÚ PRINCIPAL ===")
print("1. Crear estudiante")
print("2. Añadir curso a estudiante")
print("3. Insertar curso en posición")
print("4. Eliminar curso de un estudiante")
print("5. Listar cursos de un estudiante")
print("6. Salir")
print("7. Listar todos")
return int(input("Seleccione una opción: "))

def obtenerEstudiante(estudiantes,codigo):
if codigo in estudiantes:
return estudiantes[codigo]
print("Estudiante no encontrado")
return None


def validarNota():
while True:
try:
nota=float(input("Ingrese una nota [0-20]: "))
if nota>=0 and nota<=20:
return nota
else:
print("Nota nota no valida")
except ValueError:
print("Debe ingresar un valor numérico")

def main():
#Creamos un diccionario para el codigo y el objeto estudiante {codigo:Estudiante}
estudiantes={}
#estudiantes["E001"] = Estudiante("E001","Luis Vives")
while True:
try:
opcion=menu()
match(opcion):
case 1:
codigo=input("Ingrese el código del estudiante: ").strip()
if codigo in estudiantes:
print("ya existe un estudiante con ese código")
continue
nombre=input("Ingrese el nombre del estudiante: ").strip()
estudiantes[codigo]=Estudiante(codigo,nombre) #{"E001":(E001,Luis Vives),}
print(f" Estudiante registado")
case 2:
if len(estudiantes)==0:
print("No existen estudiantes")
continue
codigo=input("Ingrese el código del estudiante: ").strip()
est=obtenerEstudiante(estudiantes,codigo)
if est is None:
print("No existe el estudiante")
continue
nombre_Curso=input("Ingrese el nombre de curso: ")
nota=validarNota()
curso=Curso(nombre_Curso,nota)
est.agregarCurso(curso)
case 3:
if len(estudiantes)==0:
print("No existen estudiantes")
continue
codigo=input("Ingrese el código del estudiante: ").strip()
est=obtenerEstudiante(estudiantes,codigo)
if est is None:
print("No existe el estudiante")
continue
nombre_Curso=input("Ingrese el nombre de curso: ")
nota=validarNota()
curso=Curso(nombre_Curso,nota)
try:
posicion=int(input(f"Ingrese la posicion de 0 a {len(estudiantes)}: "))
except ValueError:
print("Debe ingresar un valor numérico entero")
continue
est.insertarCursoEnPosicion(curso,posicion)
case 4:
if len(estudiantes)==0:
print("No existen estudiantes")
continue
codigo=input("Ingrese el código del estudiante: ").strip()
est=obtenerEstudiante(estudiantes,codigo)
if est is None:
print("No existe el estudiante")
continue
nombre_Curso=input("Ingrese el nombre de curso a eliminar: ")
est.eliminarCurso(nombre_Curso)
case 5:
if len(estudiantes)==0:
print("No existen estudiantes")
continue
codigo=input("Ingrese el código del estudiante: ").strip()
est=obtenerEstudiante(estudiantes,codigo)
if est is None:
print("No existe el estudiante")
continue
est.listarCursos()
case 6:
print("FIN DEL PROGRAMA")
break
case 7:
if len(estudiantes)==0:
print("No existen estudiantes")
continue
for est in estudiantes.values():
est.listarCursos()
case _:
print("Opción fuera del rango permitido")
except ValueError:
print("Debe ingresar un valor numérico como opción")

if __name__=="__main__":
main()
88 changes: 88 additions & 0 deletions inflacion_Sueldo.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
def agregarTrabajador(listaTrabajadores,anios_validos):
while True:
nombre=input("Ingrese nombre del trabajor: ")
if nombre.strip()!="":
break
else:
print("El nombre del trabajador no debe ser vacio")
while True:
try:
ingreso=float(input("Ingrese su sueldo historio (S/): "))
if ingreso>0:
break
else:
print("El ingreso debe ser positivo")
except ValueError:
print("Debe ingresar un valor entero o decimal")
while True:
try:
anio=int(input("Ingrese su año de ingreso: "))
if anio in anios_validos:
break
else:
print("Año fuera del rango permitido")
except ValueError:
print("Debe ingresar un valor numérico")
while True:
try:
inflacion=float(input("Ingrese el valor de la inflación: "))
if inflacion>0:
break
else:
print("Debe ingresar un valor positivo")
except ValueError:
print("Debe ingresar un valor numérico")
#guardamos los datos en un diccionario
trabajador={"nombre":nombre,"ingreso":ingreso,"anio":anio,"inflacion":inflacion}
listaTrabajadores.append(trabajador)
print(f"Trabajador {nombre} agregado correctament.\n")

def calcularAjuste(listaTrabajadores):
for t in listaTrabajadores:
t["ajustado"]=t["ingreso"]*(1+(t["inflacion"]/100))

def mostrarReporte(listaTrabajadores):
total=0
mayor={"nombre":"","ajustado":0}
print("=== REPORTE DE INGRESOS AJUSTADOS ===")
print("\nNombre\t\tIngreso\t\tAño\t\tInflacion\t\tAjustado")
for t in listaTrabajadores:
print(f"{t["nombre"]}\t\t{t["ingreso"]}\t\t{t["anio"]}\t\t{t["inflacion"]}\t\t{t["ajustado"]:.2f}")
total+=t["ajustado"]
if t["ajustado"]>mayor["ajustado"]:
mayor={"nombre":t["nombre"],"ajustado":t["ajustado"]}

print("="*45)
print(f"Total ajustado acumulado:S/. {total:.2f}")
print(f"Mayor ingreso ajutado: {mayor["nombre"]} S/. {mayor['ajustado']:.2f}")
print("="*45)

def main():
anios_validos=(2020,2021,2022)
listaTrabajadores=[]
while True:
try:
print("\n===MENÚ PRINCIPAL===")
print("[1] Agregar trabajador")
print("[2] Calcular reajuste")
print("[3] Mostrar Reporte")
print("[4] Salir")
opcion=int(input("Seleccione una opción: "))
match opcion:
case 1:
agregarTrabajador(listaTrabajadores,anios_validos)
case 2:
calcularAjuste(listaTrabajadores)
case 3:
mostrarReporte(listaTrabajadores)
case 4:
print("FIN DEL PROGRAMA")
break
case _:
print("Opción no valida")
except ValueError:
print("Debe ingresar un valor numérico")


if __name__=="__main__":
main()