Bibm@th

Forum de mathématiques - Bibm@th.net

Bienvenue dans les forums du site BibM@th, des forums où on dit Bonjour (Bonsoir), Merci, S'il vous plaît...

Vous n'êtes pas identifié(e).

#1 13-03-2019 14:31:10

Nelcar
Membre
Inscription : 05-03-2019
Messages : 38

python chaînes de caractères

Bonjour
j'ai un exercice toujours sur PYTHON qui est :
on veut programmer en langage Python une fonction qui a pour argument un mot ou une phrase et qui renvoie en sortie le nombre de fois où la lettre "e" se trouve dans ce mot ou cette phrase.
Dans la fonction ci-contre, len(ph) calcule la longueur de la chaîne de caractères ph.
1) compléter le programme ci-contre.
2) Modifier cette fonction afin qu'elle renvoie la fréquence de la lettre "a" dans la phrase ou le mot.
def edansphrase(ph):
   s=len(ph)
   n=0
   for i in range(......):
       if ph(i)=="e":
             ...........
   return(n)


pour le 1) j'ai mis for i in range(n,n+1):  et en-dessous de if j'ai mis e=e+1
pour le 2) je remplace dans le if "e" par "a" et en dessous a=a+1

Merci de votre réponse

Hors ligne

#2 13-03-2019 14:43:15

tibo
Membre actif
Inscription : 23-01-2008
Messages : 1 072

Re : python chaînes de caractères

Salut,

Pour commencer peux-tu identifier les différentes variables dans ton programme ? et à elles servent-elles ?
Par exemple ph est une variable de type chaîne de caractères (string en anglais), et représente la phrase que l'on veut étudier.
s aussi est une variable de type nombre entier (integer en anglais), mais à quoi sert-elle ?
Par contre "e" n'est pas une variable de ton programme. En effet, les guillemets autour signifient que c'est une chaîne de caractères mais pas une variable. Par conséquent, ta réponse e=e+1 ne peut pas être bonne, car la variable e n'existe pas.

J'attend ta liste de toutes les variables de ton programme.
Inutile d'aller plus loin tant que tu ne les as pas identifiées.

Dernière modification par tibo (13-03-2019 14:56:20)


A quoi sert une hyperbole?
----- A boire de l'hypersoupe pardi !

Hors ligne

#3 13-03-2019 15:00:51

Nelcar
Membre
Inscription : 05-03-2019
Messages : 38

Re : python chaînes de caractères

Re,
donc je pense que n est aussi une variable notant le nombre de e dans la phrase
et je pense aussi a "e" qui varie suivant le nombre de "e"
mais je galère énormément et au lycée nous ne manipulons pas et la prof ne donne aucune explication elle met la correction qu'elle a dans son livre et c'est tout.
j'essaye de moi même mais c'est très dur
Merci de ta réponse

Hors ligne

#4 13-03-2019 15:59:17

tibo
Membre actif
Inscription : 23-01-2008
Messages : 1 072

Re : python chaînes de caractères

Re,

Ok pour n, et c'est effectivement la variable qui va servir de compteur.

Par contre "e" n'en est pas une. "e" est juste le caractère que l'on doit compter. Impossible d'enregistrer la moindre valeur dedans.
Il ne faut pas confondre   e   et   "e"   . Les guillemets changent tout !

Il te reste une dernière variable à trouver.


A quoi sert une hyperbole?
----- A boire de l'hypersoupe pardi !

Hors ligne

#5 13-03-2019 19:11:32

Nelcar
Membre
Inscription : 05-03-2019
Messages : 38

Re : python chaînes de caractères

re,
alors je dirai que s est une variable.
Merci

Hors ligne

#6 13-03-2019 20:19:43

tibo
Membre actif
Inscription : 23-01-2008
Messages : 1 072

Re : python chaînes de caractères

Ok pour s, mais je te l'avais déjà donné post#2.

