如何在Python中缩短if if和elif代码

时间:2014-03-15 17:42:02

标签: python if-statement refactoring

有两个变量ab,每个变量可以是正数也可以是负数。需要根据四个条件设置标识符。我怎样才能最小化下面给出的代码,以便可以实现相同的任务?列表理解或按位操作或类似的操作可能会缩短这一点,但我不知道如何做到这一点。

if a > 0 and b > 0:
    direction = 'NORTH EAST'

elif a > 0 and b < 0:
    direction = 'SOUTH EAST'

elif a < 0 and b < 0:
    direction = 'SOUTH WEST'

elif a < 0 and b > 0:
    direction = 'NORTH WEST'

4 个答案:

答案 0 :(得分:2)

您可以使用像这样的条件表达式

("NORTH " if b > 0 else "SOUTH ") + ("EAST" if a > 0 else "WEST")

还有一个可以在这里使用的黑客

["SOUTH ", "NORTH "][b > 0] + ["WEST", "EAST"][a > 0]

这是因为,在Python boolean values are actually integers中。以下内容适用于Python

print 1 == True
# True
print 0 == False
# True

答案 1 :(得分:1)

使用条件表达式:

direction = ' '.join(['NORTH' if a > 0 else 'SOUTH',
                      'EAST' if b > 0 else 'WEST'])

演示:

>>> for a in (-1, 1):
...     for b in (-1, 1):
...         print ' '.join(['NORTH' if a > 0 else 'SOUTH',
...                         'EAST' if b > 0 else 'WEST'])
... 
SOUTH WEST
SOUTH EAST
NORTH WEST
NORTH EAST

答案 2 :(得分:0)

你的样子很好看。使用条件表达式是同样的事情:

>>> 
>>> a = 1
>>> b = -1
>>> lat = 'NORTH' if a > 0 else 'SOUTH'
>>> lon = 'EAST' if b > 0 else 'WEST'
>>> direction = '{} {}'.format(lat, lon)
>>> direction
'NORTH WEST'
>>>

答案 3 :(得分:0)

或使用字典作为地图

map[-1] = {-1:'SOUTH WEST', 1: 'NORTH WEST'}
map[1] = {-1:'SOUTH EST', 1: 'NORTH EST'}
direction = map[a/abs(a)][b/abs(b)]