Chaine de caractères

Résolu/Fermé
haikei00X Messages postés 67 Date d'inscription dimanche 20 juillet 2014 Statut Membre Dernière intervention 11 janvier 2016 - 25 oct. 2014 à 18:12
haikei00X Messages postés 67 Date d'inscription dimanche 20 juillet 2014 Statut Membre Dernière intervention 11 janvier 2016 - 26 oct. 2014 à 00:31
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 :
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:

2 réponses

ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 228
Modifié par gravgun le 25/10/2014 à 18:26
'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
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
1
haikei00X Messages postés 67 Date d'inscription dimanche 20 juillet 2014 Statut Membre Dernière intervention 11 janvier 2016 3
26 oct. 2014 à 00:31
Merci gravgun pour ces explications, je comprend mieux maintenant .^_^
0