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'
- Comprobación con ficheros de solución
- Prueba automática del programa
- Revisión automática de programa
- Análisis
- Recomendaciones de mejora
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
pintalistaencapsula 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 (imparesypares), 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
-
Evitar funciones si no se han visto en clase
Reemplazar la funciónpintalistacon código directo dentro del bucle. Por ejemplo:for _ in range(len(impares)): print(' '.join(map(str, impares))) impares.pop() -
Generar sublistas sin modificar las originales
Usar índices o slicing para evitar alterar las listasimparesypares. Por ejemplo:for i in range(len(impares), 0, -1): print(' '.join(map(str, impares[:i]))) -
Simplificar la validación del número
Aunque el buclewhile Truecontry-exceptes 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: ")) -
Usar nombres de variables en inglés (opcional)
Si bien no es crítico, usar nombres comooddsyevensen lugar deimparesyparesayuda a familiarizarse con la terminología estándar en programación. -
Explicar el propósito de
pop()
Añadir un comentario que aclare quepop()elimina el último elemento de la lista, ya que esto no es evidente para quienes no han trabajado con listas mutables.