跳过连续警报

时间:2016-08-16 21:42:22

标签: python skip

我正在尝试为下表制定逻辑

Hour|Alert_Flag
---------------
6   |0 
7   |1 
8   |1 
9   |1 
10  |0
11  |1 
where Alert_Flag=1 means raise an alert and Alert_Flag=0 means no alert raised

我想在这里完成的是在Alert_flag设置为1时在7处发出警报,但随后警报已经提升为7,因此不会在随后的几小时内发出警报。

下一个警报应该是11,因为它们之间存在中断。

我怎样才能诡异地代表这个?

我是编程新手,如果有人可以提供帮助,那就太棒了

4 个答案:

答案 0 :(得分:2)

这里有一些线索可以自己解决:

alerts = [(6, 0), (7, 1), (8, 1), (9, 1), (10, 0), (11, 1)]

clock_state = 1
for item in alerts:
    hour, alert_flag = item

    if alert_flag != clock_state:
        print "Clock not ringing at {0}".format(hour)
    else:
        print "Clock ringing at {0}".format(hour)
        clock_state = not clock_state

虽然有一点建议,下次尝试展示你尝试过的一些代码,即使它不起作用,这里的人也不会对展示任何努力解决问题的问题感兴趣。

修改

如果您只想显示0-> 1的更改,请转到:

alerts = [(6, 0), (7, 1), (8, 1), (9, 1), (10, 0), (11, 1)]
len_alerts = len(alerts)

for index in range(len_alerts - 1):
    hour1, alert_flag1 = alerts[index]
    hour2, alert_flag2 = alerts[index + 1]

    if alert_flag1 == 0 and alert_flag2 == 1:
        print "Clock ringing at {0}".format(hour2)

答案 1 :(得分:2)

假设您的警告标志位于列表中:

for i in range(len(alert_flags)-1):
    if alert_flags[i] == 0 and alert_flags[i+1] == 1:
        # code to raise an alert

答案 2 :(得分:0)

from collections import OrderedDict

hour_alerts = OrderedDict([
    ("6", 0),
    ("7", 1),
    ("8", 1),
    ("9", 1),
    ("10", 0),
    ("11", 1)
])

raiseAlert = 0

for each in hour_alerts.keys():
    if hour_alerts[each]== 0:
        raiseAlert = 1
    elif (hour_alerts[each] and raiseAlert):
        print "alerting after break"
        raiseAlert = 0

有很多方法可以做到这一点。这只是一种方式。 同时回应@BPL关于展示您努力的评论

答案 3 :(得分:0)

您需要做的就是存储上一个警报的状态,下面是一个快速示例来显示,仅在设置警报标志并且未设置上一个警告标志时发出警报。

for i,n in enumerate(alerts):
    if n == 1 and (i==0 or alerts[i-1] == 0):
        print "Alert on",i