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 False
return palindromo(texto[1:-1])
def limpiar_texto(s: str) -> str:
resultado = ""
for letra in s:
if letra.isalpha():
resultado += letra.lower()
return resultado
def main():
entrada = " ".join(sys.argv[1:])
if any(letra.isdigit() for letra in entrada):
print("No puedes usar números")
print("Uso: python3 palindromo.py \"texto\"")
sys.exit()
texto_limpio = limpiar_texto(entrada)
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 no cumple completamente con el enunciado. Aunque la función recursiva palindromo está bien implementada (maneja casos base, compara extremos y reduce el problema), el programa incluye una validación innecesaria en main():
if any(letra.isdigit() for letra in entrada):
print("No puedes usar números")
...
El enunciado especifica que deben ignorarse los caracteres no alfabéticos (incluyendo números), no rechazarlos. Por ejemplo, para la entrada "123", el programa debería limpiarla a cadena vacía (considerada palíndromo), pero en su lugar muestra un error. Además, el mensaje de uso "Uso: python3 palíndromo.py \"texto\"" no es requerido por el enunciado.
Es fácil de leer y entender
El código es fácil de leer para principiantes. Usa nombres descriptivos (limpiar_texto, texto_limpio), estructura clara con funciones separadas y sigue el esquema solicitado (main() y if __name__). La lógica recursiva es sencilla y coincide con la pista dada en el enunciado (comparar primer/último carácter y reducir la cadena).
Sigue buenas prácticas de programación
Parcialmente. La separación de responsabilidades (limpieza vs. verificación recursiva) es correcta, y la recursión evita bucles como exige el enunciado. Sin embargo:
- La validación de dígitos en
main()es innecesaria y contradice el enunciado (debería procesar todos los caracteres no alfabéticos, no solo números). - No se justifica el mensaje de error personalizado, ya que el enunciado no exige validación de entrada más allá de la limpieza automática.
Recomendaciones de mejora
-
Elimina la validación de dígitos en
main(). El enunciado requiere ignorar todos los caracteres no alfabéticos (números, símbolos, etc.), no rechazarlos. Basta con llamar directamente alimpiar_texto(entrada)sin comprobaciones previas. -
Omite el mensaje de error personalizado. El programa debe procesar cualquier entrada de texto sin interrupciones (ej.:
"123"se convierte en cadena vacía y es palíndromo). -
Simplifica
main():Esto cumple estrictamente con el enunciado y evita lógica innecesaria.def main(): entrada = " ".join(sys.argv[1:]) texto_limpio = limpiar_texto(entrada) print("Es palíndromo" if palindromo(texto_limpio) else "No es palíndromo")