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 en caso contrario
"""
# Caso base: cadenas vacías o de un solo carácter son palíndromos
if len(texto) <= 1:
return True
# Comparamos primer y último carácter
if texto[0] != texto[-1]:
return False
# Llamada recursiva reduciendo el texto
return palindromo(texto[1:-1])
def main():
if len(sys.argv) < 2:
print("Uso: python3 palindromo.py \"texto a evaluar\"")
sys.exit(1)
entrada = sys.argv[1]
# Normalizamos: solo letras, en minúsculas
texto_limpio = "".join(c.lower() for c in entrada if c.isalpha())
# Llamada a la función recursiva
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. El procesamiento previo en main() elimina caracteres no alfabéticos y convierte a minúsculas antes de llamar a la función recursiva. Los ejemplos proporcionados en el enunciado ("Anita lava la tina.", "¡Reconocer!", etc.) funcionarían correctamente. También maneja adecuadamente la cadena vacía como palíndromo.
Es fácil de leer y entender
El código es claro para un estudiante principiante. La estructura está bien organizada: la función recursiva se enfoca únicamente en la lógica del palíndromo, mientras que main() se encarga del procesamiento inicial. Los comentarios explican los pasos clave (caso base, comparación de caracteres, llamada recursiva) y los nombres de variables (texto_limpio, entrada) son descriptivos. La separación entre la limpieza del texto y la verificación recursiva facilita la comprensión del flujo del programa.
Sigue buenas prácticas de programación
El programa incluye buenas prácticas básicas:
- Uso de docstrings para documentar la función.
- Validación de argumentos de línea de comandos en
main(). - Tratamiento explícito de casos extremos (cadena vacía).
- Separación de responsabilidades (limpieza del texto vs. lógica recursiva).
- Estructura estándar con
if __name__ == "__main__":.
Recomendaciones de mejora
- Aclarar el procesamiento en comentarios: En la línea donde se limpia el texto, añadir un comentario breve que explique por qué se hace antes de la llamada recursiva (ej: "# Preparar texto según requisitos de la función recursiva: solo letras minúsculas").
-
Manejo explícito de cadena vacía en
main(): Aunque el código ya funciona, un comentario entexto_limpiocomo "# Incluso si queda vacío, palindromo() lo manejará" reforzaría el entendimiento del requisito del enunciado. -
Verificar longitud mínima en recursión: Aunque el caso base lo cubre, en la llamada recursiva
texto[1:-1]podrías añadir un comentario como "# Reduce el problema eliminando primer y último carácter" para reforzar el concepto de reducción del problema.