You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中pyautogui鼠标范围判断or运算符失效问题求助

问题:鼠标区域限制的逻辑错误分析

我是Python新手,想用pyautogui把鼠标限制在500≤x≤600、500≤y≤600的100x100矩形区域里。一开始用or运算符的代码没生效,鼠标能在全屏的T形区域移动,好像其中一个坐标的判断被忽略了。我本来是想检测鼠标是否离开指定区域,占位符是留着补逻辑的,但分开判断x和y的代码就能正常工作,搞不懂第一种写法为啥失效。

初始失效代码

pyautogui.moveTo(550,550)

while True:
    mos = pyautogui.position()
    print(mos[0],mos[1])
    if (500 < mos[0] < 600) or (500 < mos[1] < 600) :
        pass
    else:
        print('placeholder')
        print('f')

可用代码

pyautogui.moveTo(550,550)

while True:
    mos = pyautogui.position()
    print(mos[0],mos[1])
    if (500 < mos[0] < 600):
        pass
    else:
        print('placeholder')
        print('f')
    if (500 < mos[1] < 600):
        pass
    else:
        print('placeholder')
        print('f')

原因分析

你用or的逻辑完全错误。(500 < x < 600) or (500 < y < 600)的含义是只要x在范围内,或者y在范围内,就执行pass。也就是说:

  • 哪怕x超出范围但y在范围内,不会触发else逻辑
  • 哪怕y超出范围但x在范围内,也不会触发else逻辑

这就导致鼠标可以在x符合要求但y随意移动,或者y符合要求但x随意移动的区域(也就是你说的T形区域)自由活动,根本起不到限制矩形区域的作用。

而分开判断x和y的逻辑是:只要x超出范围就触发逻辑,只要y超出范围也触发逻辑——只有当x和y同时在指定范围内时,才不会执行else里的内容,这才是符合需求的逻辑。

更简洁的正确写法

其实不用分开判断,把or换成and就能实现需求,逻辑更清晰:

pyautogui.moveTo(550,550)

while True:
    mos = pyautogui.position()
    print(mos[0],mos[1])
    # 只有x和y同时在范围内时才pass,否则执行限制逻辑
    if (500 < mos[0] < 600) and (500 < mos[1] < 600):
        pass
    else:
        print('placeholder')
        print('f')
        # 这里可以补充把鼠标移回区域内的逻辑,比如:
        # pyautogui.moveTo(max(500, min(mos[0], 600)), max(500, min(mos[1], 600)))

内容的提问来源于stack exchange,提问作者jacob blake

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 09:01:22