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:
"""Determina si el texto es un palíndromo.
:param texto: Cadena en minúsculas y sin caracteres no alfabéticos
:return: True si es palíndromo, False en caso contrario"""
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\"")
return
entrada = sys.argv[1]
texto_limpio = re.sub(r'[^a-zA-Z]', '', entrada).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 con todos los requisitos del enunciado. La función palindromo es puramente recursiva (sin bucles), maneja correctamente el caso base para cadenas vacías o de longitud 1, y reduce el problema en cada llamada recursiva comparando el primer y último carácter. El procesamiento previo de la cadena (eliminación de caracteres no alfabéticos y conversión a minúsculas) se realiza en main usando re.sub, cumpliendo con la especificación de que la función recursiva reciba solo texto limpio. Los ejemplos proporcionados en el enunciado ("Anita lava la tina.", "", etc.) funcionarían correctamente. La estructura del programa incluye main y la verificación if __name__ == "__main__", y la salida sigue el formato solicitado.
Es fácil de leer y entender
El código es claro para un estudiante principiante. Usa nombres descriptivos en español (texto_limpio), separa claramente la lógica de limpieza de la recursión, y la función recursiva tiene una estructura sencilla con condiciones bien definidas. Los comentarios explican el propósito de cada parte, aunque podrían ser más detallados para reforzar el aprendizaje (ej.: explicar por qué se usa texto[1:-1]). La recursión es intuitiva al comparar extremos y reducir la cadena, un enfoque alineado con las pistas del enunciado.
Sigue buenas prácticas de programación
El programa incluye elementos clave como docstrings, anotaciones de tipos, y manejo de errores básico (verificación de argumentos en main). La separación de responsabilidades (limpieza en main, lógica recursiva en palindromo) es adecuada. Sin embargo, el uso de re.sub podría considerarse avanzado para principiantes, aunque es válido dado que el enunciado no restringe métodos para limpiar la cadena. La recursión es eficiente para el propósito educativo, aunque en casos extremos (cadenas muy largas) generaría muchas llamadas anidadas.
Recomendaciones de mejora
-
Explicar mejor el procesamiento inicial: Añade un comentario en
mainque detalle por qué se usare.sub(r'[^a-zA-Z]', '', entrada), especialmente para reforzar que se eliminan caracteres como puntos, espacios o signos de puntuación. -
Considerar caracteres especiales del español: Aunque el enunciado no lo exige explícitamente, en contextos hispanos sería útil mencionar que
[^a-zA-Z]no incluye letras comoño tildes. Para principiantes, podrías sugerir una alternativa con bucles (ej.: recorrer la cadena y filtrar caracteres manualmente) si se quiere evitarre. -
Refuerza el caso base en los comentarios: En la función
palindromo, añade un comentario que explique por qué las cadenas vacías o de un carácter son palíndromos, ayudando a consolidar el concepto recursivo.