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 de caracteres a evaluar, en minúsculas y sin caracteres no alfabéticos
returns: True si es palíndromo, False en caso contrario
"""
if len(texto) <= 1:
return True
if texto[0] == texto[-1]:
return palindromo(texto[1:-1])
else:
return False
def main():
if len(sys.argv) < 2:
print("Uso: python3 palindromo.py \"texto\"")
sys.exit(1)
texto_original = 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 completamente con el 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 comparando los extremos. El preprocesamiento en main() elimina caracteres no alfabéticos y normaliza a minúsculas usando re.sub(), tal como exige el enunciado. Los ejemplos proporcionados ("Anita lava la tina.", "", etc.) funcionarían correctamente. La salida muestra los mensajes requeridos y maneja los argumentos de línea de comandos como se especifica.
Es fácil de leer y entender
El código es claro para un estudiante principiante. La estructura está organizada en funciones con nombres descriptivos (palindromo, main), y los comentarios explican el propósito de cada parte. La lógica recursiva es sencilla de seguir: compara primer y último carácter, y avanza hacia el centro. Aunque el uso de re.sub() podría ser un concepto avanzado, el enunciado permitía su uso y el código lo integra de forma comprensible con el comentario en texto_limpio.
Sigue buenas prácticas de programación
El programa sigue buenas prácticas básicas:
- Usa
if __name__ == "__main__":para encapsular la ejecución. - Incluye docstrings explicativos en la función
palindromo. - Valida la entrada con
len(sys.argv) < 2. - Separa claramente el preprocesamiento del texto de la lógica recursiva.
- Maneja correctamente los casos límite (cadenas vacías, longitud 1).
Recomendaciones de mejora
-
Explicar brevemente el preprocesamiento: Añadir un comentario corto en
texto_limpiopara clarificar que se eliminan caracteres no alfabéticos y se convierte a minúsculas, ayudando a estudiantes menos familiarizados con expresiones regulares. -
Evitar redundancia en la condición recursiva: En
palindromo, la líneaif texto[0] == texto[-1]:podría simplificarse areturn texto[0] == texto[-1] and palindromo(texto[1:-1]), aunque la implementación actual es válida y clara para principiantes. -
Verificar cadena vacía en
main: Aunque la función recursiva ya la maneja, un comentario enmaincomo# Incluye manejo de cadena vacía según enunciadoreforzaría el cumplimiento del requisito.