Как добавить значения в массиве Python во время выполнения? - PullRequest
3 голосов
/ 13 февраля 2020

У меня есть программа, которая читает цифровые выводы платы Arduino. Плата возвращает выходной сигнал, если Цифровой контакт имеет значение PULLUP (ключевое слово), означает, что цифровой контакт включен как «b'1» и «b'0», если PULLDOWN (ключевое слово) означает, что цифровой контакт выключен. Если output равен b'0 ', я добавляю 0 в массив и 1, если output равен b'1', и, наконец, выводим их. Но это дает ошибку. Код ниже:

from serial import Serial
import time

arduinodata = Serial("COM4",9600)
a=1
i=0
current=0
data=[]
while (a<9):
    binary = arduinodata.read()
    if(binary==b'1'):
        data[i].append(1)
        i=i+1
        a=a+1
    if(binary==b'0'):
        data[i].append(0)
        current=i
        i=i+1
        a=a+1

for b in data:
    print(data[b])

Ошибка:

Traceback (most recent call last):    
    File "GettingBitStatus.py", line 12, in <module>       
 data[i].append(1)    
IndexError: list index out of range

Ответы [ 2 ]

3 голосов
/ 14 февраля 2020

Проблема заключается в следующих строках:

data[i].append(1)
data[i].append(0)

Ниже приведен правильный способ записи этих строк:

data.append(1)
data.append(0)

Окончательный код без ошибок:

from serial import Serial
import time

arduinodata = Serial("COM4",9600)
a=1
i=0
current=0
data=[]
while (a<9):
    binary = arduinodata.read()
    if(binary==b'1'):
        data.append(1)
        a=a+1
    if(binary==b'0'):
        data.append(0)
        current=i
        a=a+1

for b in data:
    print(b)
0 голосов
/ 13 февраля 2020

Вы пытаетесь использовать метод добавления для элемента в списке, а не для самого списка.

Попробуйте выполнить следующее:

from serial import Serial
import time

arduinodata = Serial("COM4",9600)
a=1
i=0
current=0
data=[]
while (a<16):
    binary = arduinodata.read()
    if(binary==b'1'):
        data.append(1)
        i=i+1
    if(binary==b'0'):
        data.append(0)
        current=i
        i=i+1

for b in data:
    print(b)

более подход к Pythoni c, используя понимание списка было бы что-то вроде

from serial import Serial
arduinodata = Serial("COM4",9600)
data = [ int(arduinodata.read()) for _ in range(16) ]         
...