2017-04-25 2 views
0

J'essaye d'écrire un petit programme de bot capable de reconnaître une image puis d'exécuter une commande si cette image existe à l'écran. Ceci est fortement lié à PyAutoGUI. Le code attatched ci-dessous donne une erreur de syntaxe sur la « if »:SyntaxError: syntaxe invalide sur une commande 'if' dans Python 3.6 (code PyAutoGUI)

loadingbattle = pyautogui.locateCenterOnScreen('/Users/devious/loading battle.png');\ 
if loadingbattle == (2294,1165): pyautogui.click(1513,75) 

Je suis nouveau à la programmation, donc je ne suis pas sûr du problème ou si elle est la bonne façon de coder l'idée i » mentionné ci-dessus. C'est juste un début pour voir si le code fonctionne en cliquant quelque part après avoir reconnu l'image, mais l'erreur de syntaxe se produit sur la commande 'if' et je ne sais pas pourquoi. J'ai regardé quelques tutoriels en ligne mais cela ne semble pas résoudre mon problème. Toutes les suggestions sur les raisons pour lesquelles cela se produit, ou comment je peux coder cette idée, sont appréciées.

+0

Si vous souhaitez utiliser une doublure , utilisez "instruction1 si condtion else statement2" – Nilanjan

+0

supprimer "\" de "loadingbattle = pyautogui.locateCenterOnScreen ('/ Users/devious/loading battle.png'); \" – JkShaw

+0

Je ne suis pas sûr de ce que le code est censé faire .... Y at-il une intention avec '; \'? C'est ce qui vous donne le problème. – tdelaney

Répondre

1

Le vrai problème est pas lui-même la déclaration if mais il est à cause de la déclaration précédente. Faire if loadingbattle == (2294,1165): pyautogui.click(1513,75) si parfaitement bien en Python, mais faire votre chemin ne fonctionne pas, vous devrez changer à ceci:

loadingbattle = pyautogui.locateCenterOnScreen('/Users/devious/loading battle.png') 
if loadingbattle == (2294,1165): pyautogui.click(1513,75) 

En se débarrassant de la ; et \, depuis

; signifie que c'est la fin de la ligne, il n'est pas nécessaire d'inclure cela à chaque coupure de ligne. Équivalent d'un « \n »

\ signifie que le code sera effectivement continuer à la ligne suivante (échappe le saut de ligne)

Alors qu'est-ce qui se passe réellement dans votre code lorsque l'interpréteur Python lit est:

Ce qui, lorsque vous essayez de lire, est tout à fait logique.
loadingbattle = pyautogui.locateCenterOnScreen('/Users/devious/loading battle.png');if loadingbattle == (2294,1165): pyautogui.click(1513,75) 

Puisque vous ne pouvez pas dire à quoi vous essayez d'attribuer loadingbattle, et où se termine le bloc if. C'est pourquoi l'indentation est importante en python.

Normalement, vous voulez écrire comme cela pour montrer clairement l'empreinte (mais il ne fait pas d'importance pour votre cas, les deux devraient fonctionner correctement):

loadingbattle = pyautogui.locateCenterOnScreen('/Users/devious/loading battle.png') 
if loadingbattle == (2294,1165): 
    pyautogui.click(1513,75) 
+0

Salut, merci pour répondre. Mais si j'enlève le ';' et '\', il montre "SyntaxError: plusieurs instructions trouvées lors de la compilation d'une seule instruction". –

+0

Je ne peux pas reproduire votre problème, peut-être y at-il plus de code qui pourrait causer le problème? C'est à dire. avoir un '\' à la fin de chaque ligne? – abccd

+0

J'ai seulement ces deux lignes de code avant que j'essaie de l'exécuter et je ne pense pas que c'est la raison.Il semble que si je ne place pas un ';' il pense qu'il existe plusieurs instructions trouvées lors de la compilation d'une instruction unique. –

0

Lors du codage en Python, l'exigence de retrait est nécessaire. Cela nous force à coder avec un retrait qualifié. Voir le code ci-dessous:

if loadingbattle == (2294,1165):       
    pyautogui.click(1513,75) 
+0

si loadingbattle == (2294,1165): - pyautogui.click (1513,75) –

+0

Modifiez votre réponse et formatez le code en code. –

+0

@Don Zhang en python, il est possible d'écrire 'if bool: command' tant que vous n'utilisez qu'une seule commande – Adrijaned