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

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.")

关键改动说明

  1. 实时检测背包状态:每次循环开头都重新调用pyautogui.locateCenterOnScreen获取最新的背包状态,确保判断基于当前实际情况。
  2. 立即退出函数:一旦检测到背包满,调用dropOff()后用return直接退出mine()函数,终止所有后续循环,不会继续挖矿。
  3. 初始状态优化:函数开头的满仓判断后也加了return,避免背包一开始就满的情况下还进入挖矿循环。
  4. 可选提前检测:在挖矿完成的休眠后额外加一次背包检测,能更快发现满仓,不用等到下一次循环开头。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 17:23:18