有没有可能在Python中写出一种真table来简化if语句的写法?
Is it possible in Python to write a sort of truth table to simplify the writing of if statements?
假设我正在尝试使用其加速度计打印出 tablet 设备的方向,该加速度计可提供设备显示屏水平和垂直方向的加速度测量值。我知道可以使用如下形式的一组 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")
是否有可能以某种更简洁的形式将其逻辑编码?是否可以构建某种真理 table,使得方向只是此 table 的查找值?这样做的好方法是什么?
编辑:在@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
)]
)
考虑按照以下方式做一些事情:
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
陈述并未涵盖所有情况。
假设我正在尝试使用其加速度计打印出 tablet 设备的方向,该加速度计可提供设备显示屏水平和垂直方向的加速度测量值。我知道可以使用如下形式的一组 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")
是否有可能以某种更简洁的形式将其逻辑编码?是否可以构建某种真理 table,使得方向只是此 table 的查找值?这样做的好方法是什么?
编辑:在@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
)]
)
考虑按照以下方式做一些事情:
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
陈述并未涵盖所有情况。