Python add / odčítání počítadlo porovnáním poslední druhá předposlední hodnoty

hlasů
0

Snažím se spočítat počet položek v seznamu přidáním / odečtením v závislosti na určitých podmínkách.

Pro trochu více kontextu: Mám MIDI kontrolér, který výstupy MIDI data vždy, když je zapnutý knoflík. Bez ohledu na to, kde je knoflík, chci čelit resetovat na hodnotu 0, a jak se ukázalo v jednom směru, pak zvýšit hodnotu a snižují v opačném směru.

Každý midi zprávu výstupy nějak takto:

control_change channel=0 control=16 value=5 time=0
control_change channel=0 control=16 value=6 time=0
control_change channel=0 control=16 value=7 time=0

Tak jsem se přijít mohu zkontrolovat, zda další přijaté zprávy je buď větší nebo menší než předchozí zprávy.

Problém jsem běží na je, že má index, jako je:

second_to_last_message = messages[-2]

Automaticky vytváří IndexError: index seznamu mimo rozsah, který dává smysl, protože se můžete dostat na druhý-k-poslední položku v prázdném seznamu. Ale nejsem si jistý, jak mohu zjistit, zda je tato hodnota zvyšuje nebo snižuje bez kontroly takhle ... se cítí jako catch-22.

Také si nejsem jistý, co je nejlepší způsob, jak implementovat počítadlo. Byl bych vděčný za jakékoli nápady, jak tento přístup.

KÓD

messages = []
for msg in inport:

   def add(msg):
       messages.append(msg)

   def subtract(msg):
       messages.remove(msg)

   last_message = msg
   second_to_last_message = messages[-2]

   if last_message.value > second_to_last_message.value:
       add(msg)
       print len(messages)


   elif last_message.value < second_to_last_message.value:
       subtract(msg)
       print len(messages)

AKTUALIZOVÁNO CODE

messages = []
def add(msg):
    messages.append(msg)

def subtract(msg):
    messages.remove(messages[-1])

for msg in inport:
    if len(messages) < 2:
        add(msg)
        print len(messages)

    else:
        last_message = msg
        second_to_last_message = messages[-2]

        if last_message.value > second_to_last_message.value:
            add(msg)
            print len(messages)

        elif last_message.value < second_to_last_message.value:
            subtract(msg)
            print len(messages)
Položena 27/11/2018 v 17:55
zdroj uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
0

Stačí zkontrolovat, zda budete mít příští-k-poslední prvek před jeho vztah:

if len(messages) < 2:    # Not enough messages accumulated: 
                         #   add this one without checking the value
   add(msg)
   print len(messages)

else:
   second_to_last_message = messages[-2]
   # Continue with the rest of your code
Odpovězeno 27/11/2018 v 18:00
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more