<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 Il s’agit de repérer les données nécessaires voire indispensables à la
résolution. Ces données peuvent être
Step1:  Mais il implémente aussi des nombres plus exotiques tels que les
décimaux, les fractions ou encore les nombres complexes
Chaînes de caractères
En python3, il existe deux grands types de chaînes de caractères, les
strings, et les bytes. Les strings sont simplement entourées par des
guillemets simples ou doubles.
Step2:  Les bytes sont précédées de la lettre b, il s'agit de texte brut utilisé
par la machine mais pas toujours lisible par un humain.
Step3:  On ne peut représenter simplement que certains caractères(les caractères
ASCII), les caractères accentués ne peuvent être écrits directement.
Step4:  Un encodage autre que le ASCII doit être utilisé pour ces caractères,
comme par exemple le UTF-8 qui est un codage sur huit bits très répandu.
Step5:  Valeurs logiques
On les appelle les booléens, il ne peuvent avoir que deux valeurs
Step6:  On peut aussi les utiliser pour savoir si une variable existe.
Step7:  On peut aussi combiner plusieurs tests avec les opérateurs booléens and, or et not.
Step8:  Listes et dictionnaires
Souvent les données pertinentes doivent être agencées sous une forme
plus vaste, comme par exemple des listes où on peut ranger de façon ordonnée plusieurs valeurs.
Listes
Les listes sont des collections ordonnées de valeurs, elles sont
entourées par des crochets [], leurs éléments sont séparés par des
virgules.
Step9:  On peut facilement accéder à la longueur de la liste grace à la fonction
len et à chacun de ces éléments grâce à leur index (Attention le
premier élement à l'index 0)
Step10:  On peut inversement connaître l'indice correspondant à une valeur grâce à l'attribut index.
Step11:  Dictionnaires
Dans un dictionnaire les valeurs de la collection ne sont pas repéré par
un index, mais par une clé. Les dictionnaires sont entourés d'accolades {}.
Step12:  Pour accéder aux éléments du dictionnaire, il suffit d'appeler la clé
correspondante, d'autres part la fonction len est égalemnt disponible.
Step13:  Modification des listes et dictionnaires
Les listes et dictionnaires sont des objets mutables, c'est à dire que l'on peut modifier leur contenu sans créer un nouvel objet. On dit qu'il s'agit de données non-persistantes.
Step14:  Si on a besoin de modifier une liste ou un dictionnaire, mais que l'on veut garder une trace des objets initiaux, il faut commencer par en créer une copie, il ne suffit pas de créer une variable suplémentaire sans quoi cette variable serait elle aussi modifiée si l'objet initial changeait
Step15:  Entrée des données
Dans cette phase peut aussi figurer ce qu’on appelle l’entrée des
données, qui peut se manifester par la saisie de caractères ou de
nombres sur le clavier, ou la lecture de la position du pointeur de la
souris, ou encore par la lecture d’un fichier contenant ces nombres ou
caractères.
Il s’agit aussi de repérer les résultats intermédiaires qu’il est bon de
mémoriser pour la suite car indispensables au traitement.
Il est parfois utile d’utiliser des variables auxiliaires pour ne pas
perturber les données initiales.
Entrée des données au clavier
Step16:  Attention cependant, cette valeur est une chaîne de caractère, et les opérations sont celles des strings.
Step17:  Il convient de la convertir un nombre entier ou flottant avant d'utiliser la valeur.
Step18:  Lecture d'un fichier
Voici par exemple comment ouvrir et lire un fichier appelé lorem.txt
contenu dans le répértoire data du dossier courant.
Step19:  Dans la sortie précédente, les caractères \n représentent les sauts de
ligne, on peut aussi lire le fichier ligne par ligne.
<ASSISTANT_TASK:>
Python Code:
# <!-- collapse=True -->
a = 1
b = 1.0
print(a, type(a), b, type(b))
Explanation: Il s’agit de repérer les données nécessaires voire indispensables à la
résolution. Ces données peuvent être:
numériques,
ou sous forme de textes (on dit souvent chaînes de caractères),
ou de type logique (à deux valeurs possibles, vrai ou faux).
Pour affecter une valeur à une variable en python, la syntaxe est de la forme:
nom = valeur
<dl>
<dt>Affectation</dt>
<dd>Dans un programme, une affectation donne une valeur à une variable, elle est de la forme <code>v = e</code> avec `v` une variable et `e` une expression.
</dd>
</dl>
Valeurs numériques
Python distingue les entiers(integers), des nombres à
virgule(floating-point) par l'ajout d'une virgule:
End of explanation
# <!-- collapse=False -->
a = 'Mon texte'
b = "Mon deuxième texte"
print(a, type(a), b, type(b))
Explanation: Mais il implémente aussi des nombres plus exotiques tels que les
décimaux, les fractions ou encore les nombres complexes
Chaînes de caractères
En python3, il existe deux grands types de chaînes de caractères, les
strings, et les bytes. Les strings sont simplement entourées par des
guillemets simples ou doubles.
End of explanation
a = b'Mon texte'
print(a, type(a))
Explanation: Les bytes sont précédées de la lettre b, il s'agit de texte brut utilisé
par la machine mais pas toujours lisible par un humain.
End of explanation
b = b'Mon deuxième texte'
Explanation: On ne peut représenter simplement que certains caractères(les caractères
ASCII), les caractères accentués ne peuvent être écrits directement.
End of explanation
b = b'Mon deuxi\xc3\xa8me texte'
print(b)
print(b.decode('utf-8'))
Explanation: Un encodage autre que le ASCII doit être utilisé pour ces caractères,
comme par exemple le UTF-8 qui est un codage sur huit bits très répandu.
End of explanation
1 < 2, 1 > 2, 2 == 10, 2 >= 1.9, 2 == 2, 2 != 2
Explanation: Valeurs logiques
On les appelle les booléens, il ne peuvent avoir que deux valeurs:
VRAI ou FAUX: True ou False en anglais;
1 ou 0.
On les utilise pour réaliser des tests.
End of explanation
bool(a)
Explanation: On peut aussi les utiliser pour savoir si une variable existe.
End of explanation
1 < 2 or 2 < 1
1 < 2 and 2 < 1
not(1 < 2 and 2 < 1)
Explanation: On peut aussi combiner plusieurs tests avec les opérateurs booléens and, or et not.
End of explanation
a = [ 1, 'deux' , 3]
type(a)
Explanation: Listes et dictionnaires
Souvent les données pertinentes doivent être agencées sous une forme
plus vaste, comme par exemple des listes où on peut ranger de façon ordonnée plusieurs valeurs.
Listes
Les listes sont des collections ordonnées de valeurs, elles sont
entourées par des crochets [], leurs éléments sont séparés par des
virgules.
End of explanation
len(a)
a[0], a[2]
Explanation: On peut facilement accéder à la longueur de la liste grace à la fonction
len et à chacun de ces éléments grâce à leur index (Attention le
premier élement à l'index 0)
End of explanation
a.index(1), a.index('deux'), a.index(3)
Explanation: On peut inversement connaître l'indice correspondant à une valeur grâce à l'attribut index.
End of explanation
a = { 'nom': 'Doe' , 'prenom': 'John', 'age': 77 }
type(a)
Explanation: Dictionnaires
Dans un dictionnaire les valeurs de la collection ne sont pas repéré par
un index, mais par une clé. Les dictionnaires sont entourés d'accolades {}.
End of explanation
len(a)
a['nom'], a['age']
Explanation: Pour accéder aux éléments du dictionnaire, il suffit d'appeler la clé
correspondante, d'autres part la fonction len est égalemnt disponible.
End of explanation
# Valeurs initiales
liste = [ 1, 'deux' , 3]
dict = { 'nom': 'Doe' , 'prenom': 'John', 'age': 77 }
print("Valeurs initiales:\n", liste, dict)
# Modification des valeurs par assignation
liste[1] = 2
dict['age'] = 17
print("Modification des valeurs par assignation:\n", liste, dict)
# Ajout d'éléments
liste.append(4)
dict['nationalité'] = 'française'
print("Ajout d'éléments:\n", liste, dict)
# Suppression d'éléments
liste.pop(0)
dict.pop('age')
print("Suppression d'éléments:\n", liste, dict)
Explanation: Modification des listes et dictionnaires
Les listes et dictionnaires sont des objets mutables, c'est à dire que l'on peut modifier leur contenu sans créer un nouvel objet. On dit qu'il s'agit de données non-persistantes.
End of explanation
# Valeurs initiales
L = [ 1, 'deux' , 3]
print("Valeurs initiales:\n", L)
# Création d'une référencxe à la liste par simple assignation
L_ref = L
# Création d'une copie de la liste
L_copie = list(L)
# Modification de la liste initiale
L[1] = 2
print("Modification de la liste L:")
print("La liste L a bien, été modifiée:", L)
print("La liste L_ref a aussi été modifiée car il s'agit juste d'une référence vers la liste L:", L_ref)
print("La copie L_copie n'a pas été modifiée:", L_copie)
Explanation: Si on a besoin de modifier une liste ou un dictionnaire, mais que l'on veut garder une trace des objets initiaux, il faut commencer par en créer une copie, il ne suffit pas de créer une variable suplémentaire sans quoi cette variable serait elle aussi modifiée si l'objet initial changeait: l'assignation est dite par référence dans ce cas.
End of explanation
chiffre = input("Entrer la valeur du chiffre souhaité: ")
print(chiffre)
Explanation: Entrée des données
Dans cette phase peut aussi figurer ce qu’on appelle l’entrée des
données, qui peut se manifester par la saisie de caractères ou de
nombres sur le clavier, ou la lecture de la position du pointeur de la
souris, ou encore par la lecture d’un fichier contenant ces nombres ou
caractères.
Il s’agit aussi de repérer les résultats intermédiaires qu’il est bon de
mémoriser pour la suite car indispensables au traitement.
Il est parfois utile d’utiliser des variables auxiliaires pour ne pas
perturber les données initiales.
Entrée des données au clavier
End of explanation
print(type(chiffre))
chiffre*10
Explanation: Attention cependant, cette valeur est une chaîne de caractère, et les opérations sont celles des strings.
End of explanation
chiffre = int(chiffre)
10*chiffre
Explanation: Il convient de la convertir un nombre entier ou flottant avant d'utiliser la valeur.
End of explanation
fichier = open('data/lorem.txt')
fichier.read()
Explanation: Lecture d'un fichier
Voici par exemple comment ouvrir et lire un fichier appelé lorem.txt
contenu dans le répértoire data du dossier courant.
End of explanation
fichier = open('data/lorem.txt')
fichier.readline()
Explanation: Dans la sortie précédente, les caractères \n représentent les sauts de
ligne, on peut aussi lire le fichier ligne par ligne.
End of explanation
<END_TASK>