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 :

Retourner les elements d'une liste sans guillemets ni virgules.


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 5
    Par défaut Retourner les elements d'une liste sans guillemets ni virgules.
    Bonjour a tous, j'étais en train de faire un exercice consistant a appeler une fonction ayant pour parametre une chaine de caractères, et qui doit renvoyer cette chaine de caracteres mais à l'envers.

    Donc je traite la chaine de caractere comme une liste, j'ajoute dans une nouvelle liste chaque element de la chaine de caracteres en commencant par la fin.
    Mais quand je retourne la nouvelle liste, celle-ci s'affiche bien a l'envers, mais tous les caracteres sont séparés par des virgules et sont entourés par des guillemets.
    Sauriez vous comment éviter celà ?

    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
    #-*-coding:utf8-*-
    #7.12. Définissez une fonction inverse(ch) qui permette d'inverser les l'ordre des caractères d'une
    #chaîne quelconque. (La chaîne inversée sera renvoyée au programme appelant).
     
    def inverse(ch):
    	"inverser une chiane de caractere"
    	index=len(ch)
    	chaine=[] #la liste dans laquelle je rajoute chaque caracteres en commencant par la fin de la chaine de caracteres
    	while index>0:
    		chaine.append(ch[index-1])
    		index-=1
    	return chaine
     
     
    print inverse('Le programme va ecrire cette phrase a l\'envers')

    Et le résultat est ceci :

    ['s', 'r', 'e', 'v', 'n', 'e', "'", 'l', ' ', 'a', ' ', 'e', 's', 'a', 'r', 'h', 'p', ' ', 'e', 't', 't', 'e', 'c', ' ', 'e', 'r', 'i', 'r', 'c', 'e', ' ', 'a', 'v', ' ', 'e', 'm', 'm', 'a', 'r', 'g', 'o', 'r', 'p', ' ', 'e', 'L']
    Merci beaucoup. Bonne soirée

  2. #2
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    Bonjour,
    pour ton problème, en fait tout vient du fait que tu as créé une liste. On peut résoudre ton souci comme suit :
    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
    #-*-coding:utf8-*-
    #7.12. Définissez une fonction inverse(ch) qui permette d'inverser les l'ordre des caractères d'une
    #chaîne quelconque. (La chaîne inversée sera renvoyée au programme appelant).
     
    def inverse(ch):
    	"inverser une chiane de caractere"
    	index=len(ch)
    	chaine=[] #la liste dans laquelle je rajoute chaque caracteres en commencant par la fin de la chaine de caracteres
    	while index>0:
    		chaine.append(ch[index-1])
    		index-=1
    	return ''.join(chaine)
     
     
    print inverse('Le programme va ecrire cette phrase a l\'envers')
    Une remarque importante : pour parcourir une chaîne en Python, il suffit de taper for unChar in chaine:...

    Pour ma part, je ferais comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    chaine = "Il était une fois..."
    nouvelleChaine = ''
     
    for unChar in chaine:
        nouvelleChaine = unChar + nouvelleChaine
     
    print chaine
    print nouvelleChaine

  3. #3
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 777
    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 777
    Par défaut
    Salut,
    Jetez un oeil à la méthode 'join' qui permet de passer d'une liste de... à un string.

    Revisitez votre algo. il est juste - sauf la fin - mais pour:
    • transformer un string S en liste, on peut faire list(S).
    • inverser les éléments d'une list vous avez la méthode reverse.

    Avec çà, vous devriez pouvoir ré-écrire inverse en (au plus) 4 lignes de code.
    Et si vous transpirez plus 1 seule ligne devrait suffire.

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

  4. #4
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Et si vous transpirez plus 1 seule ligne devrait suffire.
    Mes deux lignes me vont bien.

  5. #5
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    Avec reverse, cela donne ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    chaine = "Il était une fois..."
     
    nouvelleChaine = [unChar for unChar in chaine]
    nouvelleChaine.reverse()
    nouvelleChaine = ''.join(nouvelleChaine)
     
    print(chaine)
    print(nouvelleChaine)
    Et en une ligne ?

  6. #6
    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,

    Et comme ça?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    inverse = lambda x: ''.join(reversed(list(x)))
    Ce qui donne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    x = r"Le programme va ecrire cette phrase a l'envers"
    y = inverse(x)
    print y
    srevne'l a esarhp ettec erirce av emmargorp eL
    z = inverse(y)
    print z
    Le programme va ecrire cette phrase a l'envers
    Tyrtamos

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

    Citation Envoyé par rambc Voir le message
    Mes deux lignes me vont bien.
    ben si on ajoute l'initialisation de la chaine retournée, le def et le return, aux deux de la boucle for ... çà fait 5.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    nouvelleChaine = [unChar for unChar in chaine]
    # s'écrit aussi:
    nouvelleChaine = list(chaine)
    Ceci dit, je vois mal l'auteur aller présenter la solution "1 ligne" à son prof...

    Vous auriez quand même pu le laisser transpirer un peu: comment va-t-il apprendre les joies de la lecture d'une documentation si on lui mâche trop le boulot?

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

  8. #8
    Membre Expert
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Par défaut
    Il n'est pas nécessaire de passer par une lambda pour l'écrire en une ligne (et la conversion en liste n'est pas nécessaire, reversed accepte n'importe quel type de séquence):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    def inverse(x): return ''.join(reversed(x))

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 5
    Par défaut
    Merci beaucoup pour vos réponses, je n'avias pas encore abordé dans le cours les méthode que vous proposez, merci de me les suggérer et de me les apprendre =) .
    @ bientot.

  10. #10
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    Citation Envoyé par josmiley Voir le message
    mouhahahahaha !!! non mais ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ma_chaine_reversed ='trop marrant que coup des listes reversed'[::-1]
    Tout simplement... Bien vu.


    Citation Envoyé par josmiley Voir le message
    j'dis ça parce que je ne pense pas que ce soit la bonne méthode pour apprendre python; s'il faut réinventer la roue, autant apprendre C ou l'assembleur.
    au début j'ai appris comme ça. Avec 4 instructions j'essayais de faire un tas de trucs; puis j'ai découvert qu'il existait des instructions qui fesaient ces trucs et j'ai alors pensé que j'avais perdu du temps.
    Pour apprendre à programmer, on peut choisir le langage que l'on veut. Non ? Python a l'avantage d'être utilisable de façon naïve pou plus poussée. Je trouve que c'est un bon choix pour débuter.

    Citation Envoyé par wiztricks Voir le message
    ben si on ajoute l'initialisation de la chaine retournée, le def et le return, aux deux de la boucle for ... çà fait 5.
    Ne m'engeule pas trop en ce début de rentrée scolaire sinon je serais démotivé...

    Citation Envoyé par wiztricks Voir le message
    Ceci dit, je vois mal l'auteur aller présenter la solution "1 ligne" à son prof...

    Vous auriez quand même pu le laisser transpirer un peu: comment va-t-il apprendre les joies de la lecture d'une documentation si on lui mâche trop le boulot?
    Je n'avais pas fait gaffe au côté DM-question car la solution était presque bonne.

Discussions similaires

  1. Réponses: 3
    Dernier message: 25/01/2007, 08h54
  2. Info Bulle sur les elements d'une liste déroulante
    Par ReaseT dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 03/10/2006, 12h01
  3. [Débutant] Doubler les éléments d'une liste
    Par guillaume07 dans le forum Prolog
    Réponses: 4
    Dernier message: 25/08/2006, 17h21
  4. [CSS] largeur fixe pour les elements d'une liste
    Par arnolpourri dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 24/05/2006, 13h25
  5. Rechercher les element d'une liste dans une autre liste
    Par fessebleu dans le forum Langage
    Réponses: 30
    Dernier message: 24/04/2006, 21h23

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