|
|
|
|
||||||
![]() |
|
|
LinkBack | Outils de la discussion |
|
|
#1 |
|
Messages: n/a
Hébergeur: |
dans le livre de swinnen l exercice suivant est proposé :
5.9. Écrivez un script qui recopie une chaîne (dans une nouvelle variable) en l'inversant. Ainsi par exemple, « zorglub » deviendra « bulgroz ». La solution donnée par l'auteur : #! /usr/bin/env python # -*- coding: Latin-1 -*- # Inversion d'une chaîne de caractères # Chaîne fournie au départ : ch = raw_input ('entrer un mot: ' ) lc = len(ch) # nombre de caractères total i = lc - 1 # le traitement commencera à partir du dernier caractère nch = "" # nouvelle chaîne à construire (vide au d épart) while i >= 0: nch = nch + ch[i] i = i - 1 # Affichage : print nch ca marche mais je ne comprend pas pourquoi la variable "i" est encapsulé la valeur "lc - 1" et non pourquoi simplement la valeur "lc " , j'avais fait un script similaire avant de regarder la solution mais je n'avais pas diminuer la valeur lc de 1 . Il est écrit que c'est pour commencer par le dernier caractère , mais si l'on enlève 1 , ne commence t-on pas avec l'avant dernier caractère ? output erreur sans la valeur lc - 1 : me@robby:~/python.swinnen/solutions$ python exercice_5_09.py entrer un mot: hello Traceback (most recent call last): File "exercice_5_09.py", line 12, in ? nch = nch + ch[i] IndexError: string index out of range quelqu'un peut m'expliquer ? j'ai déjà chercher le nom de l erreur mais elle pas trop compréhensible a ce niveau .. merci |
|
|
|
#2 |
|
Messages: n/a
Hébergeur: |
Eastwind - Vent d Est wrote:
> ca marche mais je ne comprend pas pourquoi la variable "i" est > encapsulé la valeur "lc - 1" et non pourquoi simplement la valeur "lc > " , j'avais fait un script similaire avant de regarder la solution > mais je n'avais pas diminuer la valeur lc de 1 . Il est écrit que > c'est pour commencer par le dernier caractère , mais si l'on enlève > 1 , ne commence t-on pas avec l'avant dernier caractère ? Non. > quelqu'un peut m'expliquer ? j'ai déjà chercher le nom de l erreur > mais elle pas trop compréhensible a ce niveau .. In [2]: chaine="abcdef" In [3]: len(chaine) Out[3]: 6 In [4]: chaine[0] Out[4]: 'a' In [5]: chaine[1] Out[5]: 'b' In [6]: chaine[2] Out[6]: 'c' In [7]: chaine[5] Out[7]: 'f' In [8]: chaine[6] <type 'exceptions.IndexError'>: string index out of range |
|
|
|
#3 |
|
Messages: n/a
Hébergeur: |
Eastwind - Vent d Est a écrit :
> dans le livre de swinnen l exercice suivant est proposé : > > 5.9. Écrivez un script qui recopie une chaîne (dans une nouvelle > variable) en l'inversant. > Ainsi par exemple, « zorglub » deviendra « bulgroz ». > > La solution donnée par l'auteur : > > #! /usr/bin/env python > # -*- coding: Latin-1 -*- > > # Inversion d'une chaîne de caractères > > # Chaîne fournie au départ : > ch = raw_input ('entrer un mot: ' ) > lc = len(ch) # nombre de caractères total > i = lc - 1 # le traitement commencera à partir du dernier > caractère > nch = "" # nouvelle chaîne à construire (vide au d épart) > while i >= 0: > nch = nch + ch[i] > i = i - 1 > # Affichage : > print nch > > ca marche mais je ne comprend pas pourquoi la variable "i" est > encapsulé la valeur "lc - 1" et non pourquoi simplement la valeur "lc > " , j'avais fait un script similaire avant de regarder la solution > mais je n'avais pas diminuer la valeur lc de 1 . Il est écrit que > c'est pour commencer par le dernier caractère , mais si l'on enlève > 1 , ne commence t-on pas avec l'avant dernier caractère ? Dans l'écrasante majorité des langages de programmation, on compte à partir de zéro. Donc, le premier élément d'une séquence (chaine, liste etc) est à l'index zéro, et le dernier élément à l'index longueur(sequence) - 1. > output erreur sans la valeur lc - 1 : > > me@robby:~/python.swinnen/solutions$ python exercice_5_09.py > entrer un mot: hello > Traceback (most recent call last): > File "exercice_5_09.py", line 12, in ? > nch = nch + ch[i] > IndexError: string index out of range Bin oui, forcément. >>> ch = "abcde" >>> len(ch) 5 >>> ch[0] 'a' >>> ch[4] 'e' >>> ch[len(ch)] Traceback (most recent call last): File "<stdin>", line 1, in <module> IndexError: string index out of range >>> > quelqu'un peut m'expliquer ? j'ai déjà chercher le nom de l erreur > mais elle pas trop compréhensible a ce niveau .. Ca veut dire que l'index que tu demandes n'existe pas dans la séquence en question. Accessoirement, bien qu'instructif du point de vue algorithmique de base (et c'est le but de l'exercice), le code en question n'est absolument pas pythonesque. La solution canonique (pour une chaine) est: nch = ch[::-1] Je te laisse parcourir la doc pour trouver l'explication !-) |
|
|
|
#4 |
|
Messages: n/a
Hébergeur: |
Bonjour,
> Dans l'écrasante majorité des langages de programmation, on compte à > partir de zéro. Donc, le premier élément d'une séquence (chaine, liste > etc) est à l'index zéro, et le dernier élément à l'index > longueur(sequence) - 1. J'imagine que tu parles des langages actuels, et que tu ne tiens pas compte des innombrables langages propriétaires qui existaient il y a une vingtaine d'années... |
|
|
|
#5 |
|
Messages: n/a
Hébergeur: |
jean-michel bain-cornu a écrit :
> Bonjour, >> Dans l'écrasante majorité des langages de programmation, on compte à >> partir de zéro. Donc, le premier élément d'une séquence (chaine, liste >> etc) est à l'index zéro, et le dernier élément à l'index >> longueur(sequence) - 1. > > J'imagine que tu parles des langages actuels, Pas nécessairement - à moins que tu ne compte C parmi les langages "actuels" !-) Par contre: > et que tu ne tiens pas > compte des innombrables langages propriétaires qui existaient il y a une > vingtaine d'années... Non, bien sûr. |
|
|
|
#6 |
|
Messages: n/a
Hébergeur: |
>>> Dans l'écrasante majorité des langages de programmation, on compte à
>>> partir de zéro. Donc, le premier élément d'une séquence (chaine, >>> liste etc) est à l'index zéro, et le dernier élément à l'index >>> longueur(sequence) - 1. >> >> J'imagine que tu parles des langages actuels, > > Pas nécessairement - à moins que tu ne compte C parmi les langages > "actuels" !-) Je ne saurais trop que dire ; C est universellement utilisé, mais franchement pas pratique, en tout cas pour l'usage que j'ai d'un langage de programmation. Perso, ça fait 3 ou 4 ans que je n'y ai pas touché, ce n'est donc plus très actuel pour moi :-) D'ailleurs, j'attendrais avec un grand intérêt de voir un OS programmé en python. A+ jm |
|
|
|
#7 |
|
Messages: n/a
Hébergeur: |
jean-michel bain-cornu a écrit :
>>>> Dans l'écrasante majorité des langages de programmation, on compte à >>>> partir de zéro. Donc, le premier élément d'une séquence (chaine, >>>> liste etc) est à l'index zéro, et le dernier élément à l'index >>>> longueur(sequence) - 1. >>> >>> J'imagine que tu parles des langages actuels, >> >> Pas nécessairement - à moins que tu ne compte C parmi les langages >> "actuels" !-) > > Je ne saurais trop que dire ; C est universellement utilisé, mais > franchement pas pratique, en tout cas pour l'usage que j'ai d'un langage > de programmation. > Perso, ça fait 3 ou 4 ans que je n'y ai pas touché, ce n'est donc plus > très actuel pour moi :-) <aol />. Mais bon, ce que je voulais dire, c'est que ce n'est pas franchement une nouveauté comme langage !-) |
|
|
|
#8 |
|
Messages: n/a
Hébergeur: |
Bonsoir !
Je profite de cet appel à troller... > des innombrables langages propriétaires qui existaient il y a > une vingtaine d'années... AMHA, il n'y a jamais eu autant de langages propriétaires qu'actuellement. > des langages actuels Cela sous-entend que commencer à compter à zéro est une notion "actuelle", plus moderne. Mais cela est loin d'être évident. On a pris l'habitude de faire avec, ce qui n'implique pas que ce soit mieux. -- @-salutations Michel Claveau |
|
![]() |
| Outils de la discussion | |
|
|