Utilisation avancée des chaines de caractères

Formatted string literals

Plus souvent appelés f-string, ils sont un moyen simple et efficace de produire des chaines formatées.

[1]:
a = 2
f"*~ {a} ~*"  # f-string !
[1]:
'*~ 2 ~*'
[2]:
a = 'toto'
f"*~ {a} ~*"  # le même f-string mais la variable a une autre valeur
[2]:
'*~ toto ~*'

Champs multiples

[3]:
a = 1
b = 2
f"~{a}~  -{b}-"
[3]:
'~1~  -2-'
[4]:
a = 'toto'
b = 'tata'
f"~{a}~  -{b}-"
[4]:
'~toto~  -tata-'
[5]:
a = 42
b = 'tata'
f"~{a}~  -{b}-"
[5]:
'~42~  -tata-'

Mise en forme

Des instructions de formatage peuvent être ajoutées {variable:formatage}

[6]:
# On peut justifier et centrer un champ
a = 'toto'
b = 'tata'
c = 'titi'
f"| {a:>10} | {b:^10} | {c:<10} |"
[6]:
'|       toto |    tata    | titi       |'
[7]:
# On peut controler l'affichage des nombres
a = 5
print(f"{a}")
print(f"{a:3}")
print(f"{a:03}")
5
  5
005
[8]:
# et des nombres flottants
a = 5
pi = 3.14159
print(f"{pi}")      # sans formatage, affichage au plus près de la donnée
print(f"{a}")       # sans formatage, affichage au plus près de la donnée
print(f"{a:f}")     # affichons un int comme un float
print(f"{a:.3f}")   # controlons le nombre de décimales
print(f"{pi:.2f}")  # controlons le nombre de décimales
print(f"{a:e}")     # notation scientifique
print(f"{a:.2e}")   # notation scientifique avec 2 décimales
3.14159
5
5.000000
5.000
3.14
5.000000e+00
5.00e+00

Méthode des str

[9]:
# en python, les chaines de caractères disposent de nombreuses méthodes

str_methods = [name for name in dir(str) if name[0] != '_']
for name in str_methods:
    print(f'str.{name}(...)')
str.capitalize(...)
str.casefold(...)
str.center(...)
str.count(...)
str.encode(...)
str.endswith(...)
str.expandtabs(...)
str.find(...)
str.format(...)
str.format_map(...)
str.index(...)
str.isalnum(...)
str.isalpha(...)
str.isascii(...)
str.isdecimal(...)
str.isdigit(...)
str.isidentifier(...)
str.islower(...)
str.isnumeric(...)
str.isprintable(...)
str.isspace(...)
str.istitle(...)
str.isupper(...)
str.join(...)
str.ljust(...)
str.lower(...)
str.lstrip(...)
str.maketrans(...)
str.partition(...)
str.removeprefix(...)
str.removesuffix(...)
str.replace(...)
str.rfind(...)
str.rindex(...)
str.rjust(...)
str.rpartition(...)
str.rsplit(...)
str.rstrip(...)
str.split(...)
str.splitlines(...)
str.startswith(...)
str.strip(...)
str.swapcase(...)
str.title(...)
str.translate(...)
str.upper(...)
str.zfill(...)
[10]:
des_mots = ['Bonjour', 'tout', 'le', 'monde', '!']
mot = 'bidule'
phrase = "Vive les tartes a la myrtille."
paragraphe = '''
B: What is your name?
A: It is Arthur, King of the Britons.
B: What is your quest?
A: To seek the Holy Grail.
B: What is the air-speed velocity of a swallow?
A: What do you mean?
B: Er ... I don't know that ... Aaaaarrrrrrggghhh!
'''

Tester le contenu

[11]:
# tester la présence d'une sous chaine
print('le' in des_mots)  # élement dans une liste
print('le' in mot)
print('le' in phrase)  # sous chaine
True
True
True
[12]:
# tester le début
print(mot.startswith('b'))
print(mot.startswith('bi'))
print(mot.startswith('ba'))
True
True
False
[13]:
# tester la fin
print(phrase.endswith('.'))
print(phrase.endswith('myrtille'))
True
False
[14]:
# tester la nature du contenu
[name for name in dir(str) if name.startswith('is')]
[14]:
['isalnum',
 'isalpha',
 'isascii',
 'isdecimal',
 'isdigit',
 'isidentifier',
 'islower',
 'isnumeric',
 'isprintable',
 'isspace',
 'istitle',
 'isupper']

Compter / localiser

[15]:
# str.count()

print(paragraphe.count('?'))
print(paragraphe.count('the'))
4
3
[16]:
# str.index()

print(phrase.index('a'))
print(phrase.index('la'))
print(phrase.rindex('a'))
10
18
19

Fusionner, séparer

[17]:
# str.join()

fatiguant = ''
for elem in des_mots:
    if fatiguant:
        fatiguant += ' ' + elem
    else:
        fatiguant += elem
repr(fatiguant)
[17]:
"'Bonjour tout le monde !'"
[18]:
facile = ' '.join(des_mots)
repr(facile)
[18]:
"'Bonjour tout le monde !'"
[19]:
# str.split()
phrase.split()
[19]:
['Vive', 'les', 'tartes', 'a', 'la', 'myrtille.']
[20]:
# str.split()
phrase.split('t')
[20]:
['Vive les ', 'ar', 'es a la myr', 'ille.']
[21]:
# str.splitlines()
paragraphe.splitlines()
[21]:
['',
 'B: What is your name?',
 'A: It is Arthur, King of the Britons.',
 'B: What is your quest?',
 'A: To seek the Holy Grail.',
 'B: What is the air-speed velocity of a swallow?',
 'A: What do you mean? ',
 "B: Er ... I don't know that ... Aaaaarrrrrrggghhh!"]
[22]:
# str.partition()
phrase.partition('a')
[22]:
('Vive les t', 'a', 'rtes a la myrtille.')
[23]:
# str.partition()
phrase.partition('tartes')
[23]:
('Vive les ', 'tartes', ' a la myrtille.')
[24]:
# str.rpartition() pour partir de la droite
phrase.rpartition('a')
[24]:
('Vive les tartes a l', 'a', ' myrtille.')

Mise en forme

[25]:
# Changer la casse

print(phrase.lower())
print(phrase.upper())
print(phrase.title())
print(phrase.capitalize())
print(mot, mot.capitalize())
vive les tartes a la myrtille.
VIVE LES TARTES A LA MYRTILLE.
Vive Les Tartes A La Myrtille.
Vive les tartes a la myrtille.
bidule Bidule
[26]:
# justifier, centrer

print(repr(mot.rjust(10)))
print(repr(mot.ljust(10)))
print(repr(mot.center(10)))

'    bidule'
'bidule    '
'  bidule  '

Exercices

exercice = '''
    Définir un texte comme celui-ci et le découper en une liste de mots.
    Utiliser la fonction `compte_occurrence()` pour compter le nombre
    d'occurrences de chaque mot présent dans le texte.
'''