Бесконечный цикл while и старый удаленный код (всплывающее окно) ... хорошо "всплывающее окно". - PullRequest
0 голосов
/ 01 апреля 2019

Я изо всех сил пытаюсь решить странную проблему, которая возникла у меня с тех пор, как я начал использовать Sikuli в нескольких проектах. Я использовал IDE и позже попытался разветвляться из-за странных вещей, происходящих с кодом. Если бы мне раньше приходилось отлаживать код с помощью всплывающих окон, я мог бы сохранить код, даже перезапустить мой компьютер, даже проверить код в других текстовых редакторах, но теперь уже не существует всплывающих окон (и старого кода), иногда всплывающих. В конце обычно я заканчиваю тем, что выкидываю оригинальные файлы, и мне иногда приходится странным образом комментировать строки и заново добавлять их по одному (хотя в широком масштабе сценарий завершения был таким же, как прежде, чем я делал все это) , Я в полном недоумении для слов.

Это заставляет меня изо всех сил различать плохой код и что-то не так в другом месте. Кто-нибудь знает, что может вызвать этот "призрачный код"? Потому что я действительно в растерянности.

И я хотел бы посоветовать, что происходит с тем, пока я <(inputvariable). Я не могу понять, что может пойти не так, я смотрю что-то? </p>

В настоящий момент я запускаю все скрипты через Sikuli IDE. Я действительно хотел научиться писать сценарии и включать sikuli, надеясь, что смогу аккуратно упаковать его, но, похоже, не мог обернуть его вокруг.

Для цикла 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()

Я получаю всплывающие окна с надписью "эй", потому что у меня был цикл, в то время как true 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
====

1 Ответ

0 голосов
/ 02 апреля 2019

Ваша проблема: input() возвращает строку типа "4"

Затем вы сравниваете это, используя while i < SSLoops:

, который всегда True и, следовательно, цикл не заканчивается.

с помощью SSLoops = int(input("How many times would you like to run Super Smash?")) решит вашу проблему.

Имейте в виду: произойдет сбой, если данный вход не может быть преобразован в целочисленное значение.

Предложение: отладочные отпечатки должны выглядеть так: напечатать "SSLoops =", SSLoops

так что вывод лучше читается.

RaiMan от SikuliX (привет вашей кошке; -)

...