Pocas veces nos encontramos con algo así. Normalmente los acertijos son frases o secuencias que hay que descifrar, pero este es quizás un poco distinto. Antes de enrrollarnos, vamos al tema. La cuestión es encontrar un número que, al pasarlo a la función, devuelva True.

def check(x):
if x + 1 is 1 + x:
return False
if x + 2 is not 2 + x:
return False
return True

Probar mentalmente con números es sencillo. Pero por muchas vueltas que le des, no hay solución. En principio. En la vida real no hay solución posible por muchas matemáticas que conozcas.

Si quieres saber la respuesta, es -7. Sí, -7. Vamos a intentar explicar el motivo.

En Python, los número desde el -5 al 256 están preasignados como objectos para ahorra tiempo de procesamiento. Si obtienes un resultado de una operación que esté en ese rango, obtienes ese objeto que ya había sido generado al iniciar el intérprete. Así, cuando introduces -7, obtienes una nueva instancia del número -6, y la misma cuando es -5. El operador is interpreta los dos objetos como el mismo.

Para solucionar este problema, cuando comparamos dos número con Python tenemos que usar el operador ==, que sí devuelve en todos los casos la respuesta esperada.

Este acertijo ha sido publicado en este hilo de reddit.

Vía | Python Tips