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 に答える