布尔值列表,并在交互时切换它的值

2024-05-15 23:50:01 发布

您现在位置:Python中文网/ 问答频道 /正文

事情是这样的!我得到了一个包含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] 

Tags: 方法actionsfalseifnotblahdisableelif
3条回答

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

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

if actions["gesture"]:
    ...

if actions["mouse"]:
    ...

if actions["keyboard"]:
    ...

它使用字典而不是列表来存储操作。你知道吗

要更改值,可以执行以下操作:

actions["mouse"] = True

这个问题对我来说很不清楚,希望我答对了。你知道吗

一个想法很简单,在每次迭代中我都想知道以前启用的键,以便轻松地禁用它。为了执行开关的恒定顺序,我建立了键列表(列表中的顺序被保留)。所以我建立了两个列表并zip编辑它们。睡在那里只是为了更容易调试。你知道吗

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)

可以使用布尔运算符not

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

相关问题 更多 >