2011-10-18 18 views
6

Ben bir değer aralığı (L,R,U,D) ve iki değişken, d ve newd bunlardan birini içerir. d ve newd'un aynı alt kümede (L,R veya U,D) olup olmadığını kontrol etmem gerekiyor.
Ben bunu yapabileceğimi biliyorum:İki değişkenin iki farklı kümeden değerleri olduğunu kontrol edin, DRY yolu

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

ikisi de başka türlü L,R veya U,D ve True değerleri varsa bu gerçekten False döndürür. Yine de çok fazla reddettim. Daha fazla DRY yaklaşım hakkında bazı öneriler? Sadece iki set olduğunu ve değerler biri veya diğerinde olması gerektiğini biliyorsanız

cevap

4

, o zaman bu bunu kolaylaştırabilirsiniz:

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

Açıklama:

  • D, set 1'de ve newd, set 2'de ise, =='un her iki tarafı True'dur, bu nedenle ifade True değerini döndürür.
  • d, 2 kümesinde ve newd, 1 ayarındaysa, == öğesinin her iki tarafı False, bu nedenle ifade, True değerini döndürür.
  • Aynı kümede bulunuyorlarsa, =='un bir yüzü False ve diğer True ifadesini döndürür, böylece ifadenin sonucu False olur.
+0

Fena değil orada bu söz sadece bir set yapmak için bir yoldur, ama belki bu mümkün değilse hiç ... acaba. – etuardu

+0

@etuardu: '(set1'de d)! = (Set1'de newd)' da çalışır. –

+0

Bir sette sadece bir kez kastettim. – etuardu

0

ne dersiniz:

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

In [9]: dmap[d] != dmap[newd] 
Out[9]: False 
İlgili konular