如何打印' ON'如果至少1' ON'最后5(开/关)状态?

时间:2016-06-17 05:46:04

标签: python if-statement

我试图查看机器是否正常工作。我做了一个电路来看电缆上的电流,但有时候我会看到' OFF'在屏幕上甚至机器不停止。我决定改变代码而不是电路。所以我想看看' ON'在屏幕上如果有' ON'在最后5个状态中一次。

我的代码如下:

prev_Status = None

while True:
    if sensor > 1.60:
        Status = 'ON'
    else:
        Status = 'OFF'

    if Status != prev_Status:
        print("Status : {}".format(Status))
        prev_Status = Status

2 个答案:

答案 0 :(得分:2)

您当前的实施只保留一个以前的状态,无法执行您想要的操作。 deque()非常适合此任务:它可以限制为最大尺寸,并且具有快速追加和弹出:

from collections import deque

prev_statuses = deque([], maxlen=5)

while True:
    if sensor > 1.6:
        status = 'ON'
    else:
        status = 'OFF'

    prev_statuses.append(status)

    if 'ON' in prev_statuses:
        print("Status: ON")
    else:
        print("Status: OFF")

如果您想了解它,请将测试的布尔值存储在状态队列中并使用any()

from collections import deque

prev_statuses = deque([], maxlen=5)

while True:    
    prev_statuses.append(sensor > 1.6)

    if any(prev_statuses):
        print("Status: ON")
    else:
        print("Status: OFF")

答案 1 :(得分:0)

使用数组跟踪最后5种状态可能吗? (未测试)

prev_Status = ['None']

while True:
    if sensor > 1.60:
        Status = 'ON'
    else:
        Status = 'OFF'

    if Status not in prev_Status:
        print("Status : {}".format(Status))

    prev_Status.append(Status)
    if len(prev_Status) > 5:
        del prev_Status[0]

作为惯例,您不需要强调 AND camelcase,使用prev_statusprevStatus(我忘了哪个更pythonic)