多条件问题 if 语句 Python

问题描述

如果鼠标在 x 秒内没有移动,我正在编写一个程序来移动我的鼠标(使用 pyautogui lib)。我在开始时取 X、Y 坐标两次,然后在时间延迟后取两次,然后将 X 和 Y 值与前一个值进行比较。我的 if 语句有问题,理论上应该执行上述操作,但经过测试后,它无法按预期工作。任何人都可以建议我可以进行任何修改解决这个简单的问题。

这是我的代码

#!/usr/bin/env python3
import pyautogui
import time


currentMouseX,currentMouseY = pyautogui.position() #Grabs X,Y mouse position
print("position X1 is",currentMouseX)
print("position Y1 is",currentMouseY)

X1 = currentMouseX
Y1 = currentMouseY

time.sleep(3)

currentMouseX2,currentMouseY2 = pyautogui.position() #Grabs second X,Y position after 3 seconds 
X2 = currentMouseX
Y2 = currentMouseY

print("position X2 is",currentMouseX2)
print("position Y2 is",currentMouseY2)

**if ((X1 == X2) and (Y1 == Y2)):
    print ("!!! MOVE MOUSE !!!")
else:
    print("Mouse does not need to be moved")**

仅供参考:在继续执行程序之前,我让 if 语句非常简单,因为我希望它可以工作。非常感谢任何帮助。

解决方法

注意:说你的代码没有按预期工作是没有意义的,除非你解释它应该做什么以及它实际做什么。

话虽如此,看看你的代码,我认为你的问题是你总是得到结果“!!! MOVE MOUSE !!!”,即使你确实移动了鼠标。

如果您仔细查看代码,您会注意到 X1 和 X2 始终相同,Y1 和 Y2 也始终相同,因为您使用以下方法分配它们:

X1 = currentMouseX
Y1 = currentMouseY

X2 = currentMouseX
Y2 = currentMouseY

不覆盖 currentMouseY。相反,您将第二个坐标加载到 currentMouseX2currentMouseY2 中。

简而言之,您的代码使用了许多不必要的分配方式。相反,请执行以下操作:

#!/usr/bin/env python3
import pyautogui
import time


prev = pyautogui.position() #Grabs X,Y mouse position
print("position X1 is",prev[0])
print("position Y1 is",prev[1])

time.sleep(3)

after = pyautogui.position() #Grabs second X,Y position after 3 seconds

print("position X2 is",after[0])
print("position Y2 is",after[1])

if (prev == after):
    print ("!!! MOVE MOUSE !!!")
else:
    print("Mouse does not need to be moved")
,

与其测试相等性,不如测试差异是否低于某个阈值:

pip3 install

除非您连接一些有趣的硬件,否则我怀疑您会移动鼠标 - 只有鼠标指针。