Chaine de caractères
Résolu
haikei00X
Messages postés
67
Date d'inscription
Statut
Membre
Dernière intervention
-
haikei00X Messages postés 67 Date d'inscription Statut Membre Dernière intervention -
haikei00X Messages postés 67 Date d'inscription Statut Membre Dernière intervention -
Bonjour à tous.Je suis débutante en python et j'ai une question sur les chaines de caractères.
Supposons qu'on a définit une chaine ch = "hello" et qu'on veut la modifier en échangeant le 'h' par le 'b'. Je sais qu'on peut faire ça :
Le résultat du code serait "bello" .
Mais le problème c'est que si je fais
j'aurais la première lettre 'h' qui s'affiche ,alors pourquoi ne pas faire tout simplement ch[0] = 'b' ?!!
Or cela génère une erreur !!
Est-ce que quelqu'un peut m'expliquer pourquoi ?
MERCI
Supposons qu'on a définit une chaine ch = "hello" et qu'on veut la modifier en échangeant le 'h' par le 'b'. Je sais qu'on peut faire ça :
ch = "hello" ch = 'b' + ch[1:5] print ch
Le résultat du code serait "bello" .
Mais le problème c'est que si je fais
print ch[0]
j'aurais la première lettre 'h' qui s'affiche ,alors pourquoi ne pas faire tout simplement ch[0] = 'b' ?!!
Or cela génère une erreur !!
Est-ce que quelqu'un peut m'expliquer pourquoi ?
MERCI
A voir également:
- Chaine de caractères
- Caractères ascii - Guide
- Caractères spéciaux - Guide
- Chaine tnt gratuite sur mobile - Guide
- Plus de chaine tv - Guide
- Chaine radio - Télécharger - Médias et Actualité
2 réponses
'lut, ça génère une erreur car, en Python (2 ou 3), les chaines de caractère sont dites immuables: on ne peut pas modifier leur contenu comme ça.
En effet, en mémoire, Python garde un string intacte, et si on le modifie (par ex avec "a"+"b"), Python créé un 2e string en mémoire, résultat de l'opération dessus.
Il est possible de faire ce que tu proposes si on se sert d'un
En Python 3:
from human import idiocy
del idiocy
En effet, en mémoire, Python garde un string intacte, et si on le modifie (par ex avec "a"+"b"), Python créé un 2e string en mémoire, résultat de l'opération dessus.
Il est possible de faire ce que tu proposes si on se sert d'un
bytearray, qui a l'avantage d'être modifiable mais ne gère pas automatiquement les caractères multi-octets (UTF-8/autre); que l'on reconvertit après en string. Toutefois si tu restes collé aux lettres du code ASCII (non étendu), ça marche bien; voici un exemple:
En Python 3:
ch = bytearray("hello", "ascii") ch[0] = ord('b') # Le ord() est nécessaire pour obtenir un entier print(ch.decode("ascii"))Et en Python 2:
ch = bytearray("hello") ch[0] = ord('b') # Le ord() est nécessaire pour obtenir un entier print str(ch)
from human import idiocy
del idiocy