Skip to content

Revisión automática de la práctica 02-enumera

Este es el resultado de una revisión automática de la prácica 02-enumera, tal y como la hemos recogido de este repositorio de entrega. Por favor, ten en cuenta que al ser una revisión automática, realizada en parte con la ayuda de un asistente de inteligencia artificial generativa, puede incluir errores, y ser incorrecta. Pero leela con atención, porque creemos que puede tener información útil. Si tienes cualquier duda, o crees que la revisión es errónea, por favor, consulta con los profesores de la asignatura.


Comprobación de archivos con extension '.py'

  • Archivos Python excluidos de la búsqueda:
  • Archivos Python encontrados (excluyendo esos): enumeraciones.py

Correcto, se elige enumeraciones.py para el análisis

Comprobación con ficheros de solución

Los archivos son diferentes de los de la solución.

Prueba automática del programa

Pruebas realizadas por 02-enumera/tests/test_enumeraciones.py:

OK

Revisión automática de programa

Programa revisado:

def pintalista(a):
    for c in range(len(a)):
        print(a[c], end = " ")
    print()

while True:
    try:
        # Así me aseguro de que el usuario siempre introduzca numeros enteros mayores que 0
        num = int(input("Escribe un número natural: "))
        if num >= 1:
            break
        else:
            print("Solo se pueden escribir números naturales")
    except ValueError:
        print("Solo se pueden escribir números naturales")

# Creo una lista que contiene los números impares
impares = [i for i in range(1, num + 1) if i % 2 != 0]
for _ in range(len(impares)):
    pintalista(impares)
    impares.pop()

# Creo una lista que contiene los números pares
pares = [i for i in range(2, num + 1) if i % 2 == 0]
for _ in range(len(pares)):
    pintalista(pares)
    pares.pop()

Análisis

Cumple con el enunciado

El programa cumple con el enunciado en todos los aspectos funcionales. Genera correctamente las listas de números impares y pares menores o iguales al número introducido, las imprime en el orden y formato especificado, y asegura que el número sea mayor que 0 mediante un bucle de validación. Los ejemplos proporcionados en el enunciado se reproducen exactamente con este código.

Es fácil de leer y entender

El código es moderadamente fácil de entender para un principiante. Usa comentarios claros y estructura lógica, pero introduce funciones (pintalista) que no han sido explicadas en clase. Esto puede generar confusión, ya que el enunciado menciona que los alumnos "sólo han visto construcciones básicas" y no funciones. Además, el uso de pop() para modificar las listas originales en cada iteración requiere comprender cómo funcionan las listas mutables, lo cual puede no ser intuitivo al principio.

Sigue buenas prácticas de programación

El programa tiene algunos puntos que podrían mejorar en términos de buenas prácticas:

  • Uso de funciones innecesarias: Aunque pintalista encapsula la lógica de impresión, su uso no es obligatorio y complica innecesariamente el código para un principiante.
  • Modificación de listas durante iteración: Eliminar elementos con pop() altera las listas originales (impares y pares), lo que puede llevar a errores en otros contextos. Una alternativa más segura sería generar sublistas dinámicas sin modificar las originales.
  • Nombres de variables en español: Aunque no es un error, en entornos internacionales se suele preferir el inglés para facilitar la colaboración futura.

Recomendaciones de mejora

  1. Evitar funciones si no se han visto en clase
    Reemplazar la función pintalista con código directo dentro del bucle. Por ejemplo:

    for _ in range(len(impares)):
        print(' '.join(map(str, impares)))
        impares.pop()
  2. Generar sublistas sin modificar las originales
    Usar índices o slicing para evitar alterar las listas impares y pares. Por ejemplo:

    for i in range(len(impares), 0, -1):
        print(' '.join(map(str, impares[:i])))
  3. Simplificar la validación del número
    Aunque el bucle while True con try-except es robusto, para principiantes podría ser más claro separar la validación en pasos explícitos:

    num = int(input("Dame un número entero mayor que 0: "))
    while num <= 0:
        print("El número debe ser mayor que 0.")
        num = int(input("Dame un número entero mayor que 0: "))
  4. Usar nombres de variables en inglés (opcional)
    Si bien no es crítico, usar nombres como odds y evens en lugar de impares y pares ayuda a familiarizarse con la terminología estándar en programación.

  5. Explicar el propósito de pop()
    Añadir un comentario que aclare que pop() elimina el último elemento de la lista, ya que esto no es evidente para quienes no han trabajado con listas mutables.