pourquoi il faut que je fasse rx=rx.strip(tx) rx=rx.strip('n') print rx
et pas
rx=rx.strip(tx+'n') print rx
strip() n'enlève des caractères qu'aux extrémités, et *pas* à l'intérieur de la chaîne. strip('a').strip('b') n'est donc pas équivalent à strip('ab') (par exemple sur 'abax').
Il me semble que le piège le plus ... piégeux est dans l'interprêtation de la chaîne paramètre, qu'il faut lire comme une liste de caractères (chaînes de longueur unité, en Python ?). Cette chaîne est nommée /chars/ dans la documentation, d'ailleurs. Et également dans la compréhension de ce qui se passe précisément quand on applique deux fois strip(). 'abax'.strip('a').strip('b') enlève d'abord autant de caractères a successifs que possible aux deux bouts de 'abax' (ici, un seul, à gauche). Ensuite on applique strip('b') au résultat, c'est à dire qu'on enlève autant de caractères b successifs que possible aux deux bouts de 'bax', le résultat est donc 'ax'. 'abax'.strip('b').strip('a') donnerait un autre résultat ('bax'). 'abax'.strip('ab') ne fera qu'une passe. Enfin, une double passe, un coup à gauche, un coup à droite. Il enlève à chacun des bouts autant de caractères a ou b successifs que possible. C'est peut-être plus simple de le voir comme l'application récursive d'un strip() qui n'enlèverait qu'un caractère. 'abax'.strip('ba') donnera le même résultat, bien entendu.
-- Pierre Maurette
Alain Ketterlin :
remy <remy@fctpas.fr> writes:
il n'y a pas un petit probleme
Ah ben d'accord alors.
tx='0140r'
rx=tx+'n414000000010nn>'
pourquoi il faut que je fasse
rx=rx.strip(tx)
rx=rx.strip('n')
print rx
et pas
rx=rx.strip(tx+'n')
print rx
strip() n'enlève des caractères qu'aux extrémités, et *pas* à
l'intérieur de la chaîne. strip('a').strip('b') n'est donc pas
équivalent à strip('ab') (par exemple sur 'abax').
Il me semble que le piège le plus ... piégeux est dans l'interprêtation
de la chaîne paramètre, qu'il faut lire comme une liste de caractères
(chaînes de longueur unité, en Python ?). Cette chaîne est nommée
/chars/ dans la documentation, d'ailleurs. Et également dans la
compréhension de ce qui se passe précisément quand on applique deux
fois strip(). 'abax'.strip('a').strip('b') enlève d'abord autant de
caractères a successifs que possible aux deux bouts de 'abax' (ici, un
seul, à gauche). Ensuite on applique strip('b') au résultat, c'est à
dire qu'on enlève autant de caractères b successifs que possible aux
deux bouts de 'bax', le résultat est donc 'ax'.
'abax'.strip('b').strip('a') donnerait un autre résultat ('bax').
'abax'.strip('ab') ne fera qu'une passe. Enfin, une double passe, un
coup à gauche, un coup à droite. Il enlève à chacun des bouts autant de
caractères a ou b successifs que possible.
C'est peut-être plus simple de le voir comme l'application récursive
d'un strip() qui n'enlèverait qu'un caractère.
'abax'.strip('ba') donnera le même résultat, bien entendu.
pourquoi il faut que je fasse rx=rx.strip(tx) rx=rx.strip('n') print rx
et pas
rx=rx.strip(tx+'n') print rx
strip() n'enlève des caractères qu'aux extrémités, et *pas* à l'intérieur de la chaîne. strip('a').strip('b') n'est donc pas équivalent à strip('ab') (par exemple sur 'abax').
Il me semble que le piège le plus ... piégeux est dans l'interprêtation de la chaîne paramètre, qu'il faut lire comme une liste de caractères (chaînes de longueur unité, en Python ?). Cette chaîne est nommée /chars/ dans la documentation, d'ailleurs. Et également dans la compréhension de ce qui se passe précisément quand on applique deux fois strip(). 'abax'.strip('a').strip('b') enlève d'abord autant de caractères a successifs que possible aux deux bouts de 'abax' (ici, un seul, à gauche). Ensuite on applique strip('b') au résultat, c'est à dire qu'on enlève autant de caractères b successifs que possible aux deux bouts de 'bax', le résultat est donc 'ax'. 'abax'.strip('b').strip('a') donnerait un autre résultat ('bax'). 'abax'.strip('ab') ne fera qu'une passe. Enfin, une double passe, un coup à gauche, un coup à droite. Il enlève à chacun des bouts autant de caractères a ou b successifs que possible. C'est peut-être plus simple de le voir comme l'application récursive d'un strip() qui n'enlèverait qu'un caractère. 'abax'.strip('ba') donnera le même résultat, bien entendu.
Essayez: ty = '140r' # ou 'r041' ou '1r04' etc. print rx.strip(ty) Même sortie. Et c'est normal.
rx.strip(tx).strip('n') '414000000010nn>'
ok le premier a sorti '0140r' le deuxième a sortie 'n' et rien a la fin
Normal.
maintenant
rx.strip(tx+'n') '>'
la cmd a donc sortie 0140rn414000000010nn et cela me pose un petit pb de comprendre
tx+'n' == '0140rn' regardez list(tx+'n') et set(list(tx+'n'))
Reportez-vous à ma réponse précédente (confuse, j'en conviens), ou à la documentation de base:
<doc python 2.7> str.strip([chars]) Return a copy of the string with the leading and trailing characters removed. The chars argument is a string specifying the set of characters to be removed. If omitted or None, the chars argument defaults to removing whitespace. The chars argument is not a prefix or suffix; rather, all combinations of its values are stripped:
' spacious '.strip()
'spacious'
'www.example.com'.strip('cmowz.')
'example' </doc python 2.7>
Ici, rien ne sera strippé à droite (le '>' n'est pas dans le set). En revanche, tous les caractères à partir de la gauche et jusqu'au '>' non compris sont dans le set et seront donc strippés.
par contre
rx='abaaaaaedax' rx.strip('a') 'baaaaaedax'
ok la cmd a sorti a
rx.strip('ab') 'edax' ok la cmd a sorti tout les a et b
ce qui ne me pose pas de problème de compréhension
merci pour vos Lumière
remy
-- Pierre Maurette
remy :
non désoler mais je doit être boucher
tx
'0140r'
rx
'0140rn414000000010nn>'
rx.strip(tx)
'n414000000010nn>'
ok la cmd a sorti '0140r'
Essayez:
ty = '140r' # ou 'r041' ou '1r04' etc.
print rx.strip(ty)
Même sortie. Et c'est normal.
rx.strip(tx).strip('n')
'414000000010nn>'
ok le premier a sorti '0140r' le deuxième a sortie 'n'
et rien a la fin
Normal.
maintenant
rx.strip(tx+'n')
'>'
la cmd a donc sortie 0140rn414000000010nn
et cela me pose un petit pb de comprendre
tx+'n' == '0140rn'
regardez list(tx+'n') et set(list(tx+'n'))
Reportez-vous à ma réponse précédente (confuse, j'en conviens), ou à la
documentation de base:
<doc python 2.7>
str.strip([chars])
Return a copy of the string with the leading and trailing characters
removed. The chars argument is a string specifying the set of
characters to be removed. If omitted or None, the chars argument
defaults to removing whitespace. The chars argument is not a prefix or
suffix; rather, all combinations of its values are stripped:
' spacious '.strip()
'spacious'
'www.example.com'.strip('cmowz.')
'example'
</doc python 2.7>
Ici, rien ne sera strippé à droite (le '>' n'est pas dans le set).
En revanche, tous les caractères à partir de la gauche et jusqu'au '>'
non compris sont dans le set et seront donc strippés.
par contre
rx='abaaaaaedax'
rx.strip('a')
'baaaaaedax'
ok la cmd a sorti a
rx.strip('ab')
'edax'
ok la cmd a sorti tout les a et b
ce qui ne me pose pas de problème de compréhension
Essayez: ty = '140r' # ou 'r041' ou '1r04' etc. print rx.strip(ty) Même sortie. Et c'est normal.
rx.strip(tx).strip('n') '414000000010nn>'
ok le premier a sorti '0140r' le deuxième a sortie 'n' et rien a la fin
Normal.
maintenant
rx.strip(tx+'n') '>'
la cmd a donc sortie 0140rn414000000010nn et cela me pose un petit pb de comprendre
tx+'n' == '0140rn' regardez list(tx+'n') et set(list(tx+'n'))
Reportez-vous à ma réponse précédente (confuse, j'en conviens), ou à la documentation de base:
<doc python 2.7> str.strip([chars]) Return a copy of the string with the leading and trailing characters removed. The chars argument is a string specifying the set of characters to be removed. If omitted or None, the chars argument defaults to removing whitespace. The chars argument is not a prefix or suffix; rather, all combinations of its values are stripped:
' spacious '.strip()
'spacious'
'www.example.com'.strip('cmowz.')
'example' </doc python 2.7>
Ici, rien ne sera strippé à droite (le '>' n'est pas dans le set). En revanche, tous les caractères à partir de la gauche et jusqu'au '>' non compris sont dans le set et seront donc strippés.
par contre
rx='abaaaaaedax' rx.strip('a') 'baaaaaedax'
ok la cmd a sorti a
rx.strip('ab') 'edax' ok la cmd a sorti tout les a et b
ce qui ne me pose pas de problème de compréhension
merci pour vos Lumière
remy
-- Pierre Maurette
remy
Le 19/01/2012 15:44, Pierre Maurette a écrit :
Return a copy of the string with the leading and trailing characters removed. The chars argument is a string specifying the set of character s to be removed. If omitted or None, the chars argument defaults to removing whitespace. The chars argument is not a prefix or suffix; rather, all combinations of its values are stripped:
combinaisons de ses valeurs et oui merci je me coucherai moins con puisque dans
0140rn414000000010nn>
si je vire 0 ,1,4,0,r,et n il ne me reste plus que >
remy
-- http://remyaumeunier.chez-alice.fr/
Le 19/01/2012 15:44, Pierre Maurette a écrit :
Return a copy of the string with the leading and trailing characters
removed. The chars argument is a string specifying the set of character s
to be removed. If omitted or None, the chars argument defaults to
removing whitespace. The chars argument is not a prefix or suffix;
rather, all combinations of its values are stripped:
combinaisons de ses valeurs et oui merci je me coucherai moins con
puisque dans
0140rn414000000010nn>
si je vire 0 ,1,4,0,r,et n il ne me reste plus que >
Return a copy of the string with the leading and trailing characters removed. The chars argument is a string specifying the set of character s to be removed. If omitted or None, the chars argument defaults to removing whitespace. The chars argument is not a prefix or suffix; rather, all combinations of its values are stripped:
combinaisons de ses valeurs et oui merci je me coucherai moins con puisque dans
0140rn414000000010nn>
si je vire 0 ,1,4,0,r,et n il ne me reste plus que >