Introducción
Este tutorial te guiará a través del proceso de implementación de un sistema de calificación utilizando las sentencias if-elif-else de Python. Aprenderás a determinar la calificación de un estudiante basándote en sus notas, una tarea común en entornos educativos. Al final de este tutorial, habrás creado un programa de calificación funcional que puede aplicarse a escenarios del mundo real. Este enfoque práctico fortalecerá tu comprensión de las sentencias condicionales en Python, que son bloques de construcción fundamentales para una lógica de programación más compleja.
Comprensión de las Sentencias Condicionales en Python
Antes de crear nuestro sistema de calificación, comprendamos las sentencias condicionales básicas en Python. Las sentencias condicionales permiten que tu programa tome decisiones basadas en condiciones específicas.
Creando tu Primer Archivo Python
Comencemos creando un nuevo archivo Python:
- En el WebIDE, haz clic en el menú "File" (Archivo) en la parte superior izquierda.
- Selecciona "New File" (Nuevo Archivo).
- Guarda el archivo como
conditional_demo.pyen el directorio/home/labex/project.
Sentencia If-Else Básica
En tu archivo conditional_demo.py, escribe el siguiente código:
## Basic if-else example
score = 75
if score >= 70:
print("You passed the test!")
else:
print("You need to study more.")
## Try changing the score to see different results
Este programa simple verifica si la variable score es 70 o superior. Si lo es, imprime "You passed the test!". De lo contrario, imprime "You need to study more."
Probando tu Código
Para ejecutar tu código, abre una terminal en el WebIDE y ejecuta:
python3 /home/labex/project/conditional_demo.py
Deberías ver la salida:
You passed the test!
Añadiendo Más Condiciones con If-Elif-Else
Ampliemos nuestro ejemplo para manejar más condiciones utilizando la estructura if-elif-else:
## If-elif-else example
score = 85
if score >= 90:
print("Excellent!")
elif score >= 80:
print("Very good!")
elif score >= 70:
print("Good!")
elif score >= 60:
print("Satisfactory")
else:
print("Needs improvement")
## Try different values for score to see different results
Guarda el archivo y ejecútalo de nuevo:
python3 /home/labex/project/conditional_demo.py
Salida:
You passed the test!
Very good!
La estructura if-elif-else evalúa las condiciones de arriba a abajo. Una vez que una condición es verdadera, se ejecuta su bloque de código correspondiente, y el resto de las condiciones se omiten.
Comprender este flujo es crucial para construir nuestro sistema de calificación en el siguiente paso.
Creando un Sistema de Calificación Básico
Ahora que entendemos las sentencias condicionales, construyamos un sistema de calificación simple. Crearemos una función que convierte las notas numéricas en calificaciones con letras.
Creando el Archivo del Sistema de Calificación
- En el WebIDE, crea un nuevo archivo llamado
grading_system.py - Guárdalo en el directorio
/home/labex/project
Implementando la Función de Calificación Básica
En tu archivo grading_system.py, escribe el siguiente código:
def get_grade(marks):
"""
Convertir notas numéricas a calificaciones con letras.
A: 90-100
B: 80-89
C: 70-79
D: 60-69
F: 0-59
"""
if marks >= 90:
return 'A'
elif marks >= 80:
return 'B'
elif marks >= 70:
return 'C'
elif marks >= 60:
return 'D'
else:
return 'F'
## Test the function with a few examples
test_marks = [95, 82, 75, 65, 45]
for mark in test_marks:
grade = get_grade(mark)
print(f"Marks: {mark} - Grade: {grade}")
Este código crea una función get_grade() que toma las notas de un estudiante como entrada y devuelve la calificación con letra correspondiente basada en los umbrales de calificación comunes.
Ejecutando Nuestro Sistema de Calificación
Probemos nuestro sistema de calificación ejecutando el código:
python3 /home/labex/project/grading_system.py
Deberías ver una salida similar a:
Marks: 95 - Grade: A
Marks: 82 - Grade: B
Marks: 75 - Grade: C
Marks: 65 - Grade: D
Marks: 45 - Grade: F
Entendiendo el Código
Desglosemos cómo funciona esto:
- Definimos una función llamada
get_grade()que toma un parámetro:marks(notas). - Dentro de la función, usamos sentencias if-elif-else para verificar las notas contra diferentes umbrales de calificación.
- Creamos una lista de notas de prueba para demostrar cómo funciona la función con diferentes valores.
- Usamos un bucle
forpara iterar a través de cada nota, obtener su calificación e imprimir el resultado.
Este sistema de calificación básico funciona bien para casos estándar, pero ¿qué pasa con los casos extremos (edge cases)? En el siguiente paso, mejoraremos nuestro sistema para manejar esos.
Manejo de Casos Extremos en Nuestro Sistema de Calificación
Nuestro sistema de calificación básico funciona, pero no tiene en cuenta los casos extremos (edge cases) como:
- Entradas inválidas (notas menores que 0 o mayores que 100)
- Entradas no numéricas
Mejoremos nuestro sistema de calificación para manejar estos escenarios.
Actualizar el Sistema de Calificación
Crea un nuevo archivo llamado improved_grading.py en el directorio /home/labex/project con el siguiente código:
def get_grade(marks):
"""
Convertir notas numéricas a calificaciones con letras con validación de entrada.
A: 90-100
B: 80-89
C: 70-79
D: 60-69
F: 0-59
Devuelve "Invalid marks" (Notas inválidas) para entradas fuera del rango de 0-100
"""
try:
## Convertir a float en caso de que la entrada sea un número en formato string
marks = float(marks)
## Verificar si las notas están en el rango válido
if marks < 0 or marks > 100:
return "Invalid marks: must be between 0 and 100"
elif marks >= 90:
return 'A'
elif marks >= 80:
return 'B'
elif marks >= 70:
return 'C'
elif marks >= 60:
return 'D'
else:
return 'F'
except ValueError:
return "Invalid marks: not a number"
## Test the function with valid and invalid inputs
test_inputs = [95, 82, 75, 65, 45, -5, 105, "abc", "75"]
for value in test_inputs:
grade = get_grade(value)
print(f"Input: {value} - Result: {grade}")
Ejecutar el Sistema de Calificación Mejorado
Ejecuta el sistema de calificación mejorado:
python3 /home/labex/project/improved_grading.py
La salida debería ser similar a:
Input: 95 - Result: A
Input: 82 - Result: B
Input: 75 - Result: C
Input: 65 - Result: D
Input: 45 - Result: F
Input: -5 - Result: Invalid marks: must be between 0 and 100
Input: 105 - Result: Invalid marks: must be between 0 and 100
Input: abc - Result: Invalid marks: not a number
Input: 75 - Result: C
Mejoras Explicadas
Examinemos las mejoras que hicimos:
Conversión del Tipo de Entrada: Usamos
float()para convertir la entrada a un número, permitiendo que nuestra función acepte entradas de tipo string como "75".Verificación del Rango Válido: Agregamos una condición para verificar si las notas están dentro del rango válido de 0-100.
Manejo de Errores: Envolvemos nuestro código en un bloque try-except para capturar las excepciones
ValueErrorque ocurren cuando se proporcionan entradas no numéricas.Mensajes de Error Detallados: Devolvemos mensajes de error específicos para informar al usuario qué salió mal en lugar de simplemente devolver un código de error.
Estas mejoras hacen que nuestro sistema de calificación sea más robusto al manejar varios casos extremos de manera adecuada. El programa ahora proporciona comentarios útiles cuando se encuentran entradas inválidas en lugar de fallar o producir resultados incorrectos.
Mejorando el Sistema de Calificación con Mensajes de Retroalimentación
Mejoremos aún más nuestro sistema de calificación agregando mensajes de retroalimentación personalizados para cada calificación. Esto hace que el sistema sea más informativo y fácil de usar.
Creando el Sistema de Calificación Mejorado
Crea un nuevo archivo llamado enhanced_grading.py en el directorio /home/labex/project:
def get_grade_with_feedback(marks):
"""
Convertir notas numéricas a calificaciones con letras con retroalimentación personalizada.
Devuelve una tupla que contiene la calificación y un mensaje de retroalimentación.
"""
try:
marks = float(marks)
if marks < 0 or marks > 100:
return (None, "Invalid marks: must be between 0 and 100")
elif marks >= 90:
return ('A', "Excellent! Outstanding performance.")
elif marks >= 80:
return ('B', "Very good! Above average performance.")
elif marks >= 70:
return ('C', "Good work! Average performance.")
elif marks >= 60:
return ('D', "Satisfactory. Below average but passing.")
else:
return ('F', "Needs improvement. Please study more.")
except ValueError:
return (None, "Invalid marks: not a number")
def format_report(student_name, marks, subject):
"""
Generar un informe formateado para un estudiante.
"""
grade, feedback = get_grade_with_feedback(marks)
if grade is None:
return f"Report for {student_name}: {feedback}"
return f"""
Report Card
-----------
Student: {student_name}
Subject: {subject}
Marks: {marks}
Grade: {grade}
Feedback: {feedback}
"""
## Test the enhanced system with a few examples
students = [
{"name": "Alice", "marks": 92, "subject": "Mathematics"},
{"name": "Bob", "marks": 78, "subject": "Science"},
{"name": "Charlie", "marks": 45, "subject": "History"},
{"name": "David", "marks": "abc", "subject": "English"}
]
for student in students:
report = format_report(student["name"], student["marks"], student["subject"])
print(report)
Ejecutando el Sistema de Calificación Mejorado
Ejecuta el sistema de calificación mejorado:
python3 /home/labex/project/enhanced_grading.py
Deberías ver una salida similar a:
Report Card
-----------
Student: Alice
Subject: Mathematics
Marks: 92
Grade: A
Feedback: Excellent! Outstanding performance.
Report Card
-----------
Student: Bob
Subject: Science
Marks: 78
Grade: C
Feedback: Good work! Average performance.
Report Card
-----------
Student: Charlie
Subject: History
Marks: 45
Grade: F
Feedback: Needs improvement. Please study more.
Report for David: Invalid marks: not a number
Nuevas Características Explicadas
Examinemos las mejoras que implementamos:
Retroalimentación Personalizada: Cada calificación ahora incluye un mensaje de retroalimentación específico que proporciona contexto y ánimo.
Formato de Retorno: Nuestra función
get_grade_with_feedback()devuelve una tupla que contiene tanto la calificación como el mensaje de retroalimentación.Formateo del Informe: Creamos una nueva función
format_report()que genera una boleta de calificaciones bien estructurada para cada estudiante.Pruebas con Datos del Mundo Real: Usamos una lista de diccionarios para simular datos reales de estudiantes, que es una estructura de datos común en programación.
Manejo de Errores Elegante: El sistema aún maneja las entradas inválidas de manera elegante, pero ahora presenta los errores en un formato fácil de usar.
Estas mejoras hacen que nuestro sistema de calificación sea más práctico para el uso en el mundo real. La retroalimentación personalizada ayuda a los estudiantes a comprender su rendimiento, mientras que el informe formateado proporciona una presentación profesional de los resultados.
Aplicando el Sistema de Calificación a un Conjunto de Datos Real
Ahora, apliquemos nuestro sistema de calificación a un escenario más realista. Crearemos un programa que lee datos de estudiantes de un archivo, calcula las calificaciones y escribe un informe completo.
Creando un Conjunto de Datos de Ejemplo
Primero, creemos un archivo con datos de estudiantes de ejemplo. Crea un nuevo archivo llamado student_data.csv en el directorio /home/labex/project con el siguiente contenido:
name,subject,marks
John,Mathematics,88
Emily,Mathematics,92
Michael,Mathematics,75
Sophia,Mathematics,68
Daniel,Mathematics,42
Olivia,Mathematics,95
William,Mathematics,73
Emma,Mathematics,60
James,Mathematics,79
Ava,Mathematics,85
Creando la Aplicación de Calificación Completa
Ahora, crea un nuevo archivo llamado grading_application.py en el directorio /home/labex/project:
def get_grade_with_feedback(marks):
"""
Convertir notas numéricas a calificaciones con letras con retroalimentación personalizada.
Devuelve una tupla que contiene la calificación y un mensaje de retroalimentación.
"""
try:
marks = float(marks)
if marks < 0 or marks > 100:
return (None, "Invalid marks: must be between 0 and 100")
elif marks >= 90:
return ('A', "Excellent! Outstanding performance.")
elif marks >= 80:
return ('B', "Very good! Above average performance.")
elif marks >= 70:
return ('C', "Good work! Average performance.")
elif marks >= 60:
return ('D', "Satisfactory. Below average but passing.")
else:
return ('F', "Needs improvement. Please study more.")
except ValueError:
return (None, "Invalid marks: not a number")
def process_student_data(input_filename, output_filename):
"""
Procesar datos de estudiantes desde un archivo CSV y generar un informe.
"""
try:
## Leer el archivo de entrada
with open(input_filename, 'r') as file:
lines = file.readlines()
## Omitir la línea de encabezado
headers = lines[0].strip().split(',')
data = [line.strip().split(',') for line in lines[1:]]
## Preparar la salida
output_lines = ["Student Grade Report\n", "=" * 20 + "\n\n"]
## Calcular estadísticas
valid_marks = []
grade_counts = {'A': 0, 'B': 0, 'C': 0, 'D': 0, 'F': 0, 'Invalid': 0}
## Procesar cada estudiante
for student in data:
name, subject, marks = student
grade, feedback = get_grade_with_feedback(marks)
if grade:
valid_marks.append(float(marks))
grade_counts[grade] += 1
output_lines.append(f"Student: {name}\n")
output_lines.append(f"Subject: {subject}\n")
output_lines.append(f"Marks: {marks}\n")
output_lines.append(f"Grade: {grade}\n")
output_lines.append(f"Feedback: {feedback}\n\n")
else:
grade_counts['Invalid'] += 1
output_lines.append(f"Student: {name}\n")
output_lines.append(f"Subject: {subject}\n")
output_lines.append(f"Error: {feedback}\n\n")
## Calcular estadísticas
if valid_marks:
average_mark = sum(valid_marks) / len(valid_marks)
max_mark = max(valid_marks)
min_mark = min(valid_marks)
output_lines.append("Class Statistics\n")
output_lines.append("-" * 15 + "\n")
output_lines.append(f"Average Mark: {average_mark:.2f}\n")
output_lines.append(f"Highest Mark: {max_mark:.1f}\n")
output_lines.append(f"Lowest Mark: {min_mark:.1f}\n\n")
output_lines.append("Grade Distribution\n")
output_lines.append("-" * 17 + "\n")
for grade, count in grade_counts.items():
output_lines.append(f"{grade}: {count}\n")
## Escribir el archivo de salida
with open(output_filename, 'w') as file:
file.writelines(output_lines)
print(f"Report successfully generated and saved to {output_filename}")
except Exception as e:
print(f"An error occurred: {str(e)}")
## Run the application
input_file = "/home/labex/project/student_data.csv"
output_file = "/home/labex/project/grade_report.txt"
process_student_data(input_file, output_file)
## Display the report in the console as well
print("\nGenerated Report Contents:")
print("--------------------------")
with open(output_file, 'r') as file:
print(file.read())
Ejecutando la Aplicación Completa
Ejecuta la aplicación:
python3 /home/labex/project/grading_application.py
El programa leerá los datos de los estudiantes, calculará las calificaciones, generará un informe y lo mostrará en la consola. Deberías ver una salida similar a:
Report successfully generated and saved to /home/labex/project/grade_report.txt
Generated Report Contents:
--------------------------
Student Grade Report
====================
Student: John
Subject: Mathematics
Marks: 88
Grade: B
Feedback: Very good! Above average performance.
Student: Emily
Subject: Mathematics
Marks: 92
Grade: A
Feedback: Excellent! Outstanding performance.
...
Class Statistics
---------------
Average Mark: 75.70
Highest Mark: 95.0
Lowest Mark: 42.0
Grade Distribution
-----------------
A: 2
B: 2
C: 3
D: 1
F: 2
Invalid: 0
Examinando el Archivo de Informe
También puedes verificar el archivo de informe generado:
cat /home/labex/project/grade_report.txt
El archivo debería contener el mismo contenido que se mostró en la consola.
Entendiendo la Aplicación Completa
La aplicación de calificación completa que creamos demuestra varios conceptos de programación importantes:
- Entrada/Salida de Archivos (File I/O): Leer datos de y escribir datos en archivos
- Procesamiento de Datos: Convertir y analizar datos sin procesar
- Cálculo de Estadísticas: Calcular promedios y encontrar valores mínimos/máximos
- Manejo de Errores: Gestionar posibles errores durante las operaciones de archivos
- Formateo de la Salida: Crear un informe bien estructurado y legible
Esta aplicación representa un caso de uso del mundo real para nuestro sistema de calificación, mostrando cómo las sentencias if-elif-else de Python se pueden aplicar para resolver problemas prácticos en entornos educativos.
Resumen
En este tutorial, has construido con éxito un sistema de calificación completo utilizando las sentencias if-elif-else de Python. Comenzando con sentencias condicionales básicas, mejoraste progresivamente tu programa para manejar casos extremos, proporcionar retroalimentación personalizada y procesar datos reales de estudiantes.
Aquí están las habilidades clave que has desarrollado:
- Usar sentencias if-elif-else para implementar lógica de toma de decisiones
- Validar la entrada del usuario y manejar errores de manera elegante
- Proporcionar retroalimentación significativa basada en condiciones
- Procesar datos de archivos y generar informes
- Calcular estadísticas a partir de un conjunto de datos
Estas habilidades son fundamentales para muchas tareas de programación y se pueden aplicar a varios escenarios del mundo real más allá de los sistemas de calificación. Los principios de la lógica condicional que has aprendido servirán como bloques de construcción para programas más complejos en tus futuros proyectos de Python.
Recuerda que las buenas prácticas de programación incluyen:
- Nombres de variables y funciones claros y descriptivos
- Manejo adecuado de errores
- Código bien estructurado y organizado
- Comentarios y documentación útiles
¡Continúa practicando extendiendo este sistema de calificación o aplicando lo que has aprendido a nuevos desafíos de programación!



