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:
"""Módulo para verificar si un texto es un palíndromo.
Este módulo proporciona funciones para determinar si una cadena de texto
es un palíndromo, ignorando mayúsculas/minúsculas y caracteres no alfabéticos.
"""
import sys
def palindromo(texto: str) -> bool:
"""Determina si el texto es un palíndromo de forma recursiva.
: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
"""
# Casos base
if len(texto) <= 1:
return True
# Si el primer y último carácter son iguales, verificamos el resto
if texto[0] == texto[-1]:
return palindromo(texto[1:-1])
return False
def limpiar_texto(texto: str) -> str:
"""Limpia el texto, dejando solo letras en minúsculas.
:param texto: Texto a limpiar
:return: Texto en minúsculas y sin caracteres no alfabéticos
"""
return ''.join(
caracter.lower()
for caracter in texto
if caracter.isalpha()
)
def main():
"""Función principal que maneja la ejecución del programa.
Lee los argumentos de línea de comandos, limpia el texto de entrada
y verifica si es un palíndromo, mostrando el resultado.
"""
if len(sys.argv) != 2:
print("Uso: python palindromo.py 'texto a verificar'")
return
texto = sys.argv[1]
texto_limpio = limpiar_texto(texto)
if not texto_limpio:
print("No es palíndromo")
return
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 no cumple completamente con el enunciado. Aunque la función recursiva palindromo está bien implementada (maneja casos base correctamente y reduce el problema en cada llamada), hay un error crítico en la función main. Cuando el texto limpio resulta en una cadena vacía (ej: entrada "!!!"), el programa imprime "No es palíndromo", pero según el enunciado las cadenas vacías son palíndromos. El código actual evita llamar a palindromo en este caso, incumpliendo el requisito explícito del problema.
Es fácil de leer y entender
El código es claro y accesible para principiantes. Usa nombres descriptivos (limpiar_texto, palindromo), incluye comentarios explicativos y divide la lógica en funciones pequeñas. La recursión se implementa de forma intuitiva (comparar primer/último carácter y reducir la cadena), lo que facilita su comprensión para estudiantes que están aprendiendo el concepto.
Sigue buenas prácticas de programación
El programa aplica buenas prácticas básicas:
- Documentación clara con docstrings en todas las funciones.
- Separación de responsabilidades (limpieza de texto vs. verificación recursiva).
- Manejo adecuado de argumentos de línea de comandos.
Sin embargo, el error enmainal no considerar que la cadena vacía es un palíndromo demuestra una falta de alineación con los requisitos específicos del enunciado, lo que afecta la corrección lógica.
Recomendaciones de mejora
-
Eliminar la verificación prematura de cadena vacía en
main:
La líneaif not texto_limpio: ...debe eliminarse. La funciónpalindromoya maneja correctamente las cadenas vacías (devuelveTrue), por lo que no es necesario tratar este caso de forma especial antes de llamarla. Esto asegurará que entradas como"!!!"(que se limpian a"") se evalúen como palíndromos, cumpliendo el enunciado. -
Ajustar el mensaje para cadenas no alfabéticas:
Si el enunciado requiere tratar explícitamente casos sin caracteres válidos (ej:"123"), el programa actual los consideraría como palíndromos (por ser cadena vacía tras limpieza), lo cual es correcto según la especificación. No se necesita cambio adicional aquí, solo eliminar el bloque problemático enmain. -
Refuerzo conceptual en comentarios:
Agregar un comentario enmainexplicando que "la cadena vacía se considera palíndromo según el enunciado, por lo que se evalúa directamente con la función recursiva" ayudaría a reforzar el requisito para el estudiante.