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:
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 a evaluar\"")
return
texto = "".join(c.lower() for c in sys.argv[1] if c.isalpha())
if palindromo(texto):
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 el primer y último carácter. El procesamiento previo en main() elimina caracteres no alfabéticos y convierte todo a minúsculas, cumpliendo con el requisito de que la función recursiva reciba una cadena limpia. Los ejemplos proporcionados en el enunciado (como "Anita lava la tina.") funcionan correctamente, y se manejan casos límite como la cadena vacía.
Es fácil de leer y entender
El código es claro para un principiante. Usa nombres de variables descriptivos (texto, main), sigue una estructura lógica (procesamiento previo → llamada recursiva → salida) y la recursión se implementa de forma intuitiva comparando extremos. La separación entre la limpieza de la cadena y la lógica recursiva ayuda a entender cada parte por separado. Solo podría mejorarse con un comentario breve en la función recursiva explicando el caso base, pero no es crítico para su nivel.
Sigue buenas prácticas de programación
El programa incluye elementos clave para principiantes:
- Uso de type hints en la función
palindromo. - Docstring explicativo (aunque breve) en la función.
- Manejo explícito de argumentos de línea de comandos.
- Separación de responsabilidades (limpieza en
main, lógica recursiva enpalindromo). - Validación de entrada básica (verifica si hay argumentos).
No hay errores graves ni malas prácticas evidentes.
Recomendaciones de mejora
-
Añade un comentario en el caso base: En
palindromo, explica brevemente por quélen(texto) <= 1devuelveTrue(ej:# Caso base: cadena vacía o un carácter son palíndromos). Esto reforzaría el entendimiento para principiantes. -
Simplifica el retorno en la recursión: En lugar de
if texto[0] == texto[-1]: return palindromo(...) else: return False, podrías usarreturn texto[0] == texto[-1] and palindromo(texto[1:-1]). Es más conciso y evita elelse, aunque tu implementación actual es válida. -
Verifica entrada vacía procesada: Aunque el código ya maneja la cadena vacía, en
main()podrías añadir un comentario como# Si tras limpiar queda cadena vacía (ej: "!!!"), es palíndromopara destacar este caso especial.