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 :

chercher l'indice d'une lettre dans un mot avec for


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Septembre 2018
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Septembre 2018
    Messages : 27
    Par défaut chercher l'indice d'une lettre dans un mot avec for
    Bonjour,

    Je cherche la position d'une lettre dans un mot. Par ex. "a" est la position 1 du mot "maison".
    Je vous remercie pour votre aide.

    Mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    def find1st(c,s):
    	i = 0
    	lettre = s[0]
    	for elt in range(len(s)):
    		if s[elt] == s[i]:
    			lettre = s[i]
    			return i
    		i = i + 1
    	return None
     
    print(find1st("i", "maison"))

  2. #2
    Membre émérite

    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 662
    Par défaut
    Salut.

    L'utilisation d'une boucle for est une contrainte?

    Si oui, parcourez les lettres. Si la lettre actuelle est celle recherchée sortez de la fonction. Sinon pousuivez jusqu'à plus de lettres et retournez None. Vous y êtes presque:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    def look_for_letter(s, letter):
        for i, car in enumerate(s):
            if car == letter:
                return i
        return None
    Ici j'utilise enumerate() qui permet de pourcourir un itérable (une chaîne de caractère dans le cas présent) en renvoyant deux éléments: un indice, et l'élément. Vraiment pratique.

    Mais bon, si la boucle for n'est pas obligatoire, vous pouvez directement demander l'index de la lettre:
    J

  3. #3
    Membre averti
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Septembre 2018
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Septembre 2018
    Messages : 27
    Par défaut
    J'ai testé votre code, mais ca n'a pas trouvé une lettre cherchée.

    Oui, je dois utiliser for pour trouver la position d'une lettre dans un mot.

  4. #4
    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
    La fonction de Julien fonctionne très bien. Soyez attentif et regarder d'un peu plus près les paramètres de la fonction de Julien, et les paramètres de votre fonction (en particulier l'ordre).

  5. #5
    Membre averti
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Septembre 2018
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Septembre 2018
    Messages : 27
    Par défaut
    Merci, j'ai modifié le parametre, ca fonctionne.

    Citation Envoyé par lg_53 Voir le message
    La fonction de Julien fonctionne très bien. Soyez attentif et regarder d'un peu plus près les paramètres de la fonction de Julien, et les paramètres de votre fonction (en particulier l'ordre).

  6. #6
    Membre Expert
    Avatar de Pyramidev
    Homme Profil pro
    Tech Lead
    Inscrit en
    Avril 2016
    Messages
    1 513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Tech Lead

    Informations forums :
    Inscription : Avril 2016
    Messages : 1 513
    Par défaut
    Bonjour,

    Citation Envoyé par Julien N Voir le message
    Mais bon, si la boucle for n'est pas obligatoire, vous pouvez directement demander l'index de la lettre:
    Attention, 'maison'.index('e') ne retourne pas None, mais lance une exception ValueError, donc la méthode index n'est pas équivalente à look_for_letter.
    'maison'.find('e'), lui, retourne -1.
    Si on veut retourner None quand la lettre n'est pas trouvée, alors on peut écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    def look_for_letter(s, letter):
    	x = s.find(letter)
    	return x if (x != -1) else None

  7. #7
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juillet 2011
    Messages : 25
    Par défaut
    Bonjour,

    La fonction de Julien est bien, mais, si le mot a plusieurs fois la lettre qu'on cherche, ça ne retourne que la première occurrence. Si tu les veux toutes, tu peux déclarer une liste vide dans sa fonction en amont de la boucle puis agrémenter cette liste des indices de chaque occurrence :

    Code python3 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    def look_for_letter(s, letter):
        occurrences = []
        for i, car in enumerate(s):
            if car == letter:
                occurrences.append(i)
        if occurrences:
            return occurrences
        else:
            return None

  8. #8
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Citation Envoyé par tomsawyer1311 Voir le message
    ça ne retourne que la première occurrence
    çà c'est par défaut.

    .find et .index savent aussi chercher une occurrence de à partir de et jusqu'à.

    notez que côté interface, si votre fonction retourne la liste des index qui... la liste vide s'exprime par [] et non par None. Ça ne change rien côté valeur booléenne car bool([]) - et tout objet de taille nulle - est aussi False mais çà aide à écrire for index in look_for_letter sans avoir à tester la condition.

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

  9. #9
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juillet 2011
    Messages : 25
    Par défaut
    Merci Wiztricks je viens de piger en testant. Ma fonction, si la lettre n'est pas dans le mot m'indique une erreur comme quoi None n'est pas itérable. J'ai supprimé la condition et retourne la liste après le for. Ainsi, je n'ai pas d'erreur dans une expression telle
    Code python 3 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for occurrence in look_for_letter("maisons", "g"):
        print(occurrence)

  10. #10
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Citation Envoyé par lucie34 Voir le message
    Je cherche la position d'une lettre dans un mot. Par ex. "a" est la position 1 du mot "maison".
    Je vous remercie pour votre aide.

    Mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    def find1st(c,s):
    	i = 0
    	lettre = s[0]
    	for elt in range(len(s)):
    		if s[elt] == s[i]:
    			lettre = s[i]
    			return i
    		i = i + 1
    	return None
     
    print(find1st("i", "maison"))

    Si dans votre code, la lettre cherchée est passée via le paramètre "c", il n'y a rien dans la boucle qui compare ce caractère là aux différents caractères de la chaîne. De plus, à quoi sert la variable "i" puisque celle qui est donnée par votre boucle s'appelle "elt"?
    Votre code ne peut pas fonctionner, à vous de comprendre pourquoi en ajoutant des "print" pour visualiser l'état de vos variables à chaque itération: ce boulot là (comprendre pourquoi le code que vous avez écrit ne fonctionne pas en relisant le code en vous posant des questions sur ce qu'il fait ou pas) fait partie de ce que vous devez apprendre tout seul.

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

Discussions similaires

  1. Position d'une lettre dans un mot
    Par yannjuve dans le forum Général Python
    Réponses: 6
    Dernier message: 24/12/2020, 10h31
  2. Réponses: 1
    Dernier message: 05/01/2014, 13h11
  3. [Turbo Pascal] Trouver une lettre dans un mot
    Par lediamant dans le forum Turbo Pascal
    Réponses: 5
    Dernier message: 03/11/2009, 16h46
  4. Trouver une lettre dans un mot
    Par frankthechamp dans le forum x86 16-bits
    Réponses: 3
    Dernier message: 27/04/2009, 23h23
  5. [PERL] connaitre la position d'une lettre dans un mot
    Par LE NEINDRE dans le forum Langage
    Réponses: 3
    Dernier message: 24/03/2006, 16h03

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