PHWinfo banniere

Titres
PORTAIL ANNUAIRE ARTICLES COMPARATEUR HÉBERGEURS DEVIS FORUMS RÉDUCTEUR D'URL
Précédent   PHWinfo > Autres forums > Forum Programmation & Conception > fr.comp.lang.python > explication source inversion de chaine ?
S'inscrire FAQ Membres Recherche Messages du jour Marquer les forums comme lus
explication source inversion de chaine ?

Réponse
 
LinkBack Outils de la discussion
Vieux 27/09/2007, 10h23   #1
Eastwind - Vent d Est
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut explication source inversion de chaine ?

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

  Réponse avec citation
Vieux 27/09/2007, 10h41   #2
Mihamina (R12y) Rakotomandimby
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: explication source inversion de chaine ?

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
  Réponse avec citation
Vieux 27/09/2007, 10h47   #3
Bruno Desthuilliers
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: explication source inversion de chaine ?

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 !-)
  Réponse avec citation
Vieux 27/09/2007, 11h38   #4
jean-michel bain-cornu
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: explication source inversion de chaine ?

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...
  Réponse avec citation
Vieux 27/09/2007, 12h05   #5
Bruno Desthuilliers
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: explication source inversion de chaine ?

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.
  Réponse avec citation
Vieux 27/09/2007, 15h27   #6
jean-michel bain-cornu
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: explication source inversion de chaine ?

>>> 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
  Réponse avec citation
Vieux 27/09/2007, 16h48   #7
Bruno Desthuilliers
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: explication source inversion de chaine ?

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 !-)
  Réponse avec citation
Vieux 27/09/2007, 18h30   #8
MC
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: explication source inversion de chaine ?

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


  Réponse avec citation
Réponse


Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are oui
Pingbacks are oui
Refbacks are oui


Fuseau horaire GMT +1. Il est actuellement 13h13.


Édité par : vBulletin® version 3.7.2
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0 RC5 Tous droits réservés.
Version française #16 par l'association vBulletin francophone
PHWinfo est un site Éducation Sans Frontières
Ad Management by RedTyger
©Tous droits réservés par les parties respectives
Page generated in 0,16047 seconds with 16 queries