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:
"""Determina si el texto es un palíndromo.
:param texto: Cadena de caracteres a evaluar, en minúsculas y sin
caracteres no alfabéticos.
:return: True si es palíndromo, False si no.
"""
# Caso base: cadenas vacías o de un solo carácter
if len(texto) <= 1:
return True
# Comparar primer y último carácter
if texto[0] != texto[-1]:
return False
# Llamada recursiva reduciendo la cadena
return palindromo(texto[1:-1])
def limpiar_texto(cadena: str) -> str:
"""Pasa a minúsculas y elimina caracteres no alfabéticos."""
resultado = ""
for c in cadena.lower():
if c.isalpha():
resultado += c
return resultado
def main():
if len(sys.argv) < 2:
print("Uso: python3 palindromo.py \"texto a evaluar\"")
return
entrada = sys.argv[1]
texto_limpio = limpiar_texto(entrada)
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 completamente con el 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 recursiva comparando el primer y último carácter. La función limpiar_texto procesa adecuadamente la entrada (ignorando mayúsculas y caracteres no alfabéticos) antes de llamar a la recursión. Los ejemplos proporcionados en el enunciado ("Anita lava la tina.", "¡Reconocer!", etc.) funcionan correctamente, y el formato de salida coincide con lo solicitado.
Es fácil de leer y entender
El código es claro para un estudiante principiante. Usa nombres descriptivos (limpiar_texto, texto_limpio), separa lógica en funciones con responsabilidades bien definidas, y contiene comentarios explicativos breves. La estructura recursiva es intuitiva al comparar extremos y reducir la cadena, lo que facilita entender el flujo de ejecución. La función main sigue el esquema habitual, lo que ayuda a reconocer el punto de entrada del programa.
Sigue buenas prácticas de programación
El programa incluye docstrings para documentar funciones, lo cual es una buena práctica. La separación entre la limpieza del texto y la verificación recursiva mejora la modularidad. Sin embargo, la construcción de cadenas mediante concatenación repetida (resultado += c) no es óptima en Python (aunque funcional para entradas pequeñas), pero dado el nivel principiante, esto es comprensible y no afecta la corrección.
Recomendaciones de mejora
- En la función
palindromo, añade un comentario breve explicando por qué se usatexto[1:-1]en la llamada recursiva (ej: "Reduce la cadena excluyendo el primer y último carácter ya comparados"). - Considera manejar explícitamente el caso donde
texto_limpioqueda vacío después de limpiar (aunque el código ya lo resuelve gracias al caso base, un comentario aquí ayudaría a reforzar el concepto para principiantes). - En
limpiar_texto, aunque no es obligatorio, menciona en un comentario que se usalower()para estandarizar a minúsculas, reforzando así el requisito del enunciado.