我试图查看机器是否正常工作。我做了一个电路来看电缆上的电流,但有时候我会看到' 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
答案 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_status
或prevStatus
(我忘了哪个更pythonic)