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:
***ERROR:***
Error 1
Mensaje de error:
.FFF
======================================================================
FAIL: test_palindromo_correcto (test_program.TestProgram.test_palindromo_correcto) (texto='Reconocer')
Debe detectar correctamente un palíndromo
----------------------------------------------------------------------
Traceback (most recent call last):
File "/tmp/_tempvs7a468x/test_program.py", line 23, in test_palindromo_correcto
self.assertEqual(output.getvalue(), expected)
~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError: 'No es palíndromo\n' != 'Es palíndromo\n'
- No es palíndromo
? ^^^^
+ Es palíndromo
? ^
======================================================================
FAIL: test_palindromo_correcto (test_program.TestProgram.test_palindromo_correcto) (texto='Anita lava la tina.')
Debe detectar correctamente un palíndromo
----------------------------------------------------------------------
Traceback (most recent call last):
File "/tmp/_tempvs7a468x/test_program.py", line 23, in test_palindromo_correcto
self.assertEqual(output.getvalue(), expected)
~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError: 'No es palíndromo\n' != 'Es palíndromo\n'
- No es palíndromo
? ^^^^
+ Es palíndromo
? ^
======================================================================
FAIL: test_palindromo_correcto (test_program.TestProgram.test_palindromo_correcto) (texto='Yo dono rosas, oro no doy')
Debe detectar correctamente un palíndromo
----------------------------------------------------------------------
Traceback (most recent call last):
File "/tmp/_tempvs7a468x/test_program.py", line 23, in test_palindromo_correcto
self.assertEqual(output.getvalue(), expected)
~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError: 'No es palíndromo\n' != 'Es palíndromo\n'
- No es palíndromo
? ^^^^
+ Es palíndromo
? ^
----------------------------------------------------------------------
Ran 2 tests in 0.001s
FAILED (failures=3)
Revisión automática de programa
Programa revisado:
import sys
argumento = sys.argv[1]
def procesar_texto(argumento: str):
cadena = argumento.lower()
cadena_final = ""
for i in cadena:
if i.isalpha():
cadena_final = cadena_final + i
return cadena_final
def palindromo(texto: str) -> bool:
if len(texto) <= 1:
return True
if texto[0] != texto[-1]:
return False
return palindromo(texto[1:-1])
def main():
texto = procesar_texto(argumento)
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. La función procesar_texto elimina caracteres no alfabéticos y convierte a minúsculas antes de llamar a la recursión, tal como exige el enunciado. Los ejemplos proporcionados ("Anita lava la tina.", "¡Reconocer!", cadena vacía) funcionan correctamente según la lógica implementada.
Es fácil de leer y entender
El código es claro para estudiantes principiantes. Usa nombres de variables y funciones en español que describen su propósito (procesar_texto, cadena_final). La estructura de la recursión es sencilla: compara extremos y avanza hacia el centro. El bucle en procesar_texto es básico (recorre caracteres y acumula los válidos), apropiado para el nivel de los alumnos. La separación entre procesamiento previo y lógica recursiva ayuda a entender el flujo.
Sigue buenas prácticas de programación
El programa sigue buenas prácticas básicas:
- Documenta la función
palindromocon su propósito y parámetros. - Usa la estructura
if __name__ == "__main__":para ejecución. - Divide responsabilidades (procesamiento vs. recursión).
- Valida caracteres con
isalpha()correctamente. El único aspecto mejorable es queprocesar_textono tiene docstring, pero dado el nivel de los alumnos y la simplicidad de la función, no es crítico.
Recomendaciones de mejora
-
Añade un comentario breve en
procesar_texto: Aunque es sencilla, explicar qué hace (ej: "Limpia la cadena: solo letras minúsculas") ayudaría a reforzar buenas prácticas de documentación. -
Evita concatenación repetida de cadenas: En
procesar_texto, usarcadena_final += ies funcional, pero para cadenas largas es menos eficiente. Podrías sugerir construir una lista y luego unirla con''.join(lista)(aunque para este ejercicio específico no es necesario, es un buen hábito a aprender). -
Valida la entrada de argumentos: Aunque el enunciado asume que se recibe un parámetro, añadir una verificación como
if len(sys.argv) < 2:con un mensaje de error haría el programa más robusto (ej: "Error: Debe proporcionar un texto como argumento").