valouz Posted March 6, 2021 Posted March 6, 2021 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 !!!! Quote
Solution Pitchounou Posted March 7, 2021 Solution Posted March 7, 2021 (edited) 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 March 7, 2021 by Pitchounou valouz, Shrex and Sans-Visage 1 1 1 Quote
valouz Posted March 7, 2021 Author Posted March 7, 2021 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 !! Quote
Ancien du Bureau Sans-Visage Posted March 7, 2021 Ancien du Bureau Posted March 7, 2021 (edited) 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 March 7, 2021 by DuTACKauTac Pitchounou 1 Quote
Pitchounou Posted March 7, 2021 Posted March 7, 2021 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 ! Sans-Visage 1 Quote
valouz Posted March 7, 2021 Author Posted March 7, 2021 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 ? Quote
Ancien du Bureau Sans-Visage Posted March 7, 2021 Ancien du Bureau Posted March 7, 2021 il y a 26 minutes, valouz a dit : C'est ça ? Exact ! valouz 1 Quote
Recommended Posts
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.