Chaine de caractères [Python] [Fermé]

Signaler
-
Messages postés
759
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
29 décembre 2013
-
Bonjour,

Est-ce que quelqu'un pourrait m'expliquer en détail comment déterminer si une chaîne contient ou non un caractère (exemple i) ?

Merci.

7 réponses

Messages postés
1491
Date d'inscription
vendredi 26 octobre 2012
Statut
Membre
Dernière intervention
28 janvier 2013
87
Bonsoir,
Je ne peux pas exécuter python, mais essaie ceci:
car = "i" # Texte à rechercher
chaine = "Je veux dormir un instant"
if car in chaine: 
	print "La lettre -i- se trouve dans la chaîne !" 
else 
	print "La chaîne ne contient pas la lettre -i- !"

Peux-tu me dire si cela fonctionne, merci.
4
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
1491
Date d'inscription
vendredi 26 octobre 2012
Statut
Membre
Dernière intervention
28 janvier 2013
87
En faisant une boucle sur chacun des caractères de la chaîne de caractères
Messages postés
759
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
29 décembre 2013
125
Heliote,
si tu ne maîtrise pas un sujet , il vaut mieux t'abstenir
Messages postés
1491
Date d'inscription
vendredi 26 octobre 2012
Statut
Membre
Dernière intervention
28 janvier 2013
87
Comme demandé, avec le "while":
car = "i" # Texte à rechercher
chaine = "Je veux dormir un instant"
Introuvable = True
# parcours avec while
i = 0
while i < len(chaine) :
	if car in chaine:
		Introuvable = False
	print chaine[i]
	i += 1
if Introuvable == False: 
	print "La lettre -i- se trouve dans la chaîne !" 
else 
	print "La chaîne ne contient pas la lettre -i- !"

Peux-tu me dire si cela fonctionne, merci.
Comment ? Je connais avec la méthode For in mais je cherche à connaitre comment on le fait avec WHILE ?
Messages postés
1491
Date d'inscription
vendredi 26 octobre 2012
Statut
Membre
Dernière intervention
28 janvier 2013
87
Veux-tu vraiment utiliser le "while" ?
Bonsoir,
Le premier marche nickel. Le deuxième invalid syntax,. Je sais pas si ça vient de moi

car="i"
chaine = "je veux dormir un instant"
introuvable = True
i = 0
while i < len (chaine):
    if car in chaine:
        introuvable = False
    print chaine [i]
    i + = 1
if introuvable == False:
    print (" La lettre 'i' se trouve dans la chaine ")
else:
    print (" la chaine ne contient pas la lettre 'i' ")


L'erreur viendrait de chaîne.
Messages postés
1491
Date d'inscription
vendredi 26 octobre 2012
Statut
Membre
Dernière intervention
28 janvier 2013
87
Bonjour Léa,

Je ne sait pas si tu as fait exprès pour me le présenter, mais si il y a un espace entre "chaine" et "[" .. la syntaxe peut être très pointilleuse .. alors, si c'est le cas essaie : print chaine[i], sans espace .. pour voir !

Autre chose, mais je suppose que tu le sait. En python, il n'y a pas accolades ou autre symbole pour dire "je commence ici" ou "je termine là". Alors, l'important est l'indentation .. quand il y a 1 tabulation il ne faut pas en mettre 0 ou 2 ...
Bonjour,

Pour l'indentation, ça va je fais attention :)

Alors, même sans l'espace y a erreur. Du coup j'ai mis chaine [i] entre guillemets et entre parenthèses parce que y a print avant, eh ben ça a marché (c'est bien à cause de ça ou je fais fausse route ?)
Messages postés
759
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
29 décembre 2013
125
Tu as raison, le message d'erreur n'est pas trés disert. Mais dans IDLE, une erreur de syntaxe s'accompagne d'un curseur rouge ou d'une position aberrante du curseur normal qui donnent un renseignement sur l'endroit où se produit l'erreur dans le code.

Quel IDE utilises-tu ?
Oui oui j'ai dit que l'erreur viendrait de chaîne (le curseur rouge est sur chaîne) J'ai finalement mis les parenthèses et guillemets et ça a marché. C'est bien sauf que j'ai pas très bien compris le principe (que vient faire la longueur par exemple)

J'utilise le idle 3.3
Messages postés
759
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
29 décembre 2013
125
Ah mais excuse moi, je n'avais pas compris en fait, parce que j'ai fait tourner ton code avec Python 2.7 dans lequel l'erreur est au niveau du + = alors que tu utilises Python 3 dans lequel effectivement, l'erreur se produit sur print chaine [i]
La raison est qu'en Python 3, print() est devenue une fonction, alors que dans les versions précédentes print est un statement qui n'a pas besoin de parenthèses.

Par contre, je ne vois pas ce que tu veux dire en disant que tu as mis des guillemets.

Et de quelle longueur parles-tu ?
Les guillemets après les parenthèses, comme j'en mets après chaque print:
 print  (" chaine [i] ")


Len dans while i < len (chaine) c'est bien longueur non ? Sinon c'est quoi et elle sert à quoi ?
Messages postés
759
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
29 décembre 2013
125
print (" chaine [i] ")
A moins que je ne connaisse pas une particularité de Python 3, cette instruction va simplement afficher la suite de caractères qui se trouve entre les guillemets.
Si tu veux afficher le caractère situé à l'index i dans l'objet de type string nommé chaine, il faut bien employer
print  (chaine [i])
Je ne vois pas ce que tu vas chercher avec tes guillemets.


Quant au code que t'a proposé Heliotte avec while, il est débile, et c'est pour ça que je ne l'ai pas regardé attentivement.
Bon, on va en finir avec ce sujet.

SI on veut employer while, c'est qu'on veut examiner chaque caractère l'un après l'autre. Ça ne rime donc à rien de répéter if car in chaine pour chaque caractère car c'est justement cette "méthode" qu'on ne veut pas suivre si on emploie while
Donc ce qu'il faut c'est vraiment comparer chaque caractère de la chaîne au caractère car , et quand on a son indice, le caractère s'obtient par chaine[i] , rien de nouveau, et on pour comparer c'est par un test d'égalité :
while i < len (chaine):
    if chaine[i]==car:
        introuvable = False
    print chaine [i]
    i + = 1


De plus, si on ne veut vraiment que savoir s'il y a le caractère car dans la chaîne, c'est inutile de continuer à explorer la suite de la chaîne quand on tombe sur un caractère de la chaîne égal à car. Dans ce cas, il faut faire cesser la boucle while par un break

while i < len (chaine):
    if chaine[i]==car:
        introuvable = False
        break
    print chaine [i]
    i + = 1
Messages postés
759
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
29 décembre 2013
125
chaine = 'le petit chaperon rouge'

print 'b' in chaine

print 'i' in chaine

for x in 'azerty':
    if x in chaine:
        print ('le caractere %r '
               'se trouve dans %r'
               % (x,chaine))
    else:
        print ('le caractere %r '
               'ne se trouve pas '
               'dans %r'
               % (x,chaine))


Le résultat:

False
True
le caractere 'a' se trouve dans 'le petit chaperon rouge'
le caractere 'z' ne se trouve pas dans 'le petit chaperon rouge'
le caractere 'e' se trouve dans 'le petit chaperon rouge'
le caractere 'r' se trouve dans 'le petit chaperon rouge'
le caractere 't' se trouve dans 'le petit chaperon rouge'
le caractere 'y' ne se trouve pas dans 'le petit chaperon rouge'


PS: regarde ce qu'il se passe si tu remplace %r par %s