Curso de Python / Practicar condiciones y bucles con un resumen de puntuaciones

Un resumen de puntuaciones combina validación, clasificación y cálculo de estadísticas. Excluye de los cálculos los valores inválidos, pero informa de cuántos rechazaste para que los datos ausentes no desaparezcan silenciosamente.

Definir las entradas y las reglas del cálculo

Esta práctica parte de una lista de enteros ya disponible. Las puntuaciones válidas van de cero a cien y se aprueba a partir de sesenta. Interpretar texto de un CSV o una respuesta del usuario es una etapa previa distinta. Los negativos y los valores superiores a cien se cuentan como inválidos.

Caso Regla
60 Puntuación aprobada
0 Puntuación válida
-1 o 101 Aumentar el contador de inválidos
Ninguna puntuación válida No calcular el promedio

Las comparaciones y condiciones booleanas permiten expresar estos intervalos. La guía oficial de control de flujo explica las instrucciones que se combinan en el programa.

Ejecutar el resumen completo

Guarda el siguiente contenido como scores.py en UTF-8. Desde la carpeta de práctica y con el entorno del proyecto seleccionado, ejecuta python scores.py. En macOS o Ubuntu, utiliza python3 fuera del entorno si corresponde al intérprete elegido.

scores = [80, 60, 0, 100, -1, 101]
valid = []
invalid = 0
passed = 0
for score in scores:
    if not 0 <= score <= 100:
        invalid += 1
        continue
    valid.append(score)
    if score >= 60:
        passed += 1
print("valid:", len(valid), "invalid:", invalid)
if valid:
    print(f"average: {sum(valid) / len(valid):.1f}")
    print("passed:", passed)
else:
    print("no valid scores")

La salida esperada es:

valid: 4 invalid: 2
average: 60.0
passed: 3

Hay seis entradas en total. Cuatro son válidas y dos se rechazan; la suma de ambos contadores debe coincidir con el tamaño de la entrada original. Tres de las cuatro puntuaciones válidas alcanzan el límite de aprobación.

Seguir los contadores y el denominador

invalid cuenta las entradas rechazadas. El continue impide que esas puntuaciones lleguen a valid y, por tanto, al denominador del promedio. passed solo cuenta aprobados entre los datos válidos, no entre todos los recibidos.

El cero se considera falso en una condición, pero es una puntuación válida en estas reglas. Una comprobación como if score lo eliminaría incorrectamente. Debes comprobar el intervalo numérico, no sustituir esa regla por una prueba de veracidad.

El promedio se calcula una vez después del recorrido. if valid comprueba si existe al menos una puntuación válida antes de dividir entre la longitud de la lista. No tener datos válidos es una situación que debe expresarse, no un promedio de cero inventado.

Probar límites y declarar los supuestos

  1. Utiliza una lista vacía y comprueba el mensaje no valid scores.
  2. Prueba [59, 60, 61]: deben aprobar dos puntuaciones.
  3. Utiliza [-1, 101] y confirma que no se imprime un promedio.
  4. Restaura los valores originales y verifica que válidos más inválidos coincide con la cantidad de entradas.

La tabla de límites también puede convertirse en casos de pruebas automatizadas con unittest. Comprobar valores a ambos lados de cada extremo suele descubrir comparaciones incorrectas que un valor intermedio no revela.

Si amplías el contrato de entrada, decide si admites decimales y si debes rechazar booleanos, aunque bool sea una subclase de int. Este ejemplo comprueba intervalos bajo el supuesto de que las entradas son enteros. Admitir otros tipos exige ampliar la validación, no asumir que comprobar el rango resuelve todos los casos.