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 :

Problème code python


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Chargé de référencement
    Inscrit en
    Septembre 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Chargé de référencement

    Informations forums :
    Inscription : Septembre 2016
    Messages : 18
    Par défaut Problème code python
    Bonjour, mon objectif est de créer une fonction qui va modifier un string comme "Bonjour le monde" en ["Bonjour","le","monde"]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    def fct1(s):
        l=[]
        mot=""
        for e in s:
              if e == " ":
                l.append(mot)
                mot=""
              else:
                mot+=e
              return l
    print (fct1("Bonjour le monde"))
    J'ai donc écris cette fonction seulement cela me renvois uniquement [] alors que je devrais avoir ["Bonjour","le","monde"].

    Auriez-vous une solution?

    Merci

    PS: je connais split mais je ne veux pas l'utiliser ici.

  2. #2
    Membre éclairé

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    346
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 346
    Par défaut
    En fonction de l'indentation indiquée, vous renvoyez une valeur au premier tour de boucle. Reste le problème d'ajout du dernier mot de votre phrase si celui-ci n'est pas un espace.
    Il faudrait plutôt ajouter en cas de mot qu'en cas de blanc.

  3. #3
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    def fct1(s):
        l=[]
        mot=""
        for e in s:
              if e == " ":
                l.append(mot)
                mot=""
              else:
                mot+=e
        l.append(mot)
        return l
    print (fct1("Bonjour le monde"))
    Erreur 1 : Indentation du return
    Erreur 2 : Vous oubliez d'ajouter le dernier mot (qui lui n'est pas suivi d'un espace)

  4. #4
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Un bon usage des "print" :
    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
    17
    18
    19
    20
    21
    def fct1(chaine):
        return chaine.split()
    print (fct1("Bonjour le monde"))
     
    def fct2(s):
        l=[]
        mot=""
        for e in s:
            print("e : ", e)
            if e == " ":
                print("e_bis : ", e)
                print("mot : ", mot)
                l.append(mot)
                mot=""
            else:
                print("mot_bis : ", mot)
                mot+=e
                print("mot_ter : ", mot)
            return l
     
    fct2("Bonjour le monde")

  5. #5
    Membre averti
    Homme Profil pro
    Chargé de référencement
    Inscrit en
    Septembre 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Chargé de référencement

    Informations forums :
    Inscription : Septembre 2016
    Messages : 18
    Par défaut
    Un grand merci

    J'ai également un petit problème, j’essaie maintenant de séparer les chiffres et la caractères alpha numériques.
    Quand je fais ça:
    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
    def fct1(s):
        l=[]
        mot=""
        for e in s:
              if e.isdigit():
                l.append(mot)
                print("y",e)
                mot=""
              elif not e.isdigit():
                mot+=e
                print("c",e)
        l.append(mot)
        print("h",e)
        return l
    print (fct1("ac12gct34"))
    seules les lettres apparaissent
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ['ac', '', 'gct', '', '']
    Pourriez-vous m'aider à comprendre pourquoi les chiffres n'apparaissent pas?

  6. #6
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    Si vous ne voyez pas d'ou vient le problème, c'est que vous n'afficher pas le problème.
    Pourquoi ne faire print que sur la variable e ? Si celle-ci semble évoluer correctement, alors faites afficher les autres (comme mot et/ou l par exemple) pour voir si elles aussi se comportent bien.

    Bon après en vria, la le problème est plutot algorithmique que Pythonique. A la main, comment feriez-vous ? Là votre code fait la même chose que le précédent, sauf qu'au lieu de considéré l'espace comme le caractère de séparation vous considérez les chiffres...

    D'autre part la ligne
    me parait relativement maladroite, puisque dans le if au dessus, vous avez déjà tester
    donc si vous contenter d'un else juste après vous êtes nécéssairement dans le cas ou e.isdigit() est faux (inutile de le retester).

  7. #7
    Membre averti
    Homme Profil pro
    Chargé de référencement
    Inscrit en
    Septembre 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Chargé de référencement

    Informations forums :
    Inscription : Septembre 2016
    Messages : 18
    Par défaut
    A la main je sais quoi faire:
    (1) parcourir s
    (2) a chaque fois que le caractère est un chiffre, le mettre dans la liste, sinon séparer puis continuer.

    Mais je ne comprends pas comment faire pour que la séparation soit cette fois-ci le fait qu'on change de type de caractère...
    J'ai un peu du mal je débute dans python.

    Merci pour votre aide.

  8. #8
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    Non, ce n'est pas ca que tu fais à la main. Essaie d'appliquer toi même ton algorithme sur un petit exemple que tu déroule à la main, tu verras, ça ne donne pas ce que tu veux.

    Ca
    Citation Envoyé par Grendel26 Voir le message
    (2) a chaque fois que le caractère est un chiffre, le mettre dans la liste, sinon séparer puis continuer.
    (qui n'est pas hyper clair soit dit en passant) et ça
    Citation Envoyé par Grendel26 Voir le message
    comment faire pour que la séparation soit cette fois-ci le fait qu'on change de type de caractère...
    se contredit !

    La séparation ce fait non pas lorsque tu as spécifiquement un chiffre. Elle se fait lorsqu'il y a un changement. C'est à dire qu'on passe d'un chiffre à une lettre, ou bien d'une lettre à un chiffre.

    Il va donc falloir que dans ta boucle for, tu gardes en mémoire le précédent élément (ou du moins son type, c'est à dire lettre ou chiffre) de sorte à savoir si l'élément courrant est du même type que le précédent ou s'il y a eu changement. C'est ca qu'il faut traduire dans la condition if.

Discussions similaires

  1. [Bouml]modifier le générateur de code python
    Par cedrix57 dans le forum BOUML
    Réponses: 4
    Dernier message: 16/03/2009, 22h12
  2. Réponses: 3
    Dernier message: 08/03/2009, 10h50
  3. 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
  4. Réponses: 1
    Dernier message: 24/05/2008, 17h04
  5. [SWIG] dialogue entre code C et code python
    Par dmichel dans le forum Interfaçage autre langage
    Réponses: 12
    Dernier message: 19/12/2007, 21h19

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