Il restait à trouver la variable i ; et elle sert "compter" à quel tour de boucle on se trouve :
Lors de l'instruction for i in range(0,5):, la variable i prend tout d'abord
- la valeur 0 pour le premier tour de boucle,
- puis la valeur 1 pour le deuxième tour de boucle,
- puis la valeur 2...
...
- et enfin la valeur 4 lors du cinquième et dernier tour.

Et cette variable est primordiale dans ton programme !
Elle va te permettre de tester chaque caractère de la phrase ph :
ph[0] est le premier caractère (et oui ! en programmation, on commence à compter à partir de 0 et non pas 1)
ph[1] est le deuxième caractère
etc...

Au passage, il y a une erreur dans le code : il faut écrire if ph[i]=="e" à la place de ph(i)=="e".

Avec ces informations, peux-tu essayer de répondre à la question 1) ?


A quoi sert une hyperbole?
----- A boire de l'hypersoupe pardi !

Hors ligne

#7 14-03-2019 08:40:29

Nelcar
Membre
Inscription : 05-03-2019
Messages : 38

Re : python chaînes de caractères

Bonjour,
pour la question 1 je mettrais donc
for i in range(1,ph+1);
j'espère que c'est bon
Merci de ta réponse

Hors ligne

#8 14-03-2019 09:49:28

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 12 992

Re : python chaînes de caractères

Bonjour,

Nelcar a écrit :

pour la question 1 je mettrais donc
for i in range(1,ph+1);
j'espère que c'est bon

Facile à savoir, il suffit de lire ce que tibo a écrit :

ph[0] est le premier caractère (et oui ! en programmation, on commence à compter à partir de 0 et non pas 1)
ph[1] est le deuxième caractère

Donc qu'en penses-tu ?

@+


Arx Tarpeia Capitoli proxima...

En ligne

#9 14-03-2019 11:32:32

Nelcar
Membre
Inscription : 05-03-2019
Messages : 38

Re : python chaînes de caractères

Re,
donc ça voudrait dire qu'il faut que je mette 0 au lieu de 1 soit
for i in range(0,ph+1);
ou
for i in range(ph0,ph+1):
Merci

Hors ligne

#10 14-03-2019 11:57:14

Nelcar
Membre
Inscription : 05-03-2019
Messages : 38

Re : python chaînes de caractères

sur la ligne suivante est-ce que je met :
s=s+1
j'ai essayé sur Python mais je n'arrive pas à faire un essai
merci

Hors ligne

#11 14-03-2019 17:43:55

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 12 992

Re : python chaînes de caractères

Bonsoir

>>> Phrase="Ceci est une phrase qui ne veut pas dire grand chose !"
Maintenant en voici les 4 premières lettres :
>>> print (Phrase[0],Phrase[1],Phrase [2],Phrase[3])
C e c i
Convaincue ?
Conclusion : Même si c'est de la programmation, il est nécessaire de lire les explications et de faire preuve de bon sens...
Et toi, tu lui réponds :

pour la question 1 je mettrais donc
for i in range(1,ph+1):
j'espère que c'est bon

Mets-toi à notre place : que répondrais-tu à ta question qui suit les indications de tibo ? Que c'est très difficile ?

