Lesson 5
Cordes
1. Cordes
Une chaîne peut être lue à partir de l'entrée standard en utilisant la fonction input()
ou définie en guillemets simples ou doubles. Deux chaînes peuvent être concaténées, et nous pouvons aussi répéter une chaîne n fois en la multipliant par un entier:
print('>_< ' * 5) # > _ <> _ <> _ <> _ <> _ <
Une chaîne en Python est une séquence de caractères. La fonction len(some_string)
renvoie le nombre de caractères présents dans une chaîne:
print(len('abcdefghijklmnopqrstuvwxyz')) # 26
Chaque objet en Python peut être converti en chaîne en utilisant la fonction str(some_object)
. Nous pouvons donc convertir des nombres en chaînes:
s = str(2 ** 100) print(s) # 1267650600228229401496703205376 print(len(s)) # 31
2. Tranches: un seul caractère
Une tranche donne à partir de la chaîne donnée un caractère ou un fragment: sous-chaîne ou sous-séquence.
Il y a trois formes de tranches. La forme la plus simple de la tranche: une tranche de caractère S[i]
donne i
ème caractère de la chaîne. Nous comptons les caractères à partir de 0.
,
,
,
,
,
. Notez qu'en Python il n'y a pas de type séparé pour les caractères de la chaîne. S[i]
aussi le type str
, tout comme la chaîne source.
Le nombre i
dans S[i]
s'appelle un index .
Si vous spécifiez un index négatif, il est compté à partir de la fin, en commençant par le nombre -1
. C'est-à-dire
,
,
,
,
.
Résumons-le dans le tableau:
Chaîne S | H | e | l | l | o |
---|---|---|---|---|---|
Indice | S [0] | S [1] | S [2] | S [3] | S [4] |
Indice | S [-5] | S [-4] | S [-3] | S [-2] | S [-1] |
Si l'index dans la tranche S[i]
est supérieur ou égal à len(S)
, ou inférieur à -len(S)
, l'erreur suivante est provoquée IndexError: string index out of range
.
3. Tranches: sous-chaîne
Tranche avec deux paramètres S[a:b]
renvoie la sous-chaîne de longueur b - a
, en commençant par le caractère à l'index a
et qui dure jusqu'au caractère à l'index b
, sans inclure le dernier. Par exemple, S[1:4] == 'ell'
, et vous pouvez obtenir la même sous-chaîne en utilisant S[-4:-1]
. Vous pouvez mélanger des index positifs et négatifs dans la même tranche, par exemple, S[1:-1]
est une sous-chaîne sans le premier et le dernier caractère de la chaîne (la tranche commence par le caractère avec index 1 et se termine par un index de -1, ne l'incluant pas).
Les tranches avec deux paramètres ne provoquent jamais IndexError
. Par exemple, pour S == 'Hello'
la tranche S[1:5]
retourne la chaîne 'ello'
, et le résultat est le même même si le deuxième index est très grand, comme S[1:100]
.
Si vous omettez le deuxième paramètre (mais conservez le signe deux-points), la tranche passe à la fin de la chaîne. Par exemple, pour supprimer le premier caractère de la chaîne (son index est 0), prenez la tranche S[1:]
. De même si vous omettez le premier paramètre, alors Python prend la tranche du début de la chaîne. Autrement dit, pour supprimer le dernier caractère de la chaîne, vous pouvez utiliser la tranche S[:-1]
. La tranche S[:]
correspond à la chaîne S
elle-même.
4. Tranches: immuabilité des cordes
Toute tranche d'une chaîne crée une nouvelle chaîne et ne modifie jamais celle d'origine. En Python, les chaînes sont immuables, c'est-à-dire qu'elles ne peuvent pas être modifiées en tant qu'objets. Vous pouvez uniquement affecter la variable à la nouvelle chaîne, mais l'ancienne reste en mémoire.
En fait, en Python, il n'y a pas de variables. Il n'y a que les noms associés à des objets. Vous pouvez d'abord associer un nom à un objet, puis - avec un autre. Plusieurs noms peuvent être associés à un même objet.
Montrons que:
s = 'Hello' t = s # s et t pointent vers la même chaîne t = s[2:4] # maintenant t pointe vers la nouvelle chaîne 'll' print(s) # affiche 'Hello' car s ne change pas print(t) # imprime 'll'
5. Tranches: sous-séquence
Si vous spécifiez une tranche avec trois paramètres S[a:b:d]
, le troisième paramètre spécifie l'étape, comme pour la range()
fonctions range()
. Dans ce cas, seuls les caractères avec l'index suivant sont pris: a
a + d
, a + 2 * d
et ainsi de suite, jusqu'à et n'incluant pas le caractère avec l'index b
. Si le troisième paramètre est égal à 2, la tranche prend tous les deuxièmes caractères, et si le pas de la tranche est égal à -1
, les caractères vont dans l'ordre inverse. Par exemple, vous pouvez inverser une chaîne comme ceci: S[::-1]
. Voyons voir les exemples:
s = 'abcdefg' print(s[1]) print(s[-1]) print(s[1:3]) print(s[1:-1]) print(s[:3]) print(s[2:]) print(s[:-1]) print(s[::2]) print(s[1::2]) print(s[::-1])
range()
fonctions range()
:s = 'abcdefghijklm' print(s[0:10:2]) for i in range(0, 10, 2): print(i, s[i])
6. Méthodes de chaîne: find () et rfind ()
Une méthode est une fonction liée à l'objet. Lorsque la méthode est appelée, la méthode est appliquée à l'objet et effectue des calculs liés à celui-ci. Les méthodes sont invoquées sous le nom object_name.method_name(arguments)
. Par exemple, dans s.find("e")
la méthode string find()
est appliquée à la chaîne s
avec un argument "e"
.
La méthode find()
recherche une sous-chaîne, passée en argument, dans la chaîne sur laquelle elle est appelée. La fonction renvoie l'index de la première occurrence de la sous-chaîne. Si la sous-chaîne est introuvable, la méthode renvoie -1.
s = 'Hello' print(s.find('e')) # 1 print(s.find('ll')) # 2 print(s.find('L')) # -1
De même, la méthode rfind()
renvoie l'indice de la dernière occurrence de la sous-chaîne.
s = 'abracadabra' print(s.find('b')) # 1 print(s.rfind('b')) # 8
Si vous appelez find()
avec trois arguments s.find(substring, left, right)
, la recherche est effectuée dans la section s[left:right]
. Si vous spécifiez seulement deux arguments, comme s.find(substring, left)
, la recherche est effectuée dans la tranche s[left:]
, c'est-à-dire en commençant par le caractère à l'extrémité left
de la chaîne. La méthode s.find(substring, left, right)
renvoie l'index absolu, par rapport à l'ensemble de la chaîne s
, et non à la tranche.
s = 'my name is bond, james bond, okay?' print(s.find('bond')) # 11 print(s.find('bond', 12)) # 23
7. Méthodes de chaîne: replace ()
La méthode replace()
remplace toutes les occurrences d'une sous-chaîne donnée par une autre. Syntaxe: s.replace(old, new)
prend la chaîne S
et remplace toutes les occurrences de sous-chaîne old
par la sous-chaîne new
. Exemple:
print('a bar is a bar, essentially'.replace('bar', 'pub')) # 'un pub est un pub, essentiellement'
On peut passer le troisième argument count
, comme ceci: s.replace(old, new, count)
. Il fait replace()
pour remplacer seulement les premières occurrences de count
, puis s'arrête.
print('a bar is a bar, essentially'.replace('bar', 'pub', 1)) # 'un pub est un bar, essentiellement'
8. Méthodes de chaîne: count ()
Cette méthode compte le nombre d'occurrences d'une chaîne dans une autre chaîne. La forme la plus simple est celle-ci: s.count(substring)
. Seules les occurrences sans chevauchement sont prises en compte:
print('Abracadabra'.count('a')) # 4 print(('aaaaaaaaaa').count('aa')) # 5
Si vous spécifiez trois paramètres
, le compte est exécuté dans la tranche s[left:right]
.