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.
'''