Python中满足if条件时如何立即退出for循环?挖矿脚本问题
问题分析与解决
你的问题核心是只在函数开头检测了一次背包状态,循环里用的inventoryFull还是最初的旧值——哪怕挖矿过程中背包满了,这个变量也不会自动更新,所以判断永远不会触发。
要解决这个问题,你需要在每次循环的关键节点重新检测背包状态,并且在确认背包满后直接退出当前函数,避免继续执行后续循环。
修改后的代码
def mine(): # 初始检测背包状态 inventoryFull = pyautogui.locateCenterOnScreen("full inv.png", confidence=0.7) print("Is inventory full?") if inventoryFull is not None: print("Yes, inventory is full. Drop off ore.") dropOff() return # 直接退出,不进入后续挖矿逻辑 print("No inventory is not full. Proceed") oreReset() # 遍历矿脉 for i in range(1, 19): # 关键改动:每次循环开头重新检测背包状态 inventoryFull = pyautogui.locateCenterOnScreen("full inv.png", confidence=0.7) if inventoryFull is not None: print("Yes, inventory is full. Drop off ore.") dropOff() return # 退出函数,终止所有挖矿循环 print("Searching for ore #" + str(i)) oreCoords = pyautogui.locateCenterOnScreen("ore" + str(i) + ".png", confidence=0.5) if oreCoords is not None: # 随机偏移矿脉坐标 veinX = oreCoords[0] + random.randrange(-3, 3) veinY = oreCoords[1] + random.randrange(-3, 3) # 移动到矿脉并右键点击 pyautogui.moveTo(veinX, veinY) pyautogui.sleep(0.5) pyautogui.rightClick(veinX, veinY) # 定位挖矿按钮 mineOreCoords = pyautogui.locateCenterOnScreen("mine ore.png", confidence=0.7) pyautogui.sleep(0.65) if mineOreCoords is not None: mineX = mineOreCoords[0] + random.randrange(-3, 3) mineY = mineOreCoords[1] + random.randrange(-3, 3) print("Mining ore #" + str(i)) pyautogui.moveTo(mineX, mineY) pyautogui.sleep(0.65) pyautogui.click(mineX, mineY) pyautogui.sleep(25) # 可选优化:挖矿完成后立即检测背包,更早触发满仓处理 inventoryFull = pyautogui.locateCenterOnScreen("full inv.png", confidence=0.7) if inventoryFull is not None: print("Yes, inventory is full after mining. Drop off ore.") dropOff() return else: print("Mine ore action could not be located...") else: print("No ore vein could be found.")
关键改动说明
- 实时检测背包状态:每次循环开头都重新调用
pyautogui.locateCenterOnScreen获取最新的背包状态,确保判断基于当前实际情况。 - 立即退出函数:一旦检测到背包满,调用
dropOff()后用return直接退出mine()函数,终止所有后续循环,不会继续挖矿。 - 初始状态优化:函数开头的满仓判断后也加了
return,避免背包一开始就满的情况下还进入挖矿循环。 - 可选提前检测:在挖矿完成的休眠后额外加一次背包检测,能更快发现满仓,不用等到下一次循环开头。
内容的提问来源于stack exchange,提问作者Branden
相关产品推荐
相关产品推荐

