Revisión automática de la práctica 06-palindromo
Este es el resultado de una revisión automática de la prácica 06-palindromo, 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): palindromo.py
Correcto, se elige palindromo.py como entrega.
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 06-palindromo/tests/test_palindromo.py:
OK
Pruebas realizadas por 06-palindromo/tests/test_program.py:
OK
Revisión automática de programa
Programa revisado:
import sys
def palindromo(texto: str) -> bool:
if len(texto) <= 1:
return True
if texto[0] == texto[-1]:
return palindromo(texto[1:-1])
return False
def main():
if len(sys.argv) < 2:
return
entrada = sys.argv[1]
limpio = "".join(c.lower() for c in entrada if c.isalpha())
if palindromo(limpio):
print("Es palíndromo")
else:
print("No es palíndromo")
if __name__ == "__main__":
main()
Análisis
Cumple con el enunciado
El programa cumple completamente con los requisitos del enunciado. La función palindromo es puramente recursiva (sin bucles), maneja correctamente el caso base para cadenas vacías o de un carácter, y reduce el problema en cada llamada mediante texto[1:-1]. El procesamiento previo en main() elimina caracteres no alfabéticos y convierte todo a minúsculas, como exige el enunciado. Ejemplos como "¡Reconocer!" y "" son evaluados correctamente según los casos de prueba proporcionados.
Es fácil de leer y entender
El código es mayormente comprensible para un principiante. Los nombres en español (limpio, entrada) y la estructura clara de la recursión facilitan la lectura. Sin embargo, la línea limpio = "".join(c.lower() for c in entrada if c.isalpha()) usa una comprensión de lista anidada que podría resultar confusa para estudiantes que apenas están aprendiendo bucles for, ya que combina tres operaciones (filtrado, transformación y unión) en una sola línea.
Sigue buenas prácticas de programación
El programa incluye elementos positivos como la docstring en palindromo y la estructura if __name__ == "__main__". No obstante, omite validar adecuadamente la entrada: si no se pasa ningún argumento, el programa termina silenciosamente sin mensaje de error, lo que dificulta su uso práctico. Además, aunque la comprensión de lista es eficiente, para estudiantes principiantes sería más pedagógico usar un bucle for explícito para procesar los caracteres, reforzando conceptos básicos ya vistos.
Recomendaciones de mejora
- En
main(), añade un mensaje de error cuando no se reciba ningún argumento (ej:print("Error: Debe proporcionar un texto como argumento")), para guiar al usuario. - Reemplaza la comprensión de lista en el procesamiento de
limpiopor un bucleforcon acumulador, usandoisalpha()ylower()paso a paso. Esto reforzaría el uso de estructuras básicas y haría el código más didáctico. - Añade comentarios breves en el procesamiento de
limpioexplicando cada paso (eliminar no alfabéticos, convertir a minúsculas), para reforzar el entendimiento del flujo lógico.