我的切换比较Python程序找不到逻辑错误

2024-04-25 17:53:23 发布

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

我正在尝试编写一个简单的Python程序,它将连接到我正在进行的一个小的微控制器报警项目。微控制器与八个开关相连。它根据串行端口上的开关状态输出二进制值。你知道吗

我正在尝试编写python程序解码器,并使用硬编码值来检查我的逻辑。以下是我写的:

switches='11011101'
currentstate = {}
prevstate = {}


def initswitches():
        for x in range (0,8):
                name = "switch" + str(x)
                currentstate[name] = switches[x]
                prevstate[name] = switches[x]

def setswitches():
        for x in range (0,8):
                name = "switch" + str(x)
                currentstate[name] = switches[x]

def checkswitches():
        for switch in range (0,8):
                name = "switch" + str(switch)
                if ( currentstate[name] != prevstate[name]):
                        print name + " value changed to " + str(switch)


initswitches()

for y in range (0,2):

        setswitches()
        print "Loop" + str(y)
        print "Switches:"
        print switches
        print "Current state:"
        print currentstate
        print "Previous state:"
        print prevstate


        checkswitches()

        prevstate = currentstate
        switches='01001001'
        print
        print

输出结果如下:

Loop0
Switches:
11011101
Current state:
{'switch3': '1', 'switch2': '0', 'switch1': '1', 'switch0': '1', 'switch7': '1', 'switch6': '0', 'switch5': '1', 'switch4': '1'}
Previous state:
{'switch3': '1', 'switch2': '0', 'switch1': '1', 'switch0': '1', 'switch7': '1', 'switch6': '0', 'switch5': '1', 'switch4': '1'}

Loop1
Switches:
01001001
Current state:
{'switch3': '0', 'switch2': '0', 'switch1': '1', 'switch0': '0', 'switch7': '1', 'switch6': '0', 'switch5': '0', 'switch4': '1'}
Previous state:
{'switch3': '0', 'switch2': '0', 'switch1': '1', 'switch0': '0', 'switch7': '1', 'switch6': '0', 'switch5': '0', 'switch4': '1'}

如您所见,我能够将每个开关的二进制值正确设置为当前状态,但由于某些原因,前一个状态总是与当前状态匹配。Loop0显示预期的行为,但Loop1应该具有与Loop0的输出相匹配的先前状态。在调用checkswitches函数之前,我找不到将previous state设置为与currentstate匹配的位置。有人能告诉我哪里出了问题吗?你知道吗


Tags: nameinfor状态rangestateprintswitch
1条回答
网友
1楼 · 发布于 2024-04-25 17:53:23
prevstate = currentstate

将变量prevstate重定向为等于currentstatedict。prevstate现在实际上是与currentstate相同的对象。 这样做会使对currentstate的所有更改也影响prevstate。你知道吗

要修复此问题,请制作prevstate的副本currentstate

prevstate = currentstate.copy()

或者,可以使用currentstate中的键值对更新prevstate

prevstate.update(currentstate)

第二种选择可能更可取,因为您将创建(并随后丢弃)更少的对象。你知道吗

相关问题 更多 >