Jump to content

Retour à la semaine 6


valouz
Go to solution Solved by Pitchounou,

Recommended Posts

Bonsoirrrr,

Bon les révisions arrivent (et d'ailleurs bon courage à tout le monde!!!!) du coup petite question sur la semaine 6. 

Alors, juste pourquoi dans ce programme on fait -ord("a")? https://www.casimages.com/i/210306112844254073.png.html

Si on ne le fait pas je ne vois pas ce que ça change. 

Merciiiii d'avance !!!! 😘

Link to comment
Share on other sites

  • Solution

Salut salut @valouz ! Je me permets de répondre avant @DuTACKauTac pour une fois, c'est tout simplement pour pouvoir avoir la position de la lettre dans l'alphabet !

 

En fait tu as crée un tableau quand tu as écrit "nbOccurences = [0]*26", qui a 26 colonnes (en partant de 0). Seulement python utilise UNICODE, donc en fait par exemple si tu fais ord("a"), ça te transforme la lettre en un nombre (c'est l'inverse de chr oups déso pour avant), et dans Unicode la valeur a minuscule correspond au nombre 97. Donc si tu veux avoir la vraie position de "a" dans ton alphabet, c'est la première lettre, tu fais ord("a")-ord("a") ce qui te fait 0 (puisqu'en informatique on compte toujours à partir de 0, donc c'est bien la première lettre)

Et ainsi de suite pour toutes les lettres. 

 

Autrement dit, si jamais tu le mets pas qu'est ce qui se passe : et bien ton programme fait ord de n'importe quelle lettre, par exemple "d", il trouve le nombre 100, donc numlettre dans ton programme prend la valeur 100, la ligne d'après correspond à rajouter 1 dans le tableau à la colonne qui correspond à la lettre. Problème : ici le nombre qui correspond à ta lettre c'est 100, et tu n'as que 26 colonnes. Donc pour ramener les lettres aux positions "normales" c'est à dire 0,1,2 etc. jusqu'à 25, chaque fois que tu as une lettre tu soustrais par la première lettre (a) pour obtenir la position de cette lettre dans l'alphabet et pas la valeur UNICODE. 

 

Je te fais un exemple : 

 

Tu as ton tableau nbOccurences avec tes 26 0 : 0 0 0 0 0 etc. 

On prend le mot "canard". 

On part, pos = 0, num lettre prend la valeur ord(lettre à la position 0)- ord("a"), c'est à dire ord("c")-ord("a") = 2 (ce qui correspond bien, en sachant que nous on compte l'alphabet en disant a=1, b=2 c=3, mais eux partent de 0 donc a=0, b=1, c=2 : au niveau des positions, que l'on parte de 0 ou de 1 la lettre "c" est bien en 3ème position dans l'alphabet !). 

Donc à partir de là tu stock dans la colonne 2, c'est à dire en réalité la 3ème colonne de ton tableau, +1, pour dire que tu as déjà rencontré une fois la 3ème lettre de l'alphabet, c'est à dire c. 

 

C'est plus clair ?

 

 

Edited by Pitchounou
Link to comment
Share on other sites

il y a une heure, Pitchounou a dit :

C'est plus clair ?

Salut ! C'est super clair merci beaucoup @Pitchounou.

 

il y a une heure, Pitchounou a dit :

Seulement python utilise UNICODE, donc en fait par exemple si tu fais ord("a"), ça te transforme la lettre en un nombre (c'est l'inverse de int), et dans Unicode la valeur a minuscule correspond au nombre 97.

D'ailleurs je me posais la question, donc ord ça renvoie le numéro de la lettre dans UNICODE et int("97") j'imagine que ça renvoie A donc le contraire comme tu dis. 

Mais du coup, quelle est la différence entre int et str ? 

 

Et aussi si j'envoies ord("9") par exemple, est-ce que ça va me renvoyer le chiffre 9 pour pouvoir le multiplier à un autre nombre par exemple, donc est-ce que ça lui enlève l'aspect caractère pour le "transformer en un vrai nombre" et faire des calculs ? 

 

Merci beaucouppppp !! 🙂 

Link to comment
Share on other sites

  • Ancien du Bureau
il y a 32 minutes, valouz a dit :

int("97")

Attention ! 

Int("97") renvoie 97 

chr(97) renvoie "a"

 

int est l'inverse de str, il te permet de passer d'une suite de caractères numériques "1234" à une valeur numérique 1234

ord est l'inverse de chr, il te permet de passer d'un caractère alphanumérique "a" à la valeur numérique qui correspond à son Unicode : 97

 

ord("9") ne renvoie pas 9 !

Par contre, les nombres sont codés dans l'ordre 

c'est à dire que tu peux trouver ord("4") - ord("2") = 2, car la différence est conservée 

Par contre, ord("4")*ord("2") =/= 8 ! 

Edited by DuTACKauTac
Link to comment
Share on other sites

il y a une heure, valouz a dit :

D'ailleurs je me posais la question, donc ord ça renvoie le numéro de la lettre dans UNICODE et int("97") j'imagine que ça renvoie A donc le contraire comme tu dis. 

Mais du coup, quelle est la différence entre int et str ? 

@valouz non ! J'ai écrit trop vite, comme dit @DuTACKauTac l'inverse de int est str, l'inverse de ord est bien chr je vais modifier mon message pour éviter la confusion déso ! 

Link to comment
Share on other sites

il y a une heure, DuTACKauTac a dit :

ord("9") ne renvoie pas 9 ! 

@DuTACKauTacmerciiii beaucoup ! 

Par exemple si on a 2 et 9 sous la forme de chaîne de caractères et que je veux faire 2 * 9 alors il me faut faire : 

int("2") * int("9") = 2 * 9 = 18 

C'est ça ? 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...