Python: не удается добавить значения в список во время цикла - PullRequest
0 голосов
/ 07 января 2020

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

Что я делаю не так?

def get_roles_text():
    start = [107, 338, 215, 21]
    while(True):
        im = pyautogui.screenshot(region=(start[0], start[1], start[2], start[3]))
        text = tess.image_to_string(cv2.cvtColor(np.array(im), cv2.COLOR_BGR2GRAY))
        all_roles = list()
        print(text)
        all_roles.append(text)
        print(text)
        start = [start[0], start[1] + start[3], start[2], start[3]]
        if text == '':
            print(all_roles)
            break
            return all_roles

    print(all_roles)

Ответы [ 3 ]

5 голосов
/ 07 января 2020

Вы заново создаете список на каждой итерации строки. Создал его до l oop.

Кроме того, ваш return никогда не будет достигнут, так как перед ним стоит строка break. См. Ниже исправления с несколькими исправлениями стилей, аннотированными в комментариях.

def get_roles_text():
    all_roles = [] # Move it up here. Also, [] is more idiomatic than list()
    start = [107, 338, 215, 21]
    while True: # No need for parens
        im = pyautogui.screenshot(region=(start[0], start[1], start[2], start[3]))
        # Leave out all those print() statements until you need them
        text = tess.image_to_string(cv2.cvtColor(np.array(im), cv2.COLOR_BGR2GRAY))
        if not text: # not text is an idiomatic way to say text == ''
            return all_roles
3 голосов
/ 07 января 2020

Ваша проблема в том, что вы сбрасываете список на каждой итерации l oop, вы должны инициализировать список за пределами l oop.

0 голосов
/ 07 января 2020

Инициируйте свой список за пределами while l oop:

def get_roles_text():
    start = [107, 338, 215, 21]
    all_roles = []
    while(True):
        im = pyautogui.screenshot(region=(start[0], start[1], start[2], start[3]))
        text = tess.image_to_string(cv2.cvtColor(np.array(im), cv2.COLOR_BGR2GRAY))
        print(text)
        all_roles.append(text)
        print(text)
        start = [start[0], start[1] + start[3], start[2], start[3]]
        if text == '':
            print(all_roles)
            break
            return all_roles

    print(all_roles)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...