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/_temp7rltobhi/test_program.py", line 38, in test_no_palindromo
self.assertEqual(output.getvalue(), expected)
~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError: 'False\n' != 'No es palíndromo\n'
- False
+ 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/_temp7rltobhi/test_program.py", line 38, in test_no_palindromo
self.assertEqual(output.getvalue(), expected)
~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError: 'False\n' != 'No es palíndromo\n'
- False
+ 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/_temp7rltobhi/test_program.py", line 38, in test_no_palindromo
self.assertEqual(output.getvalue(), expected)
~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError: 'False\n' != 'No es palíndromo\n'
- False
+ 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/_temp7rltobhi/test_program.py", line 23, in test_palindromo_correcto
self.assertEqual(output.getvalue(), expected)
~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError: 'False\n' != 'Es palíndromo\n'
- False
+ 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/_temp7rltobhi/test_program.py", line 23, in test_palindromo_correcto
self.assertEqual(output.getvalue(), expected)
~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError: 'False\n' != 'Es palíndromo\n'
- False
+ 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/_temp7rltobhi/test_program.py", line 23, in test_palindromo_correcto
self.assertEqual(output.getvalue(), expected)
~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError: 'False\n' != 'Es palíndromo\n'
- False
+ Es palíndromo
----------------------------------------------------------------------
Ran 2 tests in 0.002s
FAILED (failures=6)
Revisión automática de programa
Programa revisado:
import sys
datos = sys.argv[1:]
def corregir(datos: str):
valor = ""
for i in range(len(datos)):
valor = valor + datos[i]
valor = valor.lower()
valor_limpio = ""
for i in valor:
if i.isalpha():
valor_limpio += i
return valor_limpio
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():
result = corregir(datos)
print(palindromo(result))
if __name__ == "__main__":
main()
Análisis
Cumple con el enunciado
El programa no cumple completamente con el enunciado.
-
❌ Procesamiento de entrada incorrecto: Usasys.argv[1:](una lista) en lugar desys.argv[1](el texto como cadena), lo que causa errores si se pasan múltiples argumentos. Aunque funciona para un solo argumento, viola la especificación de recibir una cadena de texto como parámetro. -
❌ Salida incorrecta: ImprimeTrue/Falseen lugar de los mensajes requeridos ("Es palíndromo"/"No es palíndromo"). -
✅ Función recursiva correcta: La lógica depalindromo()es recursiva, sin bucles, y maneja bien el caso base y la reducción del problema. -
✅ Preprocesamiento adecuado: La funcióncorregir()elimina no alfabéticos y convierte a minúsculas antes de llamar apalindromo().
Es fácil de leer y entender
-
✅ Nombres descriptivos: Funciones comocorregir()ypalindromo()son claras para principiantes. -
⚠️ Confusión en parámetros: Usardatos(lista) en lugar de un string directo puede generar dudas sobre cómo se procesa la entrada. -
✅ Estructura simple: El flujomain() → corregir() → palindromo()es lineal y comprensible.
Sigue buenas prácticas de programación
-
❌ Manejo incorrecto de argumentos: No se valida si hay al menos un argumento (sys.argv[1]podría no existir). -
❌ Falta de mensajes claros: La salida debe ser textual, no booleana, según el enunciado. -
✅ Separación de responsabilidades: Preprocesamiento y lógica recursiva están en funciones distintas, lo cual es correcto. -
⚠️ Tipo incorrecto en parámetro:corregir()espera unstrpero recibe una lista enmain(), lo que es inconsistente.
Recomendaciones de mejora
-
Corrige el manejo de argumentos:
Enmain(), usatexto = sys.argv[1]en lugar dedatos = sys.argv[1:]para obtener directamente la cadena de texto.
Ejemplo:def main(): texto = sys.argv[1] texto_limpio = corregir(texto) print("Es palíndromo" if palindromo(texto_limpio) else "No es palíndromo") -
Ajusta la salida al formato requerido:
Reemplazaprint(palindromo(result))por una condición que imprima los mensajes específicos del enunciado. -
Valida la entrada:
Añade una verificación básica para evitar errores si no se pasa ningún argumento:if len(sys.argv) < 2: print("Error: Debes proporcionar un texto como argumento.") return -
Simplifica
corregir():
Elimina el bucle innecesario para concatenar la lista. Al usarsys.argv[1], recibirás directamente un string, por lo que el primer bucle decorregir()dejará de ser necesario.
Ejemplo simplificado:def corregir(texto: str) -> str: texto = texto.lower() return ''.join(c for c in texto if c.isalpha())