2011-10-18 15 views
6

Tengo un rango de valores (L,R,U,D) y dos variables, d y newd, que contienen uno de ellos. Necesito comprobar si d y newd están en el mismo subconjunto (L,R o U,D) o no.
Sé que puedo hacer esto:Compruebe si dos variables tienen valores de dos conjuntos diferentes, el modo DRY

d in {'L','R'} and newd in {'U','D'} or d in {'U','D'} and newd in {'L','R'} 

este hecho vuelve False si ambos tienen valores de L,R o U,D, y True lo contrario. Aún así, me parece mucho reduntant. Algunas sugerencias sobre un enfoque más DRY?

Respuesta

4

Si sabe que sólo hay dos conjuntos y que sus valores deben estar en uno o el otro, entonces se puede simplificar a esto:

(d in set1) == (newd in set2) 

Explicación:

  • Si d está en el conjunto 1 y newd está en el conjunto 2, ambos lados del == son True, por lo que la expresión devuelve True.
  • Si d está en el conjunto 2 y newd está en el conjunto 1, ambos lados del == son False, por lo que la expresión devuelve True.
  • Si están en el mismo conjunto, un lado del == devolverá False y el otro True por lo que el resultado de la expresión será False.
+0

No está mal del todo ... Me pregunto si hay una manera de hacer esto mencionar sólo un juego, pero tal vez eso no es posible. – etuardu

+0

@etuardu: '(d en set1)! = (Newd en set1)' también funciona. –

+0

Quise decir un juego solo una vez – etuardu

0

¿Qué tal:

In [8]: dmap = {'L':0, 'R':0, 'U':1, 'D':1} 

In [9]: dmap[d] != dmap[newd] 
Out[9]: False 
Cuestiones relacionadas