IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

if, elif, else, .. je suis perdu


Sujet :

Python

  1. #1
    Candidat au Club
    Homme Profil pro
    aucune
    Inscrit en
    Août 2023
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Août 2023
    Messages : 4
    Par défaut if, elif, else, .. je suis perdu
    Bonjour à tous,

    Je tente de faire un programme pour un jeu en ligne, je n'arrive pas à le faire fonctionner pour cause d'indentation. Je suis totalement débutant en programmation, cela m'a pris beaucoup de temps pour faire le code, et j'ai beau chercher je ne trouve pas la solution.

    Est-il possible d'avoir des avis/conseils/de l'aide pour corriger mes erreurs svp ?

    L'invité de commande me donne une erreur ligne 22 :
    elif state == States.WAITING_TURN:
    ^^^^
    SyntaxError: invalid syntax


    Merci de m'avoir lu :)


    Voici le code :

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    def main():
        state = States.OUT_OF_COMBAT
     
        while True:
            screenshot = pyautogui.screenshot(region=(0, 0, 1020, 768))
            screenshot_gray = cv2.cvtColor(np.array(screenshot), cv2.COLOR_RGB2GRAY)
     
            if state == States.OUT_OF_COMBAT:
                monster_name, monster_position = find_monster(screenshot_gray)
     
            if monster_name:
                print(f"Monstre {monster_name} trouvé à la position {monster_position}")
                pyautogui.rightClick(monster_position[0], monster_position[1])
            else:
                print("Aucun monstre trouvé")
     
                time.sleep(2)
                pyautogui.click(x=830, y=295)
                time.sleep(1)
                pyautogui.press('space')
     
            elif state == States.WAITING_TURN:
                if is_bot_next_turn(screenshot_gray):
                    if is_combat_over(screenshot_gray):
                        print("Combat terminé")
                        break
                    else:
                        state = States.FIRST_TURN
     
            elif state == States.FIRST_TURN:
                time.sleep(1)
                pyautogui.click(893, 330)
                time.sleep(1)
                pyautogui.press('t')
                time.sleep(1)
                pyautogui.click(1133, 451)
                time.sleep(1)
                pyautogui.press('t')
                time.sleep(1)
                pyautogui.click(1133, 451)
                pyautogui.press('space')
     
            elif state == States.WAITING_TURN:
                if is_bot_next_turn(screenshot_gray):
                    if is_combat_over(screenshot_gray):
                        print("Combat terminé")
                        break
                    else:
                        state = States.SECOND_TURN
     
            elif state == States.SECOND_TURN:
                time.sleep(1)
                pyautogui.click(930, 385)
                time.sleep(1)
                pyautogui.press('&')
                time.sleep(1)
                pyautogui.click(930, 385)
                time.sleep(1)
                pyautogui.press('&')
                time.sleep(1)
                pyautogui.click(930, 385)
                time.sleep(1)
                pyautogui.press('é')
                time.sleep(1)
                pyautogui.click(930, 385)
                time.sleep(1)
                pyautogui.press('é')
                time.sleep(1)
                pyautogui.click(930, 385)
                time.sleep(1)
                pyautogui.press('"')
                time.sleep(1)
                pyautogui.click(930, 385)
                pyautogui.press('space')
                time.sleep(5)

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 677
    Par défaut
    Citation Envoyé par NeedHelp78 Voir le message
    Est-il possible d'avoir des avis/conseils/de l'aide pour corriger mes erreurs svp ?
    Quand on écrit une suite de conditions via if....elif...elif... le else vient en dernier pour tous les cas qui n'ont pas satisfaits les conditions.
    note: SyntaxError n'a rien à voir avec l'indentation.

    Citation Envoyé par NeedHelp78 Voir le message
    Je suis totalement débutant en programmation
    Vous avez des tutos pour prendre le temps d'être moins débutant... et des exercices simples pour vous entraîner à relire le code que vous avez ré-écrit. C'est parce que vous ferez cet effort de relecture que vous vous améliorerez: "j'ai voulu faire quoi là..." ou le temps passé à corriger une boulette motivera à ré-écrire plus lisible, plus concis.
    Cela permet aussi de se familiariser avec les messages d'erreur (de savoir quoi regarder lorsqu'il apparaissent).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 800
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par NeedHelp78 Voir le message
    L'invité de commande me donne une erreur ligne 22 :
    elif state == States.WAITING_TURN:
    ^^^^
    SyntaxError: invalid syntax

    Est-il possible d'avoir des avis/conseils/de l'aide pour corriger mes erreurs svp ?
    Tu as mis un "else" en ligne 14, signifiant que tu as traité tous les cas possibles. Tu ne peux donc pas demander l'évaluation d'un nouveau cas en ligne 22.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Candidat au Club
    Homme Profil pro
    aucune
    Inscrit en
    Août 2023
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Août 2023
    Messages : 4
    Par défaut
    Bonjour wiz,

    En lisant votre réponse j'ai l'impression de lire "débrouillez-vous". Merci quand même !

  5. #5
    Candidat au Club
    Homme Profil pro
    aucune
    Inscrit en
    Août 2023
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Août 2023
    Messages : 4
    Par défaut
    Bonjour Sve@r,

    Merci pour ta réponse, je voulais utiliser 2 fonctions différentes, la première était pour chercher le combat et le sélectionner, la seconde pour gérer les tours une fois l'entrée en combat faite.


    J'ai remplacé mes elif par des if, ça semble fonctionner. Merci.

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 800
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par NeedHelp78 Voir le message
    J'ai remplacé mes elif par des if, ça semble fonctionner. Merci.
    Programmer ce n'est pas mettre des instructions au hasard en espérant que cela tombera juste, parce que ça ne tombera pas souvent juste. C'est suivre un chemin logique qu'on traduit ensuite en instructions selon les possibilités du langage.
    Mettre des "elif" donnera un code où les possibilités seront exclusives. Exemple je veux une voiture ou un avion (mais pas les deux) j'écrirai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if "voiture" ...
    elif "avion" ...
    Mettre plusieurs "if" à suivre donnera un code où toutes les possibilités seront acceptées, y compris la possibilité de tout avoir. Et donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if "voiture" ...
    if "avion" ...
    ... acceptera le fait d'avoir à la fois "voiture" et "avion".

    Aucun des deux codes n'est mauvais, ils sont juste adaptés chacun à un problème précis. Mais utiliser l'un en espérant que cela règlera l'autre problème là c'est mauvais.

    Citation Envoyé par NeedHelp78 Voir le message
    je voulais utiliser 2 fonctions différentes, la première était pour chercher le combat et le sélectionner, la seconde pour gérer les tours une fois l'entrée en combat faite.
    Alors commencer par chercher le combat, sans coder autre chose. Et on teste et tant que ça ne fonctionne pas, on reste sur cette partie.

    Une fois entré dans le combat, là on tourne les coups
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  7. #7
    Candidat au Club
    Homme Profil pro
    aucune
    Inscrit en
    Août 2023
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Août 2023
    Messages : 4
    Par défaut
    Merci pour tes conseils, je vais repartir là-dessus

  8. #8
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 677
    Par défaut
    Citation Envoyé par NeedHelp78 Voir le message
    En lisant votre réponse j'ai l'impression de lire "débrouillez-vous". Merci quand même !
    Je vous explique la différence entre elif et else.
    On peut écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if  ...:
        ...
    elif ...:
        ...
    else:
        ...
    mais pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if  ...:
        ...
    else ...:
        ...
    elif:
        ...
    car si le else est un attrape tout (optionnel) le "elif" qui traine fera une erreur de syntaxe.

    Après si vous ne comprenez pas ces trucs basiques, ouvrir votre tuto préféré pour revoir le chapitre sur les conditions et mieux maîtriser cela est la seule chose que vous avez à faire.

    Citation Envoyé par NeedHelp78 Voir le message
    J'ai remplacé mes elif par des if, ça semble fonctionner. Merci.
    Cela supprime l'erreur de syntaxe mais comme on ne teste plus la même chose, le résultat obtenu sera différent. Reste à voir si le code reflète l'intention de départ ou s'il a juste le mérite de ne plus planter avec un SyntaxError.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  9. #9
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    721
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 721
    Par défaut
    Étant donné que l'indentation est très importante en python, si vous continuez à rajouter du code, ou des conditions, et de les imbriquer, vous aller vous retrouver avec des bugs de logique à un moment donné. Il faudrait penser à restructurer le code. Par exemple, on peut faire des appels de fonctions, ce qui permet de saucissonner le programme en petites unités plus facilement gérables.

    De plus, avec ce genre de structure, il est difficile de voir si vous couvrez bien tous les cas de figure.

  10. #10
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 677
    Par défaut
    Citation Envoyé par binarygirl Voir le message
    Il faudrait penser à restructurer le code. Par exemple, on peut faire des appels de fonctions, ce qui permet de saucissonner le programme en petites unités plus facilement gérables.
    Certains débutants sont comme des gamins qui jouent avec le feu: tant qu'il ne se brûlent pas... Sauf qu'ici, on a affaire à des adultes qui ne mettent pas leur vie en danger et qui n'ont pas pris le temps d'enrichir leur bagage technique suffisamment pour que ce qu'on leur raconte puisse être compris.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. [ODBC] Je suis perdu avec ODBC
    Par Nowhere dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 19/05/2006, 08h50
  2. [Tableaux] aide je suis perdu
    Par covin85 dans le forum Langage
    Réponses: 12
    Dernier message: 14/04/2006, 17h56
  3. [Architecture] EJB ou pas EJB ? Je suis perdu ...
    Par n!co dans le forum Java EE
    Réponses: 18
    Dernier message: 26/01/2006, 18h21
  4. RAM DDR, PC3200, 333Mhz , 400Mhz je suis perdu
    Par ahage4x4 dans le forum Composants
    Réponses: 2
    Dernier message: 08/12/2005, 17h52
  5. DLL et MainForm je suis perdu !
    Par rudy2 dans le forum C++Builder
    Réponses: 28
    Dernier message: 02/01/2005, 18h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo