правильный способ перебрать только определенную часть массива? - PullRequest
0 голосов
/ 22 февраля 2019
Traceback (most recent call last):
 File "C:/Users/yaahy/PycharmProjects/Testing/testing1.py", line 45, in 
<module>
    clicktheshit()
  File "C:/Users/yaahy/PycharmProjects/Testing/testing1.py", line 41, in 
clicktheshit
    pyautogui.click(chords[0], chords[1])
TypeError: 'NoneType' object is not subscriptable

, так как мой скрипт выполняет медленный поиск по каждому пикселю, я хочу ускорить его, вырезав некоторые бесполезные пиксели, которые он просматривает (которых нет в игровом регионе), но используя

pxlss = pxls[60:400] 

не работает, я не знаю проблемы, потому что она работает без попыток вырезать ненужные вещи, просто медленно

import pyautogui
import time
from PIL import Image
import mss
import mss.tools
import cv2
import numpy as np
from PIL import ImageGrab
import colorsys

time.sleep(2)

def shootfunc(xc, yc):
    pyautogui.click(xc, yc)

gameregion = [71, 378, 328, 530]

def findpixels(pxls):
    pxlss = pxls[60:400]
    for row, pxl in enumerate(pxlss):
        for col, pxll in enumerate(pxl):
            if col >= 536 and col <= 808 and row <= 515 and row >= 371 and pxll == (102, 102, 102):
                foundpxl = pxll
                print(str(col) + " , " + str(row))
                return [col, row]
                break


def clicktheshit():
    with mss.mss() as sct:
        region = {'top': 0, 'left': 0, 'width': 1920, 'height': 1080}
        imgg = sct.grab(region)
        pxls = imgg.pixels
        chords = findpixels(pxls)
        pyautogui.click(chords[0], chords[1])

xx = 0
while xx <= 3000:
        clicktheshit()
        xx = xx + 1
        time.sleep(.01)
        clicktheshit()

1 Ответ

0 голосов
/ 06 марта 2019

Чтение сообщения об ошибке и трассировки должно дать вам первую подсказку:

File "C:/Users/yaahy/PycharmProjects/Testing/testing1.py", line 41, in clicktheshit
pyautogui.click(chords[0], chords[1])
TypeError: 'NoneType' object is not subscriptable

Это означает, что в этой точной строке chords является объектом None - который, конечно, не может быть проиндексирован -вместо ожидаемого списка [col, row].

Теперь, почему вы получаете этот None вместо ожидаемого списка, довольно просто: ваша функция findpixels возвращает этот список, только если она действительно находит совпадение -в противном случае функция завершается без явного оператора return, поэтому она неявно возвращает None.

. Итак, ваша проблема не имеет ничего общего с «правильным способом перебора только определенной части».массива "... и многое связано с не зная, как отладить программу.

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