%% nav-debut : généré par gen_navigation.py, ne pas modifier à la main %%
> [!nav]
> ↩ [[Code et Développement/Programmation/Lecture de Code - Python/Lecture de code - Python|Accueil · Lecture de code - Python]]
>
> | [[Code et Développement/Programmation/Lecture de Code - Python/05_boucle_while\|← Boucle `while`]] | [[Code et Développement/Programmation/Lecture de Code - Python/07_listes\|Listes →]] |
> |:---|---:|
%% nav-fin %%
# Chaînes de caractères
## Bases
```python
s = "bonjour"
len(s) # vaut 7 (nombre de caractères)
s[0] # vaut 'b' (premier caractère)
s[-1] # vaut 'r' (dernier caractère)
s[1:4] # vaut 'onj' (indices 1, 2, 3)
```
Les indices commencent à **0**. Pour les tranches complètes (pas, indices négatifs, sous-séquences), voir [[Code et Développement/Programmation/Lecture de Code - Python/08_tranches_sequences|Tranches et séquences]].
---
## Parcours
```python
s = input() # entrée : abc
for c in s: # parcours direct
print(c) # affiche a, puis b, puis c
for i in range(len(s)): # parcours par indice
print(i, s[i]) # affiche 0 a, puis 1 b, puis 2 c
```
---
## Méthodes utiles
| Méthode | Résultat | Exemple |
|---|---|---|
| `s.upper()` | tout en majuscules | `"abc".upper()` → `"ABC"` |
| `s.lower()` | tout en minuscules | `"ABC".lower()` → `"abc"` |
| `s.strip()` | supprime espaces de bord | `" ab ".strip()` → `"ab"` |
| `s.replace(a, b)` | remplace a par b | `"aab".replace("a","x")` → `"xxb"` |
| `s.count(sub)` | nombre d'occurrences | `"abab".count("ab")` → `2` |
| `s.startswith(p)` | commence par p | `"abc".startswith("ab")` → `True` |
---
## `split()` et `join()`
```python
# split : chaîne → liste de mots
s = "un deux trois"
mots = s.split() # vaut ['un', 'deux', 'trois']
mots = s.split(',') # vaut ['un deux trois'] : aucune virgule, la chaîne reste entière
t = "a,b,c"
t.split(',') # vaut ['a', 'b', 'c']
# join : liste → chaîne
" ".join(["a", "b", "c"]) # vaut 'a b c'
"-".join(["a", "b", "c"]) # vaut 'a-b-c'
```
---
## f-strings (chaînes formatées)
```python
h = 2
m = 30
print(f"{h}h{m:02d}") # affiche 2h30 (:02d = au moins 2 chiffres)
n = 3.14159
print(f"{n:.2f}") # affiche 3.14 (2 décimales)
x = 42
print(f"résultat : {x}") # affiche résultat : 42
```
---
## Opérateur `in`
```python
"a" in "bonjour" # vaut False
"on" in "bonjour" # vaut True
"a" not in "bonjour" # vaut True
```
---
## `chr()` et `ord()` — codes ASCII
Chaque caractère a un code entier. `ord()` donne le code, `chr()` donne le caractère.
```python
ord('A') # vaut 65
ord('a') # vaut 97
ord('0') # vaut 48
chr(65) # vaut 'A'
chr(97) # vaut 'a'
```
Les lettres minuscules sont de 97 (`'a'`) à 122 (`'z'`), les majuscules de 65 (`'A'`) à 90 (`'Z'`).
```python
# Décaler une lettre de n positions
c = 'A'
print(chr(ord(c) + 3)) # affiche D
# Parcourir l'alphabet
for i in range(26):
print(chr(ord('a') + i), end=' ')
# affiche a b c d e f g h i j k l m n o p q r s t u v w x y z
```
---
## Pièges fréquents
- **Les chaînes sont immuables** : `s[0] = 'x'` provoque une `TypeError`. On crée une nouvelle chaîne : `s = 'x' + s[1:]`.
- **Une méthode ne modifie pas la chaîne** : `s.upper()` seul ne change pas `s`. La méthode renvoie une nouvelle chaîne, qu'il faut ranger : `s = s.upper()`.
- **Indices** : `s[len(s)]` provoque une `IndexError`. Le dernier indice valide est `len(s) - 1`, ou `-1`.
- **`split()` sur une chaîne vide** : `"".split()` vaut `[]`, et non `[""]`.
- **`print(x, end=' ')`** : supprime le retour à la ligne. Les `print` suivants s'affichent sur la même ligne.
---
## Exemple — compter les voyelles
```python
s = input() # entrée : bonjour
count = 0
for c in s:
if c in "aeiouAEIOU":
count += 1
print(count)
```
**Trace avec bonjour** : les voyelles sont o, o et u. **Sortie : `3`**
## À vous
**À manipuler :** prédisez la sortie, ligne par ligne.
```sq-affiche
s = "Python"
print(len(s))
print(s[1] + s[-1])
print(s.upper())
print(s.count("o"))
---
saisie: lignes
réponse: 6\nyn\nPYTHON\n1
explication: s[1] vaut 'y' et s[-1] vaut 'n'. print affiche les chaînes sans guillemets.
```
```sq-affiche
mots = "le chat dort".split()
print(len(mots))
print("-".join(mots))
print(f"{mots[1]}:{len(mots[1]):03d}")
---
saisie: lignes
réponse: 3\nle-chat-dort\nchat:004
explication: split() découpe sur les espaces. :03d écrit l'entier sur 3 chiffres, complété par des zéros.
```
```sq-affiche
s = "abc"
s.upper()
print(s)
s = s.upper()
print(s)
---
saisie: lignes
réponse: abc\nABC
explication: s.upper() seul ne modifie pas s. La nouvelle chaîne n'est rangée dans s qu'à la ligne 4.
```
%% nav-debut : généré par gen_navigation.py, ne pas modifier à la main %%
> [!nav]
> ↩ [[Code et Développement/Programmation/Lecture de Code - Python/Lecture de code - Python|Accueil · Lecture de code - Python]]
>
> | [[Code et Développement/Programmation/Lecture de Code - Python/05_boucle_while\|← Boucle `while`]] | [[Code et Développement/Programmation/Lecture de Code - Python/07_listes\|Listes →]] |
> |:---|---:|
%% nav-fin %%