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
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.
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 <codetype="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 !
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
>>>
------------------------------------------------------------------------
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.
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...
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, ...
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"
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...
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.
× 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.
Blond, bouclé, toujours le sourire aux lèvres...
Blond, bouclé, toujours le sourire aux lèvres...