Desafío Python número 8.
En este caso, debemos generar casos de prueba para un algoritmo y corregirlo.
No debemos confiarnos si un algoritmo funciona como esperamos en los casos más “obvios”: es necesario hacer varias pruebas para mejorarlo todo lo posible.
▶️ Video: cómo probar una función en Python
Click aquí para desplegar la solución. 👈
Una posible solución al desafío: las dos últimas invocaciones retornaban un resultado incorrecto con la versión errónea del algoritmo. En la versión corregida dada en la solución, las cuatro invocaciones retornan lo esperado.
😀 ¿Se te ocurrieron otras formas de mejorar el algoritmo? Deja tu comentario debajo.
Desafío Python 👇
Click aquí para una versión accesible de la infografía (apta para lectores electrónicos)
La función a continuación intenta definir si dos secuencias tienen los mismos elementos únicos. Pero el algoritmo no siempre funciona correctamente. ¿En qué casos no funciona y cómo debería corregirse?
def mismosElementos(L1, L2):
elementos = set()
for numero in L1:
elementos.add(numero)
for numero in L2:
elementos.discard(numero)
return len(elementos) == 0
Estas invocaciones retornan True y False, como se esperaría:
mismosElementos( [1,2,2,3], [1,1,1,2,3] )
mismosElementos( [1,2,3], [1,1,3] )
Pero, ¿podrías indicar otros ejemplos que no retornen el resultado correcto? ¿Cómo corregirías el algoritmo para que los ejemplos dados retornen el resultado esperado?
Resolución:
Estos ejemplos son dos casos que retornan el resultado incorrecto (True y True cuando ambas deberían retornar False, ya que no tienen los mismos elementos únicos)
mismosElementos( [1,2,2,3], [0,1,1,2,3] )
mismosElementos( [], [0,1,1,2,3] )
Este algoritmo está corregido para que retorne lo que realmente pide la consigna (True si los elementos de ambas secuencias son iguales, False si no lo son):
def mismosElementos(L1, L2):
elementos1 = set()
elementos2 = set()
for numero in L1:
elementos1.add(numero)
for numero in L2:
elementos2.add(numero)
return elementos1 == elementos2