根据三个布尔值的不同,我有一个变量要设置。最直截了当的方式是if语句,然后是一系列的私生子:
if a and b and c:
name = 'first'
elif a and b and not c:
name = 'second'
elif a and not b and c:
name = 'third'
elif a and not b and not c:
name = 'fourth'
elif not a and b and c:
name = 'fifth'
elif not a and b and not c:
name = 'sixth'
elif not a and not b and c:
name = 'seventh'
elif not a and not b and not c:
name = 'eighth'这有点尴尬,我想知道是否有更多的Pythonic方法来处理这个问题。我想到了几个想法。
名称= {a和b和c:‘第一’,a和b,而不是c:‘第二’,a而不是b和c:‘第三’,a而不是b,而不是c:‘四’,不是a和b,c:‘第五’,不是a和b,也不是c:‘第六’,不是a而不是b和c:‘第七’,非a,非b,非c:‘第八’}真
我称之为黑客,因为我不太狂野,因为有七个键是假的,而且互相凌驾。
名称= (a、b、c、a、b、b、c、c、b、c、a、b、c和第三、a、b、c、4或非a、b、c和非a、b、c和非a、b、c、c、6或非a、b和c或非a、b和c、非a、b、c和‘8’)
这是因为Python和ors返回要计算的最后一个值,但您必须知道这一点,才能理解这段奇怪的代码。
这三种选择都不是很令人满意的。你有什么建议吗?
发布于 2011-01-18 17:22:12
您可以将a、b和c看作三个位,当将它们放在一起时,形成一个介于0到7之间的数字。然后,您可以有一个值的数组'first','second',.“第八”,并将位值用作数组中的偏移量。这将是两行代码(一行将位组装为0-7中的值,另一行用于在数组中查找值)。
下面是代码:
nth = ['eighth', 'seventh', 'sixth', 'fifth', 'fourth', 'third', 'second', 'first']
nth[(a and 4 or 0) | (b and 2 or 0) | (c and 1 or 0)]发布于 2011-01-18 17:20:57
用个白痴怎么样?
name = {(True, True, True): "first", (True, True, False): "second",
(True, False, True): "third", (True, False, False): "fourth",
(False, True, True): "fifth", (False, True, False): "sixth",
(False, False, True): "seventh", (False, False, False): "eighth"}
print name[a,b,c] # prints "fifth" if a==False, b==True, c==True etc.发布于 2011-01-18 17:22:27
也许没什么更好的,但是
results = ['first', 'second', 'third', 'fourth',
'fifth', 'sixth', 'seventh', 'eighth']
name = results[((not a) << 2) + ((not b) << 1) + (not c)]https://stackoverflow.com/questions/4726949
复制相似问题