无休止的while循环和旧的删除代码(弹出窗口)。。。嗯,“突然出现”

2024-10-01 17:41:51 发布

您现在位置:Python中文网/ 问答频道 /正文

自从开始在多个项目中使用Sikuli以来,我一直在努力解决一个奇怪的问题。我一直在使用IDE,后来由于代码中发生了一些奇怪的事情而尝试扩展。如果我以前用弹出窗口调试代码,我可以保存代码,甚至重新启动电脑,甚至在其他文本编辑器中检查代码,但是现在不存在的弹出窗口(和旧代码)有时会弹出。最后,通常我放弃了原始文件,有时不得不奇怪地注释掉行,然后一次重新添加一行(即使在大规模的情况下,最终脚本和以前一样)。我真的无话可说。你知道吗

这让我很难区分坏代码和其他地方出错的代码。有人知道是什么导致了这个“幻象密码”吗?因为我真的很茫然。你知道吗

我想知道在我<;(inputvariable)的时候发生了什么问题。我根本搞不清哪里出了问题,我是不是看过头了?你知道吗

我现在正在通过sikuliide运行所有脚本。我确实想学习如何写剧本,包括西库里希望我可以包装整齐,但我似乎不能把我的头围绕它。你知道吗

对于while循环,当它与“SSLoops”进行比较时,我不明白为什么它在满足条件时没有跳出循环。(在数字上方和上方打印。)

我不得不做一些奇怪的变通方法,比如注释掉整个代码段,尝试让它工作,然后慢慢地一个接一个地重新引入它,直到它完全匹配旧脚本。如果我将脚本复制到一个新文件中,以使副本更清晰,希望如果存在某种缓存问题(?)它会解决的,但我通常不得不重新修补它。你知道吗

BP = getBundlePath()
print(BP)
setBundlePath(BP + "\images")
BP2 = getBundlePath()
print(BP2)

# Regions
gameRegion = Region(230, 138, 1442, 875)
matchSpeedRegion = Region(1282, 920, 162, 91)
rewardRegion = Region()


def main():
    SSLoops = input("How many times would you like to run Super Smash?")
    SuperSmash(SSLoops)


def SuperSmash(SSLoops):
    print(SSLoops)
    i = 1
    while i < SSLoops:
        print(i)
        print(SSLoops)
        if exists("btnEnterSuperSmash.PNG"):
            click("btnEnterSuperSmash.PNG")
        while True:
            if exists("btnReward.png"):
                print("Completed! On to Rewards.")
                #selectRewards()
                break
            else:
                pass
            if matchSpeedRegion.exists("btnStart.png"):
                matchSpeedRegion.click("btnStart.png")
                matchSpeedRegion.wait("btnRetreat.png", 3600)
                if matchSpeedRegion.exists("btnSpeedUp.png"):
                    matchSpeedRegion.click("btnSpeedUp.png")
                    print("clicked x1")
                print("clicking retreat")
                matchSpeedRegion.click("btnRetreat.png")
                matchSpeedRegion.wait(Pattern("btnRetreat.png").similar(0.65), 3600)
                print("clicking okay")
                gameRegion.click("btnOK.png")
                wait(2)
                gameRegion.wait("btnOK.png", 3600)
                gameRegion.click("btnOK.png")
        print("Completed!")
        i = i + 1


if __name__ == '__main__':
    main()

我一直得到弹出窗口说“嘿”,因为我有一个循环,而真正的btnRewards运行一个函数说“嘿”-这将有希望在5个图像中挑选一个奖励在最后。但是在移除它之后,当我试图排除主循环的故障时,它仍然会弹出。你知道吗

将用户输入变量与i进行比较的循环不断增加。我觉得凹痕没问题吧?但我一定错了?或者是别的什么东西让它出错了?你知道吗

我已经让程序运行在一个文件夹上,这样的图片打破循环立即了,所以理论上它应该运行的次数输入没有任何其他(1)。非常感谢您的帮助。你知道吗

====
1
1
1

[log] CLICK on L[889,656]@S(0) (568 msec)

Completed! On to Rewards.

Completed!
2
1

[log] CLICK on L[889,656]@S(0) (565 msec)

Completed! On to Rewards.

Completed!
3
1

[log] CLICK on L[889,656]@S(0) (584 msec)

Completed! On to Rewards.

Completed!
4
1
====

Tags: to代码脚本ifpngonexistsclick
1条回答
网友
1楼 · 发布于 2024-10-01 17:41:51

你的问题:input()返回一个类似“4”的字符串

然后使用 while i < SSLoops:

它总是True,因此循环不会结束。你知道吗

使用 SSLoops = int(input("How many times would you like to run Super Smash?"))会解决你的问题。你知道吗

请注意:如果给定的输入无法转换为整数值,则会崩溃。你知道吗

建议:调试打印应如下所示: 打印“SSLoops=”,SSLoops

因此输出的可读性更好。你知道吗

来自西库利克斯的莱曼(问候你的猫;-)

相关问题 更多 >

    热门问题