我正在尝试为下表制定逻辑
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,因为它们之间存在中断。
我怎样才能诡异地代表这个?
我是编程新手,如果有人可以提供帮助,那就太棒了
答案 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