Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème avec l'indentation avec l'IDLE sous Mac

Sujet résolu
    31 janvier 2012 à 22:11:52

    Bonsoir à tous,

    Comme vous, je suis un Zér0 (mais un vrai de vrai ^^), j'avais un peu regardé le tutoriel sur le C/C++ de M@teo, et je me suis résigné à re-débuter avec le Python, qui me paraît un poil plus simple :p

    Mais voilà, dès les premières pages du tutoriel, j'ai un problème ... qui va beaucoup beaucoup m'embêter par la suite. Le voici :

    # je déclare une variable, mettons a.
    >>> a = 5
    # puis une fonction if ... else.
    >>> if a > 18 :
            print("Vous êtes majeur.")
    >>> else :
            print("Vous êtes mineur.")
    


    Comme vous pouvez le remarquer, le "else" est aligné avec le "if". Mais dans mon IDLE, lorsque j'entre la commande print... et que je fais un saut à la ligne, 1) Ça ne me met pas les trois flèches (normal, à priori). 2) Le retour à la ligne m'indente automatiquement ... à la même hauteur que la commande print.

    Voici ce que j'ai, au final :
    # idem
    >>> a = 5
    >>> if a > 18 :
            print("Vous êtes majeur.")
            else :
    # et là, un message d'erreur quand je tape [Entrée] pour revenir à la ligne
    


    Alors j'ai tout essayé. J'ai tapé [Back] puis 4 [Space] pour m'aligner à la même colonne que le "if". J'ai directement fait 4 [Space] pour arriver à la 4ème colonne selon l'indicateur tout en bas à droite. J'ai entré moi-même le ">>>" puis un espace et "else".

    A chaque fois, j'obtiens un message d'erreur.

    Donc je ne sais plus quoi faire... Est-ce un simple réglage que je n'ai pas trouvé malgré mes recherches dans les Préférences ? ...

    Voici les messages d'erreur que le logiciel m'affiche après avoir appuyé sur [Entrée] :

    >>> a = 5
    >>> if a > 18 :
    	print ("Vous etes majeur.")
    	else :
    		
    SyntaxError: invalid syntax
    >>> if a > 18 :
    	print ("Vous etes majeur.")
        else :
    	    
    SyntaxError: unindent does not match any outer indentation level
    >>> if a > 18 :
    	print ("Vous etes majeur.")
    	   else :
    		   
    SyntaxError: unexpected indent
    >>> if a > 18 :
    	print ("Vous etes majeur.")
    >>> else :
    	
    SyntaxError: invalid syntax
    >>>
    


    Merci de m'aider à régler ce problème qui, j'en suis sûr, me poserais énormément de problèmes pour mon apprentissage du Python.

    Cordialement !

    theApprenticeTebolo (alias tebolo)



    P.S. :
    -ma version de Python (et d'IDLE) est la 3.2.2
    -je suis sous Mac OS X Lion avec un clavier suisse romand CH...
    • Partager sur Facebook
    • Partager sur Twitter
      31 janvier 2012 à 22:22:04

      Salut.

      Dans ton premier cas, lorsque le curseur se retrouve aligné avec le print, appuie une fois sur (backspace), et colle le else tout à gauche.

      À la ligne suivante, le curseur sera automatiquement indenté.

      Image utilisateur


      Sinon, utilise la touche Tab pour indenter. IDLE se charge, en mode édition, d'insérer 4 espaces au lieu de tabulations quand tu appuies sur tab. Si tu utilises un autre éditeur de texte, tu peux (devrais) aussi le configurer pour qu'il ait le même comportement.
      • Partager sur Facebook
      • Partager sur Twitter
      Zeste de Savoir, le site qui en a dans le citron !
        1 février 2012 à 21:22:41

        Merci, j'ai compris ta première solution (plaquer le else à gauche), je n'arrive pas à croire que je n'aie pas essayé ça... Merci en tout cas.

        Sinon, moi, quand je fais un retour à la ligne, puis backspace, puis tab, ça me ré-indente à la colonne d'où j'avais fais le backspace, et l'indicateur des colonnes en bas à droite m'indique "1" pour 1x Tab, "2" pour 2x Tab, etc...

        Sinon, je peux marquer le topic résolu ? Merci encore..
        • Partager sur Facebook
        • Partager sur Twitter
          1 février 2012 à 21:24:25

          Si ta question a trouvé une réponse satisfaisante, oui, il vaut mieux passer le topic en résolu.
          • Partager sur Facebook
          • Partager sur Twitter
          Zeste de Savoir, le site qui en a dans le citron !
            11 octobre 2014 à 23:08:05

            Salut à tous, 

            J'ai semble-t-il le même pb Tebolo mais pour l'exercice du cours juste au dessus (avec seulement deux if): http://fr.openclassrooms.com/informatique/cours/apprenez-a-programmer-en-python/les-structures-conditionnelles, j'ai essayé de rentrer les commandes de plusieurs façons différentes mais IDLE me renvoi des erreurs que je ne comprend pas: 

            Python 3.4.2 (v3.4.2:ab2c023a9432, Oct  5 2014, 20:42:22) 
            [GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
            Type "copyright", "credits" or "license()" for more information.
            >>> a=12
            >>> if a>0:
            	print("a sup à 0")
                if a<0:
            	    
            SyntaxError: unindent does not match any outer indentation level
            >>> if a>0:
            	print("asupà0")
                    if a<0:
            		
            SyntaxError: inconsistent use of tabs and spaces in indentation
            >>> if a>0:
            	print("asupà0")
            	if a<0:
            		print("ainfà0")
            
            		
            asupà0
            >>> a=-12
            >>> if a>0:
            	print("asupà0")
            	if a<0:
            		print("ainfà0")
            
            		
            >>> 
            >>> 



            Pour le premier bloc, j'ai aligné le second "if" au premier à l'aide de 4x Espace et quand je passe à la ligne (Maj + Entrée) IDLE signal une erreur.

            Ensuite, pour le second bloc:

            après le " print("asupà0") ", je passe à la ligne en faisant "Entrée", je saisit le "if" là où le curseur s'est placé automatiquement lors de mon passage à la ligne, càd en dessous à droite du "print("asupà0")", et lorsque je veux repasser à la ligne en faisant "Entrée" au lieu de "Maj + Entrée" il m'affiche à nouveau un message d'erreur.
            Pourquoi IDLE accepte de passer à la ligne avec juste la touche "Entrée" dans certains cas et renvoi un message d'erreur si je n'utilise pas "Maj+Entrée" dans d'autre cas ? 

            Pour le troisième bloc, je passe à a ligne en faisant Maj+Entrée à chaque fois tout en débutant la nouvelle ligne là où le curseur s'est placé automatiquement. Et là ça semble marcher il renvoi asupà0 ce qui est correcte, mais les lignes de commandes ne respectent pas du tout l'indentation comme sur l'exemple du cours.

            extrait du cours:

            >>> a = 5
            >>> if a > 0: # Si a est positif
            ...    print("a est positif.")
            ... if a < 0: # a est négatif
            ...    print("a est négatif.")



            Pour le quatrième bloc, c'est troublant, je procède exactement comme pour le 3ème bloc, en changeant juste la valeur de ma variable a, j'appui sur la touche entré et IDLE ne renvoi rien...

            Quelqu'un peut-il m'aider à comprendre ce qu'il se passe?  Je débute et je suis frustré de bloquer au bout d'à peine 3 pages de cours...

            Merci d'avance pour votre aide :)

            -
            Edité par weshallo 11 octobre 2014 à 23:21:16

            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              12 octobre 2014 à 10:43:23

              apres des bloc de quelques sortes qu'ils soient, tu dois indenter soit avec 4 espaces soit avec la tabulation. Tu n'as pas le droit( python n'aime pas) de combiner les 4 espaces et les tabulations dans un meme code ^^

              pour le 3eme bloc, c'est une erreur de python je suppose

              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
                12 octobre 2014 à 11:30:11

                Tu n'as pas le droit( python n'aime pas) de combiner les 4 espaces et les tabulations dans un meme code

                C'est pas un problème si c'est dans des blocs différents. Le problème ici, c'est qu'il ne sort pas de son premier if. Lorsque tu as fini de le remplir, appuie 2 fois sur enter pour retrouver un prompt >>> au lieu de .... Ce dernier indique en effet que Python considère que tu es toujours dans le premier bloc. Tu dois obtenir ceci à l'écran :

                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  12 octobre 2014 à 11:39:26

                  oui c'est vrai, j'avais pas pensé à ca ;)
                  • Partager sur Facebook
                  • Partager sur Twitter

                  Problème avec l'indentation avec l'IDLE sous Mac

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown