0

假设我正在尝试使用它的加速度计打印出平板设备的方向,该加速度计提供设备显示器水平和垂直方向的加速度测量值。我知道可以使用if如下形式的一组语句来完成这样的打印输出:

if abs(stableAcceleration[0]) > abs(stableAcceleration[1]) and stableAcceleration[0] > 0:
    print("right")
elif abs(stableAcceleration[0]) > abs(stableAcceleration[1]) and stableAcceleration[0] < 0:
    print("left")
elif abs(stableAcceleration[0]) < abs(stableAcceleration[1]) and stableAcceleration[1] > 0:
    print("inverted")
elif abs(stableAcceleration[0]) < abs(stableAcceleration[1]) and stableAcceleration[1] < 0:
    print("normal")

是否有可能以更简洁的形式将其逻辑编码?是否可以构建一种真值表,使得方向只是该表的查找值?做这样的事情有什么好方法?


编辑:根据@jonrsharpe的建议,我以如下方式实现了逻辑:

tableOrientations = {
    (True,  True):  "right",
    (True,  False): "left",
    (False, True):  "inverted",
    (False, False): "normal"
}
print(
    tableOrientations[(
        abs(stableAcceleration[0]) > abs(stableAcceleration[1]),
        stableAcceleration[0] > 0
    )]
)
4

1 回答 1

1

考虑按照以下方式做一些事情:

x = 0;
if abs(stableAcceleration[0]) > abs(stableAcceleration[1]) :
    x += 2
if stableAcceleration[0] > 0:
    x +=1

list = ["normal", "invert", "left", "right"]

print(list[x])

话虽如此,您的一系列if陈述并未涵盖所有情况。

于 2015-04-29T14:49:23.130 回答