2016-08-16 4 views
0

나는 다음 표건너 뛰는 연속 경고

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시에 제기 되었기 때문에 이후 10 시간 동안 경보가 울림

그 사이에 휴식이 있었기 때문에 다음 경보가 발생해야합니다.

어떻게 이것을 파이썬으로 표현할 수 있습니까? 사람이

+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) 
+0

코드는 0에서 1 및 1에서 0으로 변경 될 때마다 시계를 울립니다. 0-1의 특정 변경이있을 때만 경고합니다. – cmidi

+0

@cmidi 나는 그에게 그걸 보여주고 싶지 않았습니다. 첫번째 장소 ... 그러나 당신이 주장한다면 나는 방금 편집했습니다. 때로는 초보자에게 단서를 제공하는 것이 좋다면 – BPL

+0

에 동의 했으므로 SO가 노력을 보여 주었어야합니다. – cmidi

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 
+0

인덱스 0에 경고가 있으면 코드가 작동하지 않습니다.이 질문은 연속적인 경고를 음소거하기를 원합니다. – cmidi

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의 노력에 대한 설명은 echo

0

경고 표시가 설정되어 있고 이전에 본 경고 표시가있는 경우에만 경고를 표시하는 간단한 예입니다. 설정되지 않았습니다.

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