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.

Solución al desafío



Desafío Python 👇

Desafío Python número 8

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