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 :

Question de grand débutant [Python 3.X]


Sujet :

Python

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Mars 2004
    Messages : 12
    Par défaut Question de grand débutant
    Bonjour à tous,

    Désireux de découvrir un peu la programmation python, je suis le bouquin de Swinnen en essayant de faire les exercices au fur et à mesure.

    J'ai un soucis sur le 5.8 qui demande de transformer une chaîne "gaston" en "g*a*s*t*o*n".

    Voici ce que j'ai fait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ch = "gaston"
    l = len(ch)
    ch2 = ""
    a = 0
    while a < l:
        ch2 = ch2 + ch[a] + "*"
        a = a + 1
        print ch2,
    Le problème c'est que le résultat s'affiche sous cette forme : g* g*a* g*a*s* g*a*s*t* g*a*s*t*o* g*a*s*t*o*n*

    Comment faire pour que seul le résultat final s'affiche et pas les résultats intermédiaires?

    Pour exclure le dernier caractère, pensez vous qu'il faille insérer un test dans la bouche du WHILE ou il y aurait une solution plus simple?

    Merci d'avance pour votre aide.

  2. #2
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    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 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Python a de chouettes solutions pour ce genre de problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    print "*".join("gaston")
    'g*a*s*t*o*n'
    Dans ton code, le print affiche la chaine intermédiaire ch2, et avec la virgule, toutes les chaines intermédiaires sont affichées sur la même ligne: Python a parfaitement respecté ce que tu lui as demandé.

    Si tu veux que le résultat apparaisse progressivement à chaque boucle, il faut afficher uniquement ce que tu as ajouté à chaque boucle: ch[a] + "*".

    Et ajouter un print à la fin pour ajouter une fin de ligne.

  3. #3
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 308
    Par défaut
    Salut,

    Si tu mets ton print() à l'intérieur de la boucle, c'est normal que chaque itération soit affichée.

    Met le print() après la boucle.

  4. #4
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Mars 2004
    Messages : 12
    Par défaut
    Citation Envoyé par tyrtamos Voir le message
    Bonjour,

    Python a de chouettes solutions pour ce genre de problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    print "*".join("gaston")
    'g*a*s*t*o*n'
    Dans ton code, le print affiche la chaine intermédiaire ch2, et avec la virgule, toutes les chaines intermédiaires sont affichées sur la même ligne: Python a parfaitement respecté ce que tu lui as demandé.

    Si tu veux que le résultat apparaisse progressivement à chaque boucle, il faut afficher uniquement ce que tu as ajouté à chaque boucle: ch[a] + "*".

    Et ajouter un print à la fin pour ajouter une fin de ligne.
    Merci pour ta réponse. C'est en effet très pratique . Mais malheureusement je ne connaissais pas cette instruction.

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Mars 2004
    Messages : 12
    Par défaut
    Citation Envoyé par VinsS Voir le message
    Salut,

    Si tu mets ton print() à l'intérieur de la boucle, c'est normal que chaque itération soit affichée.

    Met le print() après la boucle.
    Merci.

    Le problème c'est que si j'écris:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ch = "gaston"
    l = len(ch)
    ch2 = ""
    a = 0
    while a < l:
        ch2 = ch2 + ch[a] + "*"
        a = a + 1
    print ch2
    J'obtiens une erreur de syntaxe

    Désolé pour ces questions idiotes...

  6. #6
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 308
    Par défaut
    Tu utilises bien Python 2 ?

    La seule erreur possible serait que tu utilises Python 3, qui demande des parenthèses au print.

    À quel endroit est indiquée l'erreur ?

  7. #7
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Mars 2004
    Messages : 12
    Par défaut
    Je suis sous python 3

    J'ai testé avec les parenthèses, j'obtiens la même erreur de syntaxe. Le petit symbole indique le "t" de "print".

  8. #8
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 308
    Par défaut
    Aucun problème chez moi.

    Recopie ton code de ton post ci-dessus dans ton script.

  9. #9
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 790
    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 790
    Par défaut
    Salut,

    Si vous travaillez avec la console, vous entrez vos instructions au prompt ">>>".
    Dans ce cas, lorsque vous écrivez un block, le prompt devient "..." mais il faut entrer une ligne vide pour terminer le block.

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

  10. #10
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Mars 2004
    Messages : 12
    Par défaut
    >>> ch = "gaston"
    >>> l = len(ch)
    >>> ch2 = ""
    >>> a = 0
    >>> while a < l:
    ... ch2 = ch2 + ch[a] + "*"
    ... a = a + 1
    ... print ch2
    File "<stdin>", line 4
    print ch2
    ^
    SyntaxError: invalid syntax
    >>>


    Voilà ce qu'il se passe. En fait, j'édite sous bluefish et ensuite je colle dans la console.



    Lorsque j'insère une ligne vide entre l'incrémentation de a et le "print ch2", j'obtiens le même message d'erreur.

  11. #11
    Membre émérite
    Homme Profil pro
    Aucune activité
    Inscrit en
    Novembre 2011
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Aucune activité

    Informations forums :
    Inscription : Novembre 2011
    Messages : 505
    Par défaut
    Citation Envoyé par fieldmoose Voir le message
    >>> ch = "gaston"
    >>> l = len(ch)
    >>> ch2 = ""
    >>> a = 0
    >>> while a < l:
    ... ch2 = ch2 + ch[a] + "*"
    ... a = a + 1
    ... print ch2
    File "<stdin>", line 4
    print ch2
    ^
    SyntaxError: invalid syntax
    >>>
    Voilà ce qu'il se passe. En fait, j'édite sous bluefish et ensuite je colle dans la console.
    Lorsque j'insère une ligne vide entre l'incrémentation de a et le "print ch2", j'obtiens le même message d'erreur.
    Bonjour,
    Oui, il manque les parenthèses pour le print!

    Clodion

  12. #12
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 790
    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 790
    Par défaut
    Citation Envoyé par Clodion Voir le message
    Oui, il manque les parenthèses pour le print!
    Et vous avez changé de version de Python depuis votre premier message.

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

  13. #13
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 308
    Par défaut
    Rien à voir avec les parenthèses.

    copier-collé de l'ensemble:
    Code : 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
     
    Python 2.7.3 (default, Dec 18 2014, 19:03:52) 
    [GCC 4.6.3] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> ch = "gaston"
    >>> l = len(ch)
    >>> ch2 = ""
    >>> a = 0
    >>> while a < l:
    ...     ch2 = ch2 + ch[a] + "*"
    ...     a = a + 1
    ... print ch2
      File "<stdin>", line 4
        print ch2
            ^
    SyntaxError: invalid syntax
    Comme l'a dit Wiztricks, il fallait un Enter après a = a + 1 pour ramener le prompteur à >>>


    Éditer dans un texte et puis coller dans un terminal, ça ne fonctionnera jamais.

  14. #14
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2014
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2014
    Messages : 54
    Par défaut
    peut-être en tapant ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ch = "gaston"
    l = len(ch)
    ch2 = ""
    a = 0
    while a < l:
        ch2 = ch2 + ch[a] + "*"
        a = a + 1
        print(ch2,end='\n')

  15. #15
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Mars 2004
    Messages : 12
    Par défaut
    Citation Envoyé par VinsS Voir le message


    Éditer dans un texte et puis coller dans un terminal, ça ne fonctionnera jamais.
    Je m'en suis rendu compte . Erreur de débutant...

    Du coup j'ai adopté PyCharm.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. 2 questions de grand débutant
    Par lamaison dans le forum jQuery
    Réponses: 5
    Dernier message: 12/11/2009, 10h17
  2. Question de grand débutant
    Par Maxoow dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 11/05/2009, 13h23
  3. grand débutant, petite question
    Par derhyl dans le forum Flash
    Réponses: 5
    Dernier message: 23/02/2007, 16h07
  4. question d'un débutant...
    Par chti_juanito dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 01/06/2005, 11h29

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