为什么下面的代码不起作用? 使用pyautogui在游戏中创建机器人

问题描述

x=0
while x==0:
    target = pyautogui.locateOnScreen(os.path.expanduser(r'~\Desktop\ bot\references\target.png'),region=(0,1024,768),confidence=.7)
    time.sleep(0.5)
    target2 = pyautogui.locateOnScreen(os.path.expanduser(r'~\Desktop\ bot\references\target2.png'),confidence=.7)
    print(target,target2)
    if target and target2 is None:
        pyautogui.keyDown('W')
    elif target or target2 != None:
        pyautogui.keyUp("W")
        print(target or target2)
        target_point = pyautogui.center(target or target2)
        targetx,targety = target_point
        pyautogui.click(targetx,targety)
        x=1

(应该使用导入的模块重新创建代码)大家好!我正在尝试为游戏创建一个简单的机器人,该机器人在未检测到目标时会向前移动,但在检测到目标时会停止移动。为什么没有按下W键?奇怪的是,当检测到target或target2.png时,它按W否则不按?

解决方法

这里的问题是python将某些值视为True,而其他值视为False。

在Python中,None0""(空字符串)都被认为是False。其他任何值都视为True。

您的代码中包含以下行:

if target and target2 is None:

虽然该短语听起来很正确(如果两个单词都为None),但实际上发生的是target在评估中转换为布尔值:

if bool(target) == True and target2 is None:

由于target不是None/0/"",布尔转换将返回True。这会导致代码中出现意外行为。

相同的想法也适用于elif语句