Как использовать команду if / then в python - PullRequest
0 голосов
/ 23 апреля 2020

Так что совсем недавно я начал изучать python, и я придумал очень простой c сценарий, который должен задать пользователю вопрос и переместить курсора к месту на экране, основываясь на ответе. что программа получает. Но когда я запускаю программу, она запускает первую часть кода, а затем закрывает интерпретатор, как если бы программа была завершена.

import pyautogui
import time
choice = 0
choice = pyautogui.prompt("Which option do you choose? ")
                                                                   # The code stops working here
if choice == 1:
    pyautogui.moveTo(670, 440)
elif choice == 2:
    pyautogui.moveTo(690, 440)
elif choice == 3:
    pyautogui.moveTo(670, 500)
elif choice == 4:
    pyautogui.moveTo(690, 500)

Я считаю, что проблема связана с командой if / then, но может быть быть таким же простым, как ошибка отступа.

Я заранее извиняюсь за любые ошибки форматирования, которые я допустил, когда набирал этот вопрос, так как я новичок в переполнении стека.

Ответы [ 3 ]

1 голос
/ 23 апреля 2020

Я хотел бы остановиться на уже превосходном ответе @ zerecees, чтобы учесть возможные крайние случаи, которые могут сломать вашу программу.

import time
import pyautogui

while True:
   try:
      choice = int(pyautogui.prompt("Which option do you choose? "))
      break
   except ValueError:
      print("Please type an integer value.")

if choice == 1:
    pyautogui.moveTo(670, 440)
elif choice == 2:
    pyautogui.moveTo(690, 440)
elif choice == 3:
    pyautogui.moveTo(670, 500)
elif choice == 4:
    pyautogui.moveTo(690, 500)
else:
    # Some default fallback code

Оператор try и except учитывает случаи, когда пользователь вводит что-то, что не может быть преобразовано в int. Например, представьте ситуацию, когда пользователь вводит one вместо 1; в таких случаях преобразование типов не будет работать. Поэтому мы используем while l oop, чтобы предложить пользователю ввести действительный ввод, пока не будет введен действительный ввод.

Тогда, поскольку мы преобразовали входные данные из строки в целое число, условные выражения будут работать, как и ожидалось.

1 голос
/ 23 апреля 2020

pyautogui.prompt() возвращает string, и вы проверяете на int. Попробуйте поместить кавычки вокруг if .. "1", elif .. "2", чтобы получить int * string.

Или попробуйте:

int(pyautogui.prompt("...") для преобразования string в int.

0 голосов
/ 23 апреля 2020

Проблема в том, что pyautogui.prompt() возвращает строку, а вы проверяете целое число. Вы можете проверить тип возврата, используя,

print (type (choice))

Поэтому измените тип. Если вы все еще застряли (если у вас не появилось окно с подсказкой), могут возникнуть проблемы с безопасностью, поэтому вам нужно явно разрешить приложению использовать мышь / клавиатуру. Просто посмотрите на доступность в настройках безопасности и разрешите соответствующие действия. Надеюсь, это поможет :)

...