2016-08-16 2 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 

Что я хочу сделать здесь, чтобы поднять тревогу в 7, так как Alert_flag установлен в 1, но затем не поднять предупреждение для последующих часов uptil 10, так как оповещение уже было поднято на 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 

Один маленький совет, хотя, в следующий раз постараюсь показать код вам «Если вы пытаетесь, даже если это не работает, люди здесь не любят вопросов, у которых есть какие-либо усилия для решения проблем.

EDIT

Если вы хотите, чтобы показать изменения только из 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 

Существует много способов сделать это. Это один из способов. Также комментарии echo @BPL о ваших усилиях

0

Все, что вам нужно сделать, это сохранить состояние предыдущего предупреждения, ниже - быстрый пример, чтобы показать это, предупреждает только о том, что установлен флаг предупреждения и предыдущий предупреждающий флаг не было установлено.

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

 Смежные вопросы

  • Нет связанных вопросов^_^