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 :

Indentation dans Idle


Sujet :

Python

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 199
    Points : 103
    Points
    103
    Par défaut Indentation dans Idle
    Bonjour à tous.

    Je suis en train de suivre une formation sur python afin d'appréhender les possibilités de ce language.

    J'ai une question concernant le fonctionnement de Idle, et je m'excuse par avance de sa naïvete.

    Comment faire un saut de ligne avec indentation dans Idle, notamment après avoir supprimé un retour chariot.

    Je m'explique :

    voici le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    for x in list(range(1,11)):
    	print (x, x**2)print ("fin")
    Je souhaite faire passer le "print ("fin") à la ligne suivante avec une indentation. C'est incroyable, mais si j'appuie sur la touche entrée, l'interpréteur lance le code et m'affiche le message "SyntaxError: invalid syntax".

    Si j'efface cette partie de code et que je fais un retour chariot je suis capable d'écrire ma ligne, mais elle est indentée automatiquement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for x in list(range(1,11)):
    	print (x, x**2)
    	print ("fin")
    Donc si je lance, ça fonctionne mais je n'obtiens pas ce que je veux.

    Si j'efface l'indentation, puis que je la remets (soit une tabulation, soit 4 espaces, le résultat est identique), j'obtiens alors une exception comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for x in list(range(1,11)):
    	print (x, x**2)
        print ("fin")
     
    SyntaxError: unindent does not match any outer indentation level
    C'est vraiment à devenir dingue et à abandonner immédiatement tellement c'est contre-productif.

    Auriez-vous une solution ?

    Par avance, merci.

  2. #2
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Quand on tape une ligne "for..." ou while... ou une autre ligne qui se termine par ':', idle comprend qu'il y aura à la suite une ou plusieurs lignes qui seront indentée(s). Un retour chariot amène le curseur sur la ligne suivante.

    Sur cette ligne suivante, le curseur arrive avec un décalage, mais en fait, l'indentation n'existe pas encore: il faut ajouter 4 espaces. On écrit ensuite l'instruction de cette 2ème ligne et on fait retour chariot.

    S'il y a d'autres lignes, on les écrit de la même façon en les commençant toutes par 4 espaces.

    C'est seulement quand on fait retour chariot sur une ligne vide que idle comprend qu'on a fini le bloc indenté, et qu'il doit l'exécuter.

    A noter que Python donne le choix entre 4 espaces et une tabulation, mais qu'il ne faut pas les mélanger dans le même code.
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 199
    Points : 103
    Points
    103
    Par défaut
    Merci tyrtamos pour ton aide... mais ça ne suffit pas à me faire comprendre le fonctionnement de cet éditeur.

    j'ai essayé de pratiquer selon ce que tu m'as décrit à savoir :

    - Sur cette ligne suivante, le curseur arrive avec un décalage
    - l'indentation n'existe pas encore: il faut ajouter 4 espaces
    - On écrit ... on fait retour chariot
    - autres lignes, ... en les commençant toutes par 4 espaces.


    Voilà le résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    >>> for x in list(range (1,11)):
    	    print (x, x**2)
    	         print ("fin")
     
    SyntaxError: unexpected indent
    Je n'ai certainement rien compris, mais à mon sens, l'indentation visible à l'écran est aussi présente dans le fichier, même si pour la première ligne, ce n'est pas flagrant.

    Néanmoins, le problème se situe au second print : je désire ramener l'indentation à la hauteur du "for..." ci-avant : impossible. Une exception est levée ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for x in list(range (1,11)):
    	print (x, x**2)
    print ("fin")
     
    SyntaxError: unindent does not match any outer indentation level

    Bref. Malgré pas mal de lignes de codes derrière moi, je n'ai jamais rencontré un problème aussi béotien.

    Je voulais tenter un language non typé, mais réellement, ça ne passe pas. Je ne le sens malheureusement pas. Back to java.

    Merci pour cette aide.

  4. #4
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Désolé mais comme je n'utilise plus idle depuis longtemps, je me suis trompé: après la 2ème ligne qui démarre obligatoirement par 4 espaces, les lignes suivantes n'en ont pas besoin: elle s'alignent correctement sous la ligne précédente. L'exécution se fait comme dit précédemment au retour chariot sur la dernière ligne vide.

    Mais si tu baisses les bras si vite, tu n'iras pas très loin: il y a beaucoup d'autres outils de développement plus performants que idle. Et comme tu parles de java, j'utilise depuis longtemps eclipse pour mes développements Python, et j'en suis très satisfait.
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 199
    Points : 103
    Points
    103
    Par défaut
    Effectivement j'adhère à ce propos, j'aime beaucoup Eclipse aussi, mais le mooc suivi était basé sur l'utilisation d'Idle, donc...

    Quant à baisser les bras, en fait non. Comme beaucoup d'entre nous, je suis issu de la programmation typée (même structurée d'ailleurs) et déjà ces syntaxes pour les floats ou l'incapacité à savoir si ma variable a gardée son type initial - sans passer par un isinstance ou type - me met très mal à l'aise. Ne pas encadrer d'instruction conditionnelle me met aussi en difficulté à la lecture.

    En plus ces petits détails tels que ne pas pouvoir rappeler un code avec une flèche haut mais via un shift-entrée dans une console, ou ne pas pouvoir faire une indentation sans poser une question sur un forum (!) m’insupportent un peu et me paraissent vraiment contre-productif.

    Donc, je ne baisse pas les bras, mais je tranche le débat car pas trop de temps à perdre pour réacquérir de nouveaux réflexes. Je vais donc plutôt m'investir sur java, car je le sens vraiment mieux - et c'est tout de suite dans Eclipse ! -.

    Merci pour ton aide.

Discussions similaires

  1. conversion d'indentation dans un code python
    Par KINENVEU dans le forum Général Python
    Réponses: 2
    Dernier message: 26/02/2009, 04h04
  2. Réponses: 5
    Dernier message: 08/01/2009, 13h45
  3. [XSLT] Suppression indentation dans un noeud
    Par desperados3k dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 10/11/2008, 18h47
  4. [VB6][Help Workshop] Indentations dans le sommaire
    Par jacma dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 29/11/2005, 09h56
  5. Réponses: 2
    Dernier message: 27/05/2002, 19h46

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