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
import re
def palindromo(texto: str) -> bool:
if len(texto) <= 1:
return True
if texto[0] != texto[-1]:
return False
return palindromo(texto[1:-1])
def main():
if len(sys.argv) < 2:
print("Uso: python3 palindromo.py \"texto a evaluar\"")
return
texto_original = " ".join(sys.argv[1:])
texto_limpio = re.sub(r'[^a-zA-Z]', '', texto_original).lower()
if palindromo(texto_limpio):
print("Es palíndromo")
else:
print("No es palíndromo")
if __name__ == "__main__":
main()
Análisis
Cumple con el enunciado
El programa cumple parcialmente con el enunciado. La función recursiva palindromo está implementada correctamente: maneja el caso base (cadenas vacías o de longitud 1), compara extremos y reduce el problema recursivamente. Sin embargo, no procesa adecuadamente caracteres alfabéticos propios del español como la "ñ". La expresión regular [^a-zA-Z] elimina estos caracteres (ej.: "año" se convierte en "ao"), lo que viola el requisito de ignorar solo caracteres no alfabéticos. En español, la "ñ" es alfabética, por lo que debería conservarse. Los ejemplos del enunciado no incluyen estos casos, pero el programa fallaría con entradas como "eñe" (que sí es palíndromo).
Es fácil de leer y entender
El código es claro para un estudiante principiante. Usa nombres descriptivos (texto_limpio, palindromo), estructura lógica y comentarios implícitos en la lógica. Sin embargo, el uso de re.sub podría generar confusión, ya que los alumnos solo han visto construcciones básicas (bucles, condicionales). Un enfoque con for o while para limpiar la cadena sería más accesible para su nivel.
Sigue buenas prácticas de programación
La estructura general es adecuada: separa la limpieza de la lógica recursiva, incluye docstring y maneja argumentos correctamente. No obstante, depende de una librería avanzada (re) sin justificación clara, cuando el problema podría resolverse con ciclos básicos. Además, no se valida si texto_limpio queda vacío tras la limpieza (aunque el caso base lo maneja implícitamente).
Recomendaciones de mejora
-
Reemplaza
re.subcon un ciclo básico: Usa un bucleforpara filtrar caracteres alfabéticos conisalpha()y convertir a minúsculas. Ejemplo:texto_limpio = ''.join(c.lower() for c in texto_original if c.isalpha())Esto manejaría correctamente la "ñ" y usaría conceptos ya vistos (ciclos, condicionales).
-
Explica brevemente la limpieza de texto: Añade un comentario en
main()indicando que se eliminan caracteres no alfabéticos según el alfabeto español (aunque Pythonisalpha()ya lo hace automáticamente). -
Evita dependencias innecesarias: Al no usar
re, el código sería más coherente con el nivel de los alumnos y cumpliría mejor el enunciado al respetar caracteres alfabéticos del español.