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:
FFFFFF
======================================================================
FAIL: test_no_palindromo (test_program.TestProgram.test_no_palindromo) (texto='Python')
Debe detectar correctamente cuando no es palíndromo
----------------------------------------------------------------------
Traceback (most recent call last):
File "/tmp/_tempwjxiitfs/test_program.py", line 38, in test_no_palindromo
self.assertEqual(output.getvalue(), expected)
~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError: 'No es un palindromo\n' != 'No es palíndromo\n'
- No es un palindromo
? --- ^
+ No es palíndromo
? ^
======================================================================
FAIL: test_no_palindromo (test_program.TestProgram.test_no_palindromo) (texto='Prueba')
Debe detectar correctamente cuando no es palíndromo
----------------------------------------------------------------------
Traceback (most recent call last):
File "/tmp/_tempwjxiitfs/test_program.py", line 38, in test_no_palindromo
self.assertEqual(output.getvalue(), expected)
~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError: 'No es un palindromo\n' != 'No es palíndromo\n'
- No es un palindromo
? --- ^
+ No es palíndromo
? ^
======================================================================
FAIL: test_no_palindromo (test_program.TestProgram.test_no_palindromo) (texto='Hola mundo')
Debe detectar correctamente cuando no es palíndromo
----------------------------------------------------------------------
Traceback (most recent call last):
File "/tmp/_tempwjxiitfs/test_program.py", line 38, in test_no_palindromo
self.assertEqual(output.getvalue(), expected)
~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError: 'No es un palindromo\n' != 'No es palíndromo\n'
- No es un palindromo
? --- ^
+ No es palíndromo
? ^
======================================================================
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/_tempwjxiitfs/test_program.py", line 23, in test_palindromo_correcto
self.assertEqual(output.getvalue(), expected)
~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError: 'Es un palindromo\n' != 'Es palíndromo\n'
- Es un palindromo
? --- ^
+ 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/_tempwjxiitfs/test_program.py", line 23, in test_palindromo_correcto
self.assertEqual(output.getvalue(), expected)
~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError: 'Es un palindromo\n' != 'Es palíndromo\n'
- Es un palindromo
? --- ^
+ 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/_tempwjxiitfs/test_program.py", line 23, in test_palindromo_correcto
self.assertEqual(output.getvalue(), expected)
~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError: 'Es un palindromo\n' != 'Es palíndromo\n'
- Es un palindromo
? --- ^
+ Es palíndromo
? ^
----------------------------------------------------------------------
Ran 2 tests in 0.002s
FAILED (failures=6)
Revisión automática de programa
Programa revisado:
import sys
def palindromo(texto: str) -> bool:
if len(texto) == 0 or len(texto) == 1: #una letra es un palindromo
return True
if not texto[0] == texto[-1]: # si empieze y termina en diferentes letras no lo es
return False
return palindromo(texto[1:-1])
def validacion_texto():
if len(sys.argv) < 2:
print("No se ha introducido texto")
sys.exit(1)
else:
texto_original = " ".join(sys.argv[1:])
texto_limpio = "".join(c for c in texto_original.lower() if c.isalpha())
return texto_limpio
def main():
texto_limpio = validacion_texto()
if palindromo(texto_limpio) == True:
print("Es un palindromo")
else:
print("No es un palindromo")
if __name__ == "__main__":
main()
Análisis
Cumple con el enunciado
El programa no cumple completamente con el enunciado. Aunque la lógica recursiva es correcta y procesa adecuadamente la entrada (ignorando mayúsculas y caracteres no alfabéticos), los mensajes de salida son incorrectos. El enunciado exige imprimir exactamente "Es palíndromo" y "No es palíndromo", pero el código muestra "Es un palindromo" (con "un" extra y sin acento en palíndromo). Además, falta el acento en la palabra "palíndromo", lo cual es relevante en español. Los ejemplos del enunciado usan la forma correcta con acento, por lo que esto es un error grave.
Es fácil de leer y entender
El código es claro para principiantes. Usa nombres de funciones en español (validacion_texto, palindromo), comentarios explicativos en las partes clave (caso base, comparación de caracteres) y separa bien las responsabilidades (limpieza de texto, lógica recursiva, entrada/salida). Sin embargo, los errores en los mensajes de salida podrían generar confusión al comparar con los ejemplos del enunciado.
Sigue buenas prácticas de programación
El programa aplica buenas prácticas básicas:
- Usa type hints en la función
palindromo. - Divide el trabajo en funciones pequeñas con responsabilidades claras.
- Maneja casos extremos (cadena vacía, longitud 1).
Pero tiene dos fallos críticos:
- Los mensajes de salida no coinciden con el formato exigido.
- No respeta la ortografía específica del enunciado (falta el acento en palíndromo), lo cual es importante en contextos reales.
Recomendaciones de mejora
-
Corrige los mensajes de salida para que coincidan exactamente con el enunciado:
print("Es palíndromo") # En lugar de "Es un palindromo" print("No es palíndromo") -
Añade el acento en "palíndromo" en los mensajes (en Python, se escribe como
"palíndromo"). - En el caso base de
palindromo, usalen(texto) <= 1en lugar delen(texto) == 0 or len(texto) == 1para mayor claridad (aunque funcionalmente es equivalente). - Verifica siempre que los mensajes de salida coincidan literalmente con los ejemplos del enunciado, especialmente en ejercicios con especificaciones estrictas.