Les Chaînes de Caractères (Strings) en Python
1. Introduction
1.1 Définition
En Python, une chaîne de caractères (ou "string") est une séquence immuable de caractères, utilisée pour représenter du texte. Les chaînes de caractères sont l'un des types de données les plus fondamentaux et les plus utilisés en programmation.
1.2 Contextualisation
Comparaison avec d'autres structures de données Python :
Listes
: Mutables, ordonnées, peuvent contenir différents types de données.Tuples
: Immuables, ordonnés, peuvent contenir différents types de données.Chaînes de caractères
: Immuables, ordonnées, spécialement conçues pour représenter du texte (caractères).Dictionnaires
: Mutables, non ordonnés (avant Python 3.7), paires clé-valeur.
1.3 Cas d'utilisation
Les chaînes sont omniprésentes en programmation. Elles servent à :
- Afficher du texte à l'utilisateur.
- Manipuler des données textuelles (formatage, recherche, remplacement).
- Représenter des informations textuelles comme des noms, des messages ou des documents.
- Stockage de données textuelles (fichiers texte, bases de données).
- Construire d'autres structures de données (ex: parser des données).
2. Caractéristiques Fondamentales
2.1 Propriétés d'immutabilité
Les chaînes en Python sont immuables
. Cela signifie qu'une fois une
chaîne créée, vous ne pouvez pas modifier directement les caractères qu'elle contient. Toute opération de
modification (changement, suppression, ajout) crée en réalité une nouvelle chaîne.
# Demonstrating immutability
my_string = "hello"
print(f"Original string: {my_string}")
# Attempting to mofidy the character at index 0 (this will raise an error)
# my_string[0] = 'J' # TypeError: 'str' object does not support item assignment
# You can't modify the string directly.
# my_string.append('!') # AttributeError: 'str' object has no attribute 'append'
2.2 Ordonnancement
Les chaînes sont des séquences ordonnées
de caractères. Chaque caractère
est accessible par son index (position), commençant à 0. L'ordre des caractères est donc significatif.
# Demonstrating ordered nature of strings
message = "Python"
print(f"Original string: {message}")
# Accessing characters by index
first_char = message[0] # 'P'
second_char = message[1] # 'y'
print (first_char)
print (second_char)
# Order is preserved.
2.3 Indexation et Slicing
L'accès aux caractères individuels et aux sous-chaînes se fait via l'indexation et le slicing :
- Indexation : Accès direct à un caractère via son index.
- Slicing : Extraction d'une sous-chaîne en spécifiant un intervalle d'indices.
- Index négatifs: Permettent d'accéder aux caractères à partir de la fin de la chaîne.
# Indexing and slicing
text = "Bonjour le monde!"
# Indexing (positive and negative)
first_letter = text[0] # 'B'
last_letter = text[-1] # '!'
# Slicing
substring1 = text[0:7] # "Bonjour" (from index 0 up to, but not including 7)
substring2 = text[8:] # "le monde!" (from index 8 to the end)
substring3 = text[:7] # "Bonjour" (from the beginning up to index 7)
substring4 = text[::2] # "Bnr e o!" (every other character)
substring5 = text[::-1] # "!ednom el ruojnoB" (reversed string)
print(f"First letter: {first_letter}")
print(f"Substring1: {substring1}")
print(f"Substring2: {substring2}")
print(f"Substring3: {substring3}")
print(f"Substring4: {substring4}")
print(f"Substring5: {substring5}")
# Strings are also immuable, and slicing creates *new* strings and does not modify the original string.
3. Création et Constructeur
3.1 Syntaxe de création
Les chaînes peuvent être créées de plusieurs manières :
- Utilisation des guillemets simples
'...'
- Utilisation des guillemets doubles
"..."
- Utilisation des triples guillemets (simples ou doubles)
'''...'''
ou"""..."""
pour les chaînes multi-lignes. - Utilisation du constructeur
str()
# Different ways to create strings
# Using single quotes
single_quoted = 'Hello, world!'
# Using double quotes
double_quoted = "Hello, world!"
# Multiline strings using triple quotes
multiline_single = '''This is a
multiline string
using single quotes.'''
multiline_double = """This is a
multiline string
using double quotes."""
# Using the str() constructor (from other datatypes)
number = 123
string_from_number = str(number)
print(f"Single quoted: {single_quoted}")
print(f"Double quoted: {double_quoted}")
print(f"Multiline single: {multiline_single}")
print(f"Multiline double: {multiline_double}")
print(f"String from number: {string_from_number}")
3.2 Caractères d'échappement
Les chaînes peuvent inclure des caractères spéciaux, qui sont représentés par des séquences d'échappement
commençant par un antislash (\
) :
\n
: Nouvelle ligne\t
: Tabulation\\
: Antislash\'
: Guillemet simple\"
: Guillemet double
# Escape sequences
string_with_newline = "Hello\nWorld!"
string_with_tab = "Name:\tJohn"
string_with_backslash = "This is a backslash: \\"
string_with_single_quote = "It\'s raining"
string_with_double_quote = "He said \"Hello\""
print(string_with_newline)
print(string_with_tab)
print(string_with_backslash)
print(string_with_single_quote)
print(string_with_double_quote)
4. Opérations de Base
4.1 Concaténation et Répétition
Les chaînes peuvent être combinées (concaténées) ou répétées :
- Concaténation : Utilisation de l'opérateur
+
. - Répétition : Utilisation de l'opérateur
*
.
# Basic string operations
# Concatenation
greeting = "Hello, "
name = "Alice"
message = greeting + name # "Hello, Alice"
print(message)
# Repetition
repeated_string = "Python" * 3 # "PythonPythonPython"
print(repeated_string)
# Strings are immuable, any change makes a new string
# message[0] = "J" # Error: 'str' object does not support item assignment
4.2 Méthodes de recherche
Python fournit de nombreuses méthodes pour rechercher, et manipuler des chaînes de caractères :
find(substring, start, end)
: Trouve la première occurrence d'une sous-chaîne.rfind(substring, start, end)
: Trouve la dernière occurrence d'une sous-chaîne.index(substring, start, end)
: Similaire à find(), mais lève une exception si la sous-chaîne n'est pas trouvée.rindex(substring, start, end)
: Similaire à rfind(), mais lève une exception si la sous-chaîne n'est pas trouvée.count(substring, start, end)
: Compte le nombre d'occurrences d'une sous-chaîne.startswith(prefix, start, end)
: Vérifie si la chaîne commence par un préfixe.endswith(suffix, start, end)
: Vérifie si la chaîne se termine par un suffixe.in
: Opérateur pour vérifier l'appartenance d'une sous-chaîne.
# Search operations in strings
text = "This is a test string. test is here, test again."
# Finding a substring
position = text.find("test") # Returns 10
# Counting occurrences
count = text.count("test") # Returns 3
# Checking existence
is_present = "a" in text # Returns True
is_present2 = "abc" in text #Returns False
# Find the last occurence
last_position = text.rfind("test") #Returns 34
# Check if string starts with / ends with...
starts = text.startswith("This") #Returns True
ends = text.endswith("again.") #Returns True
print(f"Position of 'test': {position}")
print(f"Count of 'test': {count}")
print(f"Is 'a' present? {is_present}")
print(f"Is abc present? {is_present2}")
print(f"Last test position: {last_position}")
print(f"Starts with This: {starts}")
print(f"Ends with again.: {ends}")
# find() et index() are similar :
try:
find_test= text.index("test") # similar to find
print(f"index test {find_test}")
find_test_not_found= text.index("test_z") # throws an error
print(f"index test z {find_test_not_found}")
except ValueError:
print("index throws an exception")
4.3 Transformation et Formatage
Python offre de nombreuses méthodes pour modifier et formater des chaînes :
lower()
: Convertit la chaîne en minuscules.upper()
: Convertit la chaîne en majuscules.capitalize()
: Met la première lettre en majuscule et le reste en minuscules.title()
: Met la première lettre de chaque mot en majuscule.strip()
: Supprime les espaces blancs au début et à la fin.lstrip()
: Supprime les espaces blancs au début.rstrip()
: Supprime les espaces blancs à la fin.replace(old, new, count)
: Remplace une sous-chaîne par une autre.split(separator, maxsplit)
: Divise la chaîne en une liste de sous-chaînes.join(iterable)
: Concatène une séquence de chaînes avec un séparateur.format(*args, **kwargs)
: Formate la chaîne avec des valeurs et des arguments nommés (plusieurs syntaxes de formatage sont possibles).- f-strings (formatted string literals) : Une autre manière de formater les chaînes de caractères (présentée après).
# String transformations and formatting
text = " hello WORLD "
# Case conversions
lowercase = text.lower() # " hello world "
uppercase = text.upper() # " HELLO WORLD "
capitalized = text.capitalize() # " hello world "
titled = text.title() # " Hello World "
# Removing whitespace
stripped = text.strip() # "hello WORLD"
left_stripped = text.lstrip() # "hello WORLD "
right_stripped = text.rstrip() # " hello WORLD"
# Replacing
replaced = text.replace("o", "0") # " hell0 W0RLD "
# Splitting
split_text = text.split() # ['hello', 'WORLD'] (default: splits on whitespace)
split_comma = "apple,banana,orange".split(",") # ['apple', 'banana', 'orange']
# Joining
joined_text = "-".join(['apple', 'banana', 'orange']) # "apple-banana-orange"
print(f"Lowercase: '{lowercase}'")
print(f"Uppercase: '{uppercase}'")
print(f"Capitalized: '{capitalized}'")
print(f"Titled: '{titled}'")
print(f"Stripped: '{stripped}'")
print(f"Left stripped: '{left_stripped}'")
print(f"Right stripped: '{right_stripped}'")
print(f"Replaced: '{replaced}'")
print(f"Split: {split_text}")
print(f"Split comma: {split_comma}")
print(f"Joined: {joined_text}")
# String formatting - Old style (%-formatting) and new style (str.format)
# Old style (%-formatting, less used)
name = "Alice"
age = 30
old_style_format = "My name is %s and I am %d years old." % (name, age) # %s for str, %d for int
print(f"Old style format: {old_style_format}")
# New style (str.format()) - explicit indexing or keyword arguments
new_style_format = "My name is {} and I am {} years old.".format(name, age)
print(f"New style (positional): {new_style_format}")
new_style_format_named = "My name is {name} and I am {age} years old.".format(name=name, age=age)
print(f"New style (named): {new_style_format_named}")
# Another example of str.format
formatted_string = "The number is: {:.2f}".format(3.14159) # format as float, with 2 decimals, see the documentation.
print(f"Formatted string: {formatted_string}")
# formatting - using more formating options.
number = 12345.6789
print(f"Formatted number: {number:,.2f}") # 12,345.68 (with thousand separators, 2 decimals)
print(f"Formatted number: {number:.2e}") # 1.23e+04 (exponential notation)
print(f"Formatted number: {number:010.2f}") # 0012345.68 (padding with zeros)
4.4 f-strings (Formatted String Literals)
Les f-strings sont apparues en Python 3.6 et offrent une manière concise et lisible de formater les chaînes,
en intégrant directement des expressions à l'intérieur de la chaîne. Elles commencent par le préfixe f
ou F
suivi de la chaîne, et les
expressions sont placées entre accolades {}
. Elles peuvent contenir
n'importe quelle expression Python valide.
# F-strings
name = "Bob"
age = 25
# Basic f-string
greeting = f"Hello, my name is {name} and I am {age} years old."
print(greeting)
# Expressions inside f-strings
result = f"The result of 2 + 2 is {2 + 2}"
print(result)
# Calling methods inside f-strings
uppercase_name = f"My name in uppercase is {name.upper()}"
print(uppercase_name)
# Formatting numbers in f-strings (similar to str.format())
pi = 3.14159
formatted_pi = f"Pi to two decimal places: {pi:.2f}"
print(formatted_pi)
# Using variables with formatting
width = 10
number = 42
padded_number = f"The number is: {number:0{width}d}" # Use width variable in format spec
print(padded_number)
# Another more complex example
items = ["apple", "banana", "cherry"]
item_string = f"Items: {', '.join(items)}"
print(item_string)
5. Compréhensions de Chaînes (et Générateurs)
5.1 Compréhensions de Chaînes?
Bien qu'elles soient moins courantes qu'avec les listes ou les dictionnaires, les compréhensions de chaînes sont techniquement possibles. Elles consistent à appliquer une opération à chaque caractère d'une chaîne. L'utilisation est plus limitée qu'avec les listes ou les dictionnaires.
# String comprehensions (less common)
original_string = "hello"
# Convert string to uppercase, a character at a time.
uppercase_string = "".join([char.upper() for char in original_string])
print(f"Uppercase string: {uppercase_string}")
# Remove vowels (using list comprehension and then string join)
no_vowels = "".join([char for char in original_string if char not in "aeiou"])
print (f"String without vowels: {no_vowels}")
# Create a new string with the ASCII value of each character
ascii_string = "".join([str(ord(char)) + " " for char in original_string])
print(f"ASCII string: {ascii_string}")
# Using a generator expression (more common approach, and often more efficient)
squared_ascii_string = "".join(str(ord(char)**2) + " " for char in original_string) # generator syntax
print(f"Transformed string using generator expression: {squared_ascii_string}")
# Note: Although this is correct, the more Pythonic approach uses list comprehension in this case
6. Copie et Références
6.1 Immutabilité et Copies
En raison de l'immutabilité des chaînes, vous n'avez **pas** besoin de vous soucier de la création de copies profondes ou superficielles. Comme pour les tuples, si vous assignez une chaîne à une autre variable, vous créez simplement une nouvelle référence à la même chaîne en mémoire. Les modifications directes ne sont pas possibles, donc il n'y a pas de risque d'effets de bord.
# Strings and references
original_string = "Python"
# Assigning to a new variable (creates a reference, not a copy)
reference_string = original_string
# Immutability means changes are not possible
# reference_string[0] = "J" # TypeError: 'str' object does not support item assignment
# Both variables refer to the same data
print(f"Original String: {original_string}")
print(f"Reference string: {reference_string}")
# Checking if they reference the same object in memory (they do)
print(f"Same object? {original_string is reference_string}")
# When you "modify", you are creating new objects, not modifying an original one
new_string = original_string.upper() # a new string is created !
print(f"New string: {new_string}")
print(f"Original String (still): {original_string}")
7. Itération
7.1 Boucles et itération
Les chaînes sont des séquences itérables, ce qui vous permet de parcourir leurs caractères de différentes manières :
- Boucle
for
pour itérer directement sur les caractères. - Boucle
for
avecenumerate()
pour accéder à l'index et au caractère. - Boucle
while
(moins courante, mais possible).
# Different ways to iterate through strings
text = "Hello"
# Basic for loop
print("Basic for loop:")
for char in text:
print(char)
# For loop with enumerate (index and value)
print("\nFor loop with enumerate:")
for index, char in enumerate(text):
print(f"[{index}] {char}")
# While loop (less common but possible)
print("\nWhile loop:")
i = 0
while i < len(text):
print(f"[{i}] {text[i]}")
i += 1
7.2 Fonctions d'ordre supérieur (Moins Courant)
Bien que moins courantes qu'avec les listes, les chaînes peuvent également être utilisées avec des fonctions
d'ordre supérieur comme map()
, filter()
et reduce()
(via functools
). Ces fonctions opèrent sur des itérables, et vous devrez souvent
transformer les chaînes en listes de caractères (ou utiliser des compréhensions) pour les utiliser
efficacement.
# Higher-order functions with strings (less common, with some tricks)
from functools import reduce
text ="hello world"
# Using map() to convert each char to uppercase - requires a conversion (character by character)
uppercase_chars = map(str.upper, text) # returns a map object (iterator), which produces items on demand
print(f"Map object: {uppercase_chars}") # does not print the value of the characters !
uppercase_chars_as_list = list(uppercase_chars) # You can loop throug each item in the iterator
print(f"Map result (as list): {uppercase_chars_as_list}")
uppercase_string = "".join(uppercase_chars_as_list) # join them again
print(f"Uppercase string: {uppercase_string}")
# Using filter() to keep only the letters (without spaces)
letters_only = filter(str.isalpha,text) # it returns the items on demand
letters_only_as_list = list(letters_only) # must loop, one by one
print(f"Letters in 'text': {letters_only_as_list}")
letters_only_string = "".join(letters_only_as_list) # join them again
print(f"Letters only string: {letters_only_string}")
# Using reduce() to concatenate characters (very rare)
concatenated_string = reduce(lambda x, y: x + y, text) # Not very usefull, but can be done.
print(f"Concatenated string (using reduce): {concatenated_string}")
6. Performance
Les chaînes de caractères en Python sont immuables, ce qui affecte leur performance de plusieurs manières.
- Immutabilité: Une fois créée, une chaîne ne peut pas être modifiée directement. Toute opération de modification crée une nouvelle chaîne.
- Concaténation répétée: La concaténation répétée de chaînes (par exemple, dans une boucle)
peut être inefficace car elle implique la création de nouvelles chaînes à chaque itération. Il est
préférable d'utiliser des techniques plus efficaces comme
join()
ou leslistes
(qui sont mutables) pour construire des chaînes. - Accès par index: L'accès à un caractère individuel par son index (e.g.,
my_string[i]
) est une opération en temps constant (O(1)). - Recherche: Des opérations de recherche comme
in
,find()
,index()
ont une complexité de temps O(n) dans le pire des cas, où n est la longueur de la chaîne.
# Performance demonstration - a simple example
import time
# Function to measure execution time
def measure_time(func, *args):
start = time.time()
result = func(*args)
end = time.time()
return (end - start) * 1000 # Convert to milliseconds
# Concaténation inefficace (dans une boucle). Creates a *new* string each time!
def inefficient_concatenation(n):
result = ""
for i in range(n):
result += str(i) # Création répétée de nouvelles chaînes.
return result
# Concaténation efficace (using join and a list).
def efficient_concatenation(n):
items = [str(i) for i in range(n)]
return "".join(items) # Only *one* string is created.
# Measurements
n = 10000 # try 100000 or more for clear timing differences.
time_inefficient = measure_time(inefficient_concatenation, n)
print(f"Inefficient concatenation time (n={n}): {time_inefficient:.4f} ms")
time_efficient = measure_time(efficient_concatenation, n)
print(f"Efficient concatenation time (n={n}): {time_efficient:.4f} ms")
# Access time (O(1))
my_string = "This is a test string"
access_time = measure_time(lambda s: s[5], my_string) #get a char @ index 5
print(f"Access time: {access_time:.4f} ms")
# Search time (O(n))
search_time = measure_time(lambda s: "test" in s, my_string)
print(f"Search time: {search_time:.4f} ms")
6.1 Optimisations de performance
Pour optimiser la performance lors de la manipulation de chaînes de caractères, il est recommandé de:
- Éviter la concaténation répétée: Privilégier l'utilisation de la méthode
join()
avec une liste de chaînes, ou l'utilisation d'unStringIO
(moins courant en Python moderne) pour construire efficacement une chaîne. - Utiliser les f-strings (formatage littéral): Les f-strings sont généralement plus rapides
et plus lisibles que les autres méthodes de formatage (
%
ou.format()
). - Choisir les méthodes appropriées: Utiliser les méthodes spécifiques aux chaînes pour
effectuer les opérations courantes, comme
split()
,replace()
,startswith()
, etc., car elles sont optimisées.
7. Cas d'Utilisation Pratiques
7.1 Traitement de texte et analyse de données
Les chaînes de caractères sont au cœur du traitement de texte et de l'analyse de données. Elles servent à extraire des informations, à nettoyer des données (suppression des espaces, conversion en majuscules/minuscules), à rechercher des motifs, et bien plus.
# Extraction d'informations à partir d'une chaîne
text = "Nom: Alice, Âge: 30, Ville: Paris"
# Séparation de la chaîne en utilisant la virgule comme séparateur
parts = text.split(",")
print(f"Parts: {parts}")
# Extraction de la valeur de l'âge
for part in parts:
if "Âge" in part:
age = part.split(":")[1].strip() # Get the portion after ':' and remove spaces
print(f"Âge: {age}")
# Nettoyage et transformation de données
dirty_string = " Hello, World! "
cleaned_string = dirty_string.strip().lower()
print(f"Chaîne nettoyée: {cleaned_string}")
# Recherche de motifs (simple)
if "hello" in cleaned_string:
print("Le mot 'hello' est présent dans la chaîne nettoyée")
7.2 Formatage de chaînes et génération de rapports
Le formatage de chaînes sert à présenter les données de manière lisible et structurée, et à générer des rapports, des messages ou des interfaces utilisateur.
# Formatage de chaînes (f-strings)
name = "Bob"
score = 95
report = f"Le joueur {name} a obtenu un score de {score}."
print(report)
# Formatage de nombres
pi = 3.14159265359
formatted_pi = f"Pi à deux décimales: {pi:.2f}"
print(formatted_pi)
# Alignement et remplissage
number = 42
aligned_number = f"|{number:5d}|" # Right-aligned, width 5, integer
print(aligned_number)
7.3 Validation et manipulation de données d'entrée
Les chaînes sont indispensables pour valider les données d'entrée (par exemple, vérifier le format d'une adresse e-mail ou d'un numéro de téléphone) et les manipuler afin de les adapter aux besoins de l'application.
# Validation d'une adresse e-mail (simplifié)
def is_valid_email(email):
if "@" in email and "." in email:
return True
else:
return False
email1 = "test@example.com"
email2 = "invalid-email"
print(f"'{email1}' est valide: {is_valid_email(email1)}")
print(f"'{email2}' est valide: {is_valid_email(email2)}")
# Manipulation d'un numéro de téléphone (exemple)
phone_number = "123-456-7890"
cleaned_phone_number = phone_number.replace("-", "") # remove '-'
print(f"Numéro de téléphone nettoyé: {cleaned_phone_number}")
8. Exercices
8.1 Exercice 1: Manipulation de base
Manipulez une chaîne de caractères. Créez une chaîne contenant votre nom complet. Effectuez les opérations suivantes :
- Affichez le nombre de caractères dans la chaîne.
- Affichez le premier et le dernier caractère.
- Convertissez la chaîne en majuscules.
- Remplacez toutes les occurrences de la lettre "a" par "o".
- Séparez le nom et le prénom dans deux variables distinctes (si votre nom contient un espace).
# Exercice 1: Solution
my_name = "John Doe"
# 1. Nombre de caractères
length = len(my_name)
print(f"Nombre de caractères: {length}")
# 2. Premier et dernier caractère
first_char = my_name[0]
last_char = my_name[-1]
print(f"Premier caractère: {first_char}")
print(f"Dernier caractère: {last_char}")
# 3. Majuscules
uppercase_name = my_name.upper()
print(f"Majuscules: {uppercase_name}")
# 4. Remplacement de "a" par "o"
replaced_name = my_name.replace("a", "o")
print(f"Remplacement: {replaced_name}")
# 5. Séparation du nom et du prénom
parts = my_name.split()
if len(parts) == 2:
first_name = parts[0]
last_name = parts[1]
print(f"Prénom: {first_name}, Nom: {last_name}")
else:
print("Impossible de séparer le nom et le prénom")
8.2 Exercice 2: Analyse de texte
Analysez une chaîne de texte. Créez une chaîne de caractères contenant une courte phrase. Effectuez les opérations suivantes :
- Comptez le nombre de mots dans la phrase.
- Comptez le nombre d'occurrences de la lettre "e".
- Remplacez tous les points d'interrogation par des points d'exclamation.
- Vérifiez si la phrase contient le mot "Python".
- Mettez la première lettre de chaque mot en majuscule
# Exercice 2: Solution
my_text = "Ceci est une phrase de test. Est-ce que cela fonctionne ?"
# 1. Nombre de mots
words = my_text.split()
num_words = len(words)
print(f"Nombre de mots: {num_words}")
# 2. Nombre de "e"
count_e = my_text.lower().count("e") # convert to lowercase first!
print(f"Nombre de 'e': {count_e}")
# 3. Remplacement de '?' par '!'
replaced_text = my_text.replace("?", "!")
print(f"Texte remplacé: {replaced_text}")
# 4. Vérification de "Python"
if "Python" in my_text:
print("La phrase contient 'Python'")
else:
print("La phrase ne contient pas 'Python'")
# 5. Capitalize first letter of each word
# my_text.title() # method
# OR
capitalized_list = [word.capitalize() for word in my_text.split()]
capitalized_text = " ".join(capitalized_list)
print(f"Phrase avec premiers lettres en majuscules:: {capitalized_text}")
8.3 Exercice 3: Formatage et manipulation de données
Formatez et manipulez des données. Vous recevez des données sous forme de chaînes de caractères. Les données représentent le nom, l'âge et le score d'un joueur, séparés par des virgules. Exemple : "Alice,30,85". Effectuez les opérations suivantes :
- Séparez les données en utilisant la virgule comme séparateur.
- Affichez le nom, l'âge et le score du joueur formatés dans une chaîne de caractères.
- Vérifiez si l'âge est un nombre valide. Si ce n'est pas le cas, affichez un message d'erreur.
- Calculez et affichez le score du joueur formaté avec deux décimales.
# Exercice 3: Solution
player_data = "Alice,30,85"
# Séparez les données
data_parts = player_data.split(",")
if len(data_parts) != 3:
print("Format de données invalide")
else:
name = data_parts[0]
age_str = data_parts[1]
score_str = data_parts[2]
# Vérifiez si l'âge est un nombre valide
if age_str.isdigit():
age = int(age_str)
score = float(score_str) # convert score to float to handle decimals
# Affichez les informations formatées
print(f"Nom: {name}, Âge: {age}, Score: {score:.2f}")
else:
print("Âge invalide.")
9. Résumé et Comparaisons
Points clés à retenir sur les chaînes (strings) Python :
- Séquences de caractères
Unicode
,immuables
. - Supportent l'
indexation
, leslicing
et de nombreuses méthodes intégrées pour la manipulation. - Essentielles pour le traitement de texte, le formatage et la validation de données.
- Immutabilité influence la performance, en particulier lors de la concaténation répétée.
Comparaison Strings vs. Autres Structures de Données
Les chaînes de caractères partagent des similitudes et des différences avec d'autres structures de données Python, comme les listes et les tuples :
- Types de données : Les chaînes sont spécifiquement conçues pour représenter du texte, tandis que les listes et les tuples sont des collections d'éléments de différents types.
- Immutabilité: Les chaînes sont immuables. Les listes sont mutables contrairement aux tuples.
-
Opérations: Les chaînes offrent des méthodes optimisées spécifiques au texte, comme
split()
,replace()
, etc. Les listes sont plus générales et supportent l'ajout, la suppression et la modification d'éléments. -
Utilisation en mémoire et performance: En raison de leur immutabilité, les chaînes peuvent être
optimisées en mémoire. La concaténation répétée de chaînes est inefficace, contrairement à l'ajout
d'éléments à une liste et l'utilisation ultérieure de
join()
- Indexation et Slicing: Les chaînes, listes et tuples supportent l'indexation et le slicing.
10. Conclusion
Les chaînes de caractères (strings) sont des éléments essentiels de la programmation Python. Leur compréhension et leur manipulation efficace (en tenant compte de leur immutabilité) sont fondamentales pour tout développeur Python.
Points clés à retenir :
- Les strings sont immuables.
- Elles sont utilisées pour représenter du texte.
- Elles sont utilisées pour la manipulation et la validation de données.
- Il faut utiliser
join()
pour une chaîne et l'utilisation desf-strings
pour optimiser le rendu. - Elles sont utilisées pour stocker des informations textuelles.
La maîtrise des strings est cruciale pour une programmation Python efficace et robuste
That's all folks