Partage
  • Partager sur Facebook
  • Partager sur Twitter

Débutant en programmation

Probleme avec le mot clef "else"

Sujet résolu
    6 octobre 2012 à 23:33:30

    Bonjour à tous,
    je débute en programmation et j'ai commencé à suivre le tutoriel sur "python".je suis arrivé à la leçon sur les structures conditionnelles et suis déjà bloqué.En effet, lorsque je frappe le mot clé "else:" le Python Shell m'indique "SyntaxError: invalid systeme".
    Merci de venir à mon secours


    j'utilise le python-3-2-3 sur ubuntu 12.04
    • Partager sur Facebook
    • Partager sur Twitter
      6 octobre 2012 à 23:40:19

      Invalid syntax plutôt ?

      Problème d'indentation je pense, comme souvent pour les débutants en Python ;)
      • Partager sur Facebook
      • Partager sur Twitter

      Blond, bouclé, toujours le sourire aux lèvres...

        6 octobre 2012 à 23:50:54

        Merci pour ta réponse cher LoupSolitaire.
        :D
        Bien sur, tu a raison, c'est
        ----------------------------
        SyntaxError: invalid syntax
        >>> a=5
        >>> if a>0:
        print ("plus grand")
        else:

        SyntaxError: invalid syntax
        ----------------------------

        Problème d'indentation? l'indentation ne se fait-elle pas automatiquement lorsque je frappe "entrée"?
        • Partager sur Facebook
        • Partager sur Twitter
          7 octobre 2012 à 0:03:47

          Effectivement, c'est un problème d'indentation. La fonction print doit être plus indentée que le if, tu reviens à la même hauteur pour le else et tu ré-indente d'autant pour le code dans le else.
          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            7 octobre 2012 à 0:25:49

            Quand je lis "Shell Python" je pense tout de suite à IDLE ?

            Quant à dire qu'il s'agit d'une erreur d'indentation... très certainement, mais pas forcément au niveau du print (puisqu'au sinon le traceback serait explicite avec une IndentationError). Alors je penche sur le else:, mais pour en être sûr il faudrait que tu édites ton dernier message pour mettre ton code entre balises <code type="python">#ton exemple ici</code>.

            Exemple dans un Shell Python IDLE :
            >>> n = 1
            >>> if not n:
                    print("<n> vaut zéro !")
            else:
                    print("<n> ne vaut pas zéro !")
            
            <n> ne vaut pas zéro !
            >>>
            


            Comme on peut le voir le else: n'est pas visuellement au même niveau que le if, alors que dans une console Python normale, en plus du prompt principal (le triple-chevrons >>>), il y a un prompt secondaire (trois petits points ...) et ça donnerai :

            >>> n = 0
            >>> if not n:
            ...    print("<n> vaut zéro !")
            ... else:
            ...    print("<n> ne vaut pas zéro !")
            ... 
            <n> vaut zéro !
            

            • Partager sur Facebook
            • Partager sur Twitter
              7 octobre 2012 à 0:44:26

              Merci PsicoPy :)
              mais voici le résultat avec ton exemple
              -----------------------------------------------------------------------
              >>> if not n:
              print("<n> vaut zéro!")
              else:

              SyntaxError: unindent does not match any outer indentation level
              >>>
              ------------------------------------------------------------------------
              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
                7 octobre 2012 à 0:48:03

                Les balises code sinon on ne peut pas t'aider ! http://www.siteduzero.com/forum-83-670 [...] m-python.html !

                Edit: Et précise quel exemple et aussi si tu utilises le shell Python d'IDLE ou non !
                • Partager sur Facebook
                • Partager sur Twitter
                  7 octobre 2012 à 2:25:35

                  Ouais, pense aux balises code, sinon l'indentation, ce qui nous intéresse justement, n'est pas correctement affiché.

                  J'ai été obligé de regarder le code source de la page pour voir (et c'est pas pratique du tout), et j'ai l'impression que tu indente le else comme le print, alors qu'il faut qu'il soit indenté au même niveau du if auquel il correspond.
                  • Partager sur Facebook
                  • Partager sur Twitter

                  Blond, bouclé, toujours le sourire aux lèvres...

                    7 octobre 2012 à 13:24:08

                    Merci àLoupSolitaire, à PsycoPy,à tous, et excusez-moi pour mes imprécisions.
                    Veuillez mettre cela sur le compte de mon incompétence (beaucoup) et de la fatigue (un peu).
                    Je précise aussi que je suis loin d'être un geek...
                    Bon, revenons à nos moutons!J'ai repris la manip à zéro en utilisant la console "livrée" avec Ubuntu 12.4 LTS.
                    mes remarques:Le premier essai fut un échecs! Pour le second, j'ai du indenté moi-même le mot clé "print"!?
                    bruno@monordi:~$ python
                    Python 2.7.3 (default, Aug  1 2012, 05:14:39) 
                    [GCC 4.6.3] on linux2
                    Type "help", "copyright", "credits" or "license" for more information.
                    >>> a=5
                    >>> if a > 0:
                    ... print("a est supérieur à 0.")
                      File "<stdin>", line 2
                        print("a est supérieur à 0.")
                            ^
                    IndentationError: expected an indented block
                    >>> a=5
                    >>> if a>0:
                    ...     print("a est supérieur à 0.")
                    ... else:
                    ...     print("a est inférieur ou égal à 0.")
                    ... 
                    a est supérieur à 0.
                    >>>
                    


                    Second essai avec le Terminal Guake 0.4.2-7
                    bruno@monordi:~$ python
                    Python 2.7.3 (default, Aug  1 2012, 05:14:39) 
                    [GCC 4.6.3] on linux2
                    Type "help", "copyright", "credits" or "license" for more information.
                    >>> 
                    >>> a = 5
                    >>> if a > 0:
                    ... print ("a est supérieur à 0.")
                      File "<stdin>", line 2
                        print ("a est supérieur à 0.")
                            ^
                    IndentationError: expected an indented block
                    >>> a = 5
                    >>> if a > 0:
                    ...     print ("a est supérieur à 0.")
                    ... else:
                    ...     print ("a est inférieur ou égal à 0.")
                    ... 
                    a est supérieur à 0.
                    


                    Mes remarques:Le résultat est,pour moi, identique au premier.

                    Troisième essais avec IDLE3

                    Python 3.2.3 (default, Sep 10 2012, 18:14:40) 
                    [GCC 4.6.3] on linux2
                    Type "copyright", "credits" or "license()" for more information.
                    ==== No Subprocess ====
                    >>> # PREMIER ESSAI
                    >>> a = 5
                    >>> 
                    >>> if a > 0:
                    	print ("a est supérieur à 0.")
                    	else:
                    		
                    SyntaxError: invalid syntax
                    >>> # DEUXIEME ESSAI
                    >>> a = 5
                    >>> if a > 0:
                    	print ("a est supérieur à 0.")
                    # J'indente le mot clé "Else:" manuellement en l'alignant avec "if"
                        else:
                    	    
                    SyntaxError: unindent does not match any outer indentation level
                    


                    =>C'est maintenant que je ne comprends plus!
                    Je note que de la version python 2.7.3 dans les deux premières consoles je suis passé au 3.2.3 dans IDLE3
                    D'autre part les numéros de lignes n'apparaissent dans aucune console comme c'est le cas dans le (très bien fait) tutorial du site.
                    Avec IDLE3 les "..." trois premiers point sont également invisible!

                    Bref j'ai la désagréable impression d'avoir fait une connerie quelque part!
                    Je ne voudrai pas abuser de votre temps mais je vous remercie d'avance pour votre aide...
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Anonyme
                      7 octobre 2012 à 14:14:38

                      >>> a = 5
                      >>> if a > 0:
                      ...     print ("a est supérieur à 0.")
                      ... else:
                      ...     print("a est inférieur à 0.")
                      ... 
                      a est supérieur à 0
                      


                      Comme tu peux le constater, il ne faut pas déplacer le else, il ne se trouve pas dans un bloc (se terminant par ":"), donc pas d'indentation!

                      Voir le 4ème post de ce sujet

                      • Partager sur Facebook
                      • Partager sur Twitter
                        7 octobre 2012 à 14:52:38

                        Python 3.2.3 (default, Sep 10 2012, 18:14:40) 
                        [GCC 4.6.3] on linux2
                        Type "copyright", "credits" or "license()" for more information.
                        ==== No Subprocess ====
                        >>> a = 5
                        >>> if a > 0:
                        	print ("a est supérieur à 0:")
                        	else:
                        


                        Merci du tuyau fred1599. Je pense comprendre mais le Shell Python m'aligne "else:" avec "Print" lorsque je frappe "Entrée". Et lorsque je confirme à nouveau, en ne touchant à rien sauf bien sûr la touche "entrée" il m'indique l'erreur SyntaxError: invalid syntax :'(
                        Je regarde ton exemple et je vois que ton "else:" est placé aussitôt après les 3 points.Impossible de le mettre là sans le déplacer...
                        Je suis soit fou, soit con. Comme je ne pense pas être fou, ... :lol:
                        • Partager sur Facebook
                        • Partager sur Twitter
                        Anonyme
                          7 octobre 2012 à 15:57:55

                          Citation : PsycoPy


                          >>> n = 1
                          >>> if not n:
                                  print("<n> vaut zéro !")
                          else:
                                  print("<n> ne vaut pas zéro !")
                          
                          <n> ne vaut pas zéro !
                          >>>
                          




                          De plus, IDLE3 est l'IDE de Python3. Pour utiliser Python 3 en console la commande est python3.
                          • Partager sur Facebook
                          • Partager sur Twitter
                            7 octobre 2012 à 16:51:59

                            A l'attention de PsycoPy en particulier et de tous le monde en général... :)
                            bruno@monordi:~$ python3
                            Python 3.2.3 (default, Sep 10 2012, 18:14:40) 
                            [GCC 4.6.3] on linux2
                            Type "help", "copyright", "credits" or "license" for more information.
                            
                            >>> n = 1
                            >>> if not n:
                            ... print("<n> vaut zéro!")
                              File "<stdin>", line 2
                                print("<n> vaut zéro!")
                                    ^
                            IndentationError: expected an indented block
                            
                            >>> n = 1
                            >>> if not n:
                            ...     print("<n> vaut zéro!")
                            ... else:
                            ...     print("<n> ne vaut pas zéro!")
                            ... 
                            <n> ne vaut pas zéro!
                            >>>
                            

                            J'ai essayé ton exemple sur le terminal. Ca marche mais seulement lorsque j'indente moi-même les deux "print" :(
                            • Partager sur Facebook
                            • Partager sur Twitter
                              7 octobre 2012 à 17:32:12

                              que ça soit dans un fichier ou directement en ligne de commande il faut toujours faire attention a l'indentation
                              • Partager sur Facebook
                              • Partager sur Twitter
                                7 octobre 2012 à 17:45:23

                                A l'attention de wolfnether en particulier et de tous le monde en particulier... :)

                                Citation : wolfnether

                                que ça soit dans un fichier ou directement en ligne de commande il faut toujours faire attention a l'indentation



                                Ca, j'ai bien compris. Mais lorsque je tape mes lignes de commande, surtout celles comme mon exemple qui sont simple, dois-je obligatoirement surveiller l'indentation? Je pensais naïvement qu'elle se faisait automatiquement... :honte:
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  7 octobre 2012 à 17:48:11

                                  oui c'est ce que j'ai dis toujours indenté
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    7 octobre 2012 à 18:20:12

                                    Donc, mon problème n'en est pas un?
                                    Il ne me reste plus qu'à vous remercier pour le temps que vous m'avez consacré. C'est super, vous avez tous été sympa.
                                    J'attends jusqu'a demain soir (au cas ou...) et je marquerai mon intervention comme résolue.

                                    Salut à tous. :)
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      7 octobre 2012 à 18:21:42

                                      pas grave on est la pour ça.
                                      • Partager sur Facebook
                                      • Partager sur Twitter

                                      Débutant en programmation

                                      × 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