【问题标题】:List of booleans and switching it values upon interaction布尔值列表并在交互时切换它的值
【发布时间】:2015-07-09 02:23:53
【问题描述】:

事情就是这样!我有一个包含 3 个布尔变量的列表,我想通过按下按钮在它们之间切换。每个布尔变量代表一个由 if 语句执行的函数。如何平滑地更改先前值和当前值?一种更好的方法,例如使用字典而不是列表。

我尝试了什么:

Gesture, Mouse, Keyboard = False, False, False 

ActionList  = [Gesture, Mouse, Keyboard]

if ActionList[0]:
   # blah
elif ActionList[1]:
   # blah
elif ActionList[2]:
   # blah 

编辑:

我设法将工作代码与迄今为止收到的回复放在一起。我仍然认为应该有更好的方法来实现这一点。

 actions = {"gesture": False, "mouse": False, "keyboard": False}

 CurrentLen = len(actions) # 3

 CurrentAct = 1

 TrueValue = 0

 while True:

     ActionName = actions.keys()[TrueValue]

     ActionValue = actions.values()[TrueValue]

     if actions.values()[(TrueValue - 1 )]: # Disable last
        Disable = actions.keys()[(TrueValue - 1 )]
        print "Disable %s" % (Disable)
        actions[Disable] = not actions[Disable]

     if CurrentAct == CurrentLen:
        CurrentAct = 1
        TrueValue = 0  

     elif CurrentAct < CurrentLen:
        CurrentAct = CurrentAct + 1
        TrueValue = CurrentAct - 1

     if not ActionValue: # Enable current
        print "Enable %s" % (ActionName)
        actions[ActionName] = not actions[ActionName] 

【问题讨论】:

  • “前值”和“当前值”是什么意思?
  • 我的意思是字典中值的位置。因为我需要卸载前一个函数来加载字典中的下一个函数。感谢您的关注,因此请检查我的编辑以获得更好的理解。
  • 很遗憾,字典没有顺序。您可能需要使用 OrderedDict。
  • 我会对该词进行一些搜索,再次感谢

标签: python list boolean


【解决方案1】:

我不太清楚你的意思,但这可能会有所帮助:

actions = {"gesture": False, "mouse": False, "keyboard": False}

if actions["gesture"]:
    ...

if actions["mouse"]:
    ...

if actions["keyboard"]:
    ...

这使用字典而不是列表来存储操作。

要更改值,您可以这样做:

actions["mouse"] = True

【讨论】:

  • 正是我的意思。请检查我的编辑以进行进一步的公开讨论!谢谢!
【解决方案2】:

您可以使用布尔运算符not

>>> Gesture, Mouse, Keyboard = False, False, False 
>>> not Gesture
>>> True
>>> not Mouse
>>> True
>>> not Keyboard
>>> True

【讨论】:

  • 感谢它的帮助。我用一个可行的解决方案编辑了我的问题,但我仍然不完全相信执行。
【解决方案3】:

问题对我来说很不清楚,希望我猜对了。

一个想法很简单,在每次迭代中我都想知道之前启用的键以轻松禁用它。为了强制切换的恒定顺序,我构建了键列表(保留了列表中的顺序)。所以我建立了两个列表并ziped 他们。把它睡在那里只是为了更容易调试。

import time

state = {"gesture": False, "mouse": False, "keyboard": False}
keys = list(state.keys())  # list() is needed in Python3
previous_keys = keys[-1:]+keys[:-1]  # some slice syntax

def disable(key):
    global state
    print("Disabling", key)
    state[key] = False

def enable(key):
    global state
    print("Enabling", key)
    state[key] = True

while True:
    for active, previous in zip(keys, previous_keys):
        if state[previous]:
            disable(previous)
        enable(active)
        print("-")
        time.sleep(1)

【讨论】:

    猜你喜欢
    • 2018-05-16
    • 2017-09-27
    • 2021-09-02
    • 1970-01-01
    • 1970-01-01
    • 2021-02-24
    • 2012-07-21
    • 2011-06-03
    • 1970-01-01
    相关资源
    最近更新 更多