Une boucle for utilise cette syntaxe :
for nom_indice in range(debut, fin+1,[pas ]):
Le pas par défaut (= si on le précise pas est 1. Mais rien ne t'empêche de compter mes tours de 2 en 2, 3 en 3...etc) est 1.
Donc, oui, tu démarre, ici, avec 0...
Démarrer c'est bien, mais il faut savoir où tu vas t'arrêter... Alors où ? Mais, à :  fin+1 !!!
C'est quand fin+1 ? Réponse  : quand tu es arrivée à la fin... de la phrase.
Ma phrase à une longueur de 54 caractères : voilà fin+1 et tu vas parcourir les caractères de la position n° 0 à la position n° 53 (de 0 à 53, il y a bien 54 caractères)...
Chercher :
>>> Phrase[54]
déclencherait un message d'erreur :
Traceback (most recent call last):
  File "<pyshell#44>", line 1, in <module>
    Phrase[54]
IndexError: string index out of range

qui te dit que l'index est hors limite, que tu cherches le caractère qui est après le dernier, c'est à dire après le "!"...
Alors que :
>>> Phrase[53]
!
>>>
Donc range, doit aller de 0 à la longueur de la phrase...
Avec ma phrase on aurait :
for i in range(0,54):
Mais, 54, c'est la longueur de ma phrase et ton prof veut que tu n'aies qu'à fournir n'importe quelle phrase à la fonction, et que ça marche...
En résumé, la fonction qu'on te demande d'écrire, tu pourras la passer à n'importe qui dans ta classe et ça va fonctionner...

Toi tu hésites de nouveau pour le début entre 0 et ph0....
Ah...
Alors, moi, je me pose la question bête suivante : qu'est-ce que c'est ce ph0 ?
Et je relis tous les posts qui précèdent et je ne trouve rien : ph0 n'existe pas...
Tu confonds peut-être avec ph[0] ?
Alors si c'est cela mets-toi dans la tête que range() est un compte-tours et que pour compter on utilise des nombres, souvent stockées dans des variables...

Ici, je répète : tu pars de la première lettre qui porte le numéro 0...

sur la ligne suivante est-ce que je met :
s=s+1

De nouveau, je me dis bêtement : qu'est-ce que c'est s ???
Je vais lire les postes et... je trouve !
Et je te réponds :  tu as oublié ? Fais comme moi, cherche ! Et tu verras que ce que tu proposes, ajouter 1 à s, n'as pas de sens ! Pour quoi faire d'ailleurs ?
Ton prof aurait dû vous apprendre ce qui est le b-a-ba de la programmation utiliser des noms de variables qui ont un rapport avec ce qu'elles vont contenir !
M'enfin, il a choisi s, on continue avec, sans discuter...

Allez, tu reprends...

@+


Arx Tarpeia Capitoli proxima...

En ligne

#12 15-03-2019 12:31:12

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 12 992

Re : python chaînes de caractères

Bonjour,

Je reprends en tâchant d'être plus synthétique.

Dans la boucle for, range(debut, fin, pas) est un compte-tours
il a un début, une fin et un pas (facultatif : absent il vaut 1, mais il peut valoir, 2, 3, 4....). entre les parenthèses de range() il y a soit des nombres entiers, soit des variables contenant des entiers soit les deux.
for i in range(0,8):
    print(i,end=" ")
donne :
0 1 2 3 4 5 6 7
>>> fin=11
>>> for i in range(0,fin):
        print(i,end=" ")
donne :
0 1 2 3 4 5 6 7 8 9 10

>>> for i in range(0,fin,2):
        print(i,end=" ")
donne ;
0 2 4 6 8 10...
Tu proposes
for i in range(0,ph+1)
ou
for i in range(ph0,ph+1):
Qu'est-ce que ph0 ? C'est une variable inconnue... Donc non...
Et tibo a dit qu'on commence à lre les lettres à partir de la position 0, donc  on retient :
for i in range(0,ph+1):
Mais 2e question : c'est quoi ph ?
Je retourne au pst #1 et je lis l'intitulé de la fonction :
def edansphrase(ph):
Et j'en déduis que la variable ph contient non pas un nombre qui serait égal à la position d'arrêt + 1, mais la phrase elle-même...
Par exemple, ph="Ceci est une phrase qui ne veut pas dire grand chose !"...
Quelle est la position d'arrêt ?
Post#1, je lis :
def edansphrase(ph):
    s=len(ph)  len est le mot-clé, qui vient de l'anglais length, longueur...
Donc,  s=len(ph) peut se traduire par :  on met dans la variable s la longueur de la phrase contenue dans la variable ph...
Avec mon exemple s=len(ph), s vaut 54...
Là est une petite subtilité pour un débutant !
54 caractères de la position 0 à la position 53.
Donc si on veut que la boucle s'arrête à 53, if faut que fin = 53 +1 =54 qui est justement ce que contient s.
La ligne de ta boucle lignes devient donc :
for i in range(0,s):

Et que doit faire la boucle ? Compter combien il y a de "e" dans la phrase...
Ce nombre sera augmenté de 1 à chaque fois que la boucle rencontrera un "e"...
Qui va compter ces "e" ?

Dans son post #3, Nelcar a écrit :

donc je pense que n est aussi une variable notant le nombre de "e" dans la phrase

Donc tu vois que tu le sais !
n doit valoir 0 avant de démarrer la boucle.. on arrive donc à :

def edansphrase(ph):
    s=len(ph)
    n=0
    for i in range(0,s):
        if......

Si quoi ?
- En français :
        si le caractère qui est la position i dans ph est égal à e alors :
            augmente de 1 la valeur de n
    renvoie-moi (n)
- En Python ?

@+


Arx Tarpeia Capitoli proxima...

En ligne

#13 15-03-2019 12:47:50

Nelcar
Membre
Inscription : 05-03-2019
Messages : 38

Re : python chaînes de caractères

Re,
voilà n=n+1
en tout j'ai
def edansphrase(ph):
    s=len(ph)
    n=0
    for i in range(s):
        if ph[ i]=="e":
            n=n+1
    return(n)

nombre_de_e=edansphrase("fenetre")
print(nombre_de_e)
dans la console j'ai 3

MERCI

Hors ligne

#14 15-03-2019 13:05:41

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 12 992

Re : python chaînes de caractères

Salut

C'est bon...
Et maintenant qu'on a bien réinventé la roue, ce qui vient d'être fait est déjà prévu dans python, regarde :
>>> ph="Ceci est une phrase qui ne veut pas dire grand chose !"
>>> ph.count("e")
8
^_^
Mais c'est très éducatif...

Bon, est-ce que tu commences à y voir plus clair ? As-tu tout compris ?

@+


Arx Tarpeia Capitoli proxima...

En ligne

#15 15-03-2019 13:22:48

Nelcar
Membre
Inscription : 05-03-2019
Messages : 38

Re : python chaînes de caractères

Re,
pour être honnête j'ai compris que partiellement et je galère encore.
Là je suis sur un autre exercice qui est là : http://www.bibmath.net/forums/viewtopic … 884#p75884

Dernière modification par yoshi (15-03-2019 13:27:04)

Hors ligne

#16 15-03-2019 13:27:29

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 12 992

Re : python chaînes de caractères

Re,

Si tu n'as pas tout compris, on y revient quand tu veux si tu dis ce qui te gêne...

@+


Arx Tarpeia Capitoli proxima...

En ligne

#17 15-03-2019 14:38:42

Nelcar
Membre
Inscription : 05-03-2019
Messages : 38

Re : python chaînes de caractères

Re,
ok ça marche
là je suis sur l'exercice suivant et en faisant des calculs je viens de comprendre un truc
c'est le n qui indique le nombre de fois que je pourrais diviser a/i avec un reste de O
j'ai compris la première partie de mon exercice que j'ai mis c'est déjà ça. Petit à petit ça va rentrer.

avant de mettre la suite de mon exercice je vais essayer de le faire
MERCI

Hors ligne

Réponse rapide

Veuillez composer votre message et l'envoyer
Nom (obligatoire)

E-mail (obligatoire)

Message (obligatoire)

Programme anti-spam : Afin de lutter contre le spam, nous vous demandons de bien vouloir répondre à la question suivante. Après inscription sur le site, vous n'aurez plus à répondre à ces questions.

Quel est le résultat de l'opération suivante (donner le résultat en chiffres)?
quatre-vingt dix-neuf plus quatre-vingt quatre
Système anti-bot

Faites glisser le curseur de gauche à droite pour activer le bouton de confirmation.

Attention : Vous devez activer Javascript dans votre navigateur pour utiliser le système anti-bot.

Pied de page des forums