Python par la pratique: exercices corrigés

 

1.   Algorithmique et programmation

2.  Variables numériques & Opérations

3.  L'entrée des valeurs par l'utilisateur

4.  L'affichage à l'écran

5.  L'instruction conditionnelle if

6.  La boucle bornée for

7.  La boucle non bornée while

8.  Les Fonctions

9.  Les listes et les chaînes

10. Les fichiers

 

Au programme :

1. Algorithme et programmation

Un algorithme est une suite d’instructions qui s’enchaînent dans un ordre déterminé et qui font intervenir la plupart du temps des variables.

Il peut s’écrire en langage naturel ou en langage informatique.

Programmer un algorithme consiste à l’écrire dans un langage informatique, ici Python, il devient alors un programme
(on parle aussi de script).

Lorsque l’on écrit du code informatique, il est important de le commenter afin de le rendre plus compréhensible pour les autres et pour soi-même. Les commentaires ne sont pas interprétés par Python et commence par un dièse.

# un commentaire en Python

2. Variables numériques & Opérations

Une variable est comme une petite boite dans laquelle on peut stocker des données, nombre, chaîne de caractères, valeur entrée par l’utilisateur...

A chaque donnée est associé un nom et un type.

Le nom permet de désigner la donnée et le type permet de préciser la nature de cette donnée, ce qui détermine les opérations que l’on peut lui appliquer.

Les variables qui stockent des valeurs numériques sont appelées variables numériques. Pour stocker une valeur dans une variable, on écrit une instruction d’affectation.

nom_de_la_variable = valeur

Affectation en Python :

On affecte la valeur 7,5 à la variable longueur.

longueur = 7.5

Un nom de variable ne doit pas contenir d’espace. Il est composé de lettres, de chiffres (pas en première position) et on utilise le tiret du bas (underscore) pour remplacer les espaces.

>>> a = 22
>>> b = 7
>>> a + b
29
>>> a - b
15
>>> a*b
154
>>> a/b
3.142857142857143
>>> a**4                  # puissance entière
234256
>>> from math import sqrt # importe la fonction racine carrée 
>>> sqrt(a)
4.69041575982343
>>> a//b                  # quotient entier
3
>>> a%b                   # reste de la division euclidienne
1

Opérations avec les variables numériques :

3. L’entrée des valeurs par l’utilisateur

Souvent lors de la conception d’un programme, on écrit des instructions qui invitent l’utilisateur à entrer des données.

 

Dans l’exemple ci-dessous la fonction input() affiche le message "Entrer le nombre de boules dans l’urne :".

Par défaut cette fonction renvoie une chaîne de caractère (même si l’utilisateur a saisi un nombre entier).

 

On utilise la fonction int() pour que la valeur affectée à la variable n soit bien un nombre entier.

n = int(input("Entrer le nombre de boules dans l'urne :"))

Dans l’exemple ci-dessous la fonction float() va convertir la valeur saisie par l’utilisateur en un nombre réel.

x = float(input("Entrer l'abscisse du point A :"))

4. L’affichage à l’écran

La fonction print() permet d’afficher à l’écran un message ou la valeur stockée dans une variable.

Exemples.

Affichage de la valeur stockée dans une variable :

nombre = 4
print(nombre)      # affiche 4

Affichage d’une chaîne de caractères : On utilise indifféremment des guillemets simples ou doubles.

print("nombre")    # affiche nombre
print('nombre')    # affiche nombre

Le caractère spécial \n correspond à un retour à la ligne :

print("Une liste :\n* item 1\n* item 2") # affiche Une liste:
                                         #         * item 1
                                         #         * item 2

Affichage d’une chaîne de caractères et de la valeur affectée à une variable :

distance = 8
print('la distance est égale à ', distance) 
# affiche la distance est égale à 8

001 - Déclarer des variables

 Notion abordée: les variables

 

On commence avec ce premier exercice, qui consiste à déclarer différents types de variables.

 

La variable prenom qui doit contenir la chaîne de caractères Pierre.

La variable age qui doit contenir le nombre 20.

La variable majeur qui doit contenir le booléen vrai.

La variable compte_en_banque qui doit contenir le nombre à virgules 20135,384.

La variable amis qui doit contenir une liste contenant les trois chaînes de caractères: Marie, Julien, Adrien.

 

001 - Déclarer des variables

Correction

 

prenom = "Pierre"
age = 20
majeur = True
compte_en_banque = 20135.384
amis = ["Marie", "Julien", "Adrien"]

print(prenom)
print(age)
print(majeur)
print(compte_en_banque)
print(amis)

002 - Erreur déclaration variable

 Notion abordée: les variables

 

Une erreur s'est glissée dans la déclaration de variable suivante, saurez-vous la retrouver ?

 

site_web = 'Udemy"
print(site_web)

002 - Erreur déclaration variable

Correction

 

Pour définir une chaîne de caractères, il faut utiliser le même guillemet en ouverture et en fermeture. On distingue les guillemets simples (') et les guillemets doubles ('')

 

site_web = "Udemy"
print(site_web)

003 - Convertir une variable d'un type à l'autre

Notion abordée: les variables

Dans cet exercice, nous allons afficher un nombre à l'intérieur d'une chaîne de caractères.

Python ne permet pas de concaténer une chaîne de caractères avec un nombre, il va donc falloir convertir le nombre en chaîne de caractères.

nombre = 15
print("Le nombre est " + nombre)

003 - Convertir une variable d'un type à l'autre

Correction

Pour convertir un nombre en chaîne de caractères on utilise la fonction str.

Pour convertir une chaîne de caractères en entier on utilise la fonction int.

Attention : si vous essayez de convertir une chaîne de caractère qui ne contient pas un nombre en entier avec la fonction int, vous aurez une erreur !

nombre = 15
print("Le nombre est " + str(nombre))

004 - Trouver la valeur d'une variable

 Notion abordée: les variables

 

Pour réussir l'exercice vous devez deviner la valeur que contient la variable a :

 

a = 3
b = 6
a = b
b = 7

print(a)

 Même exercice mais pour a et b (que peut-on déduire?) :

a = 5
b = 7

a = a+b
b = a-b
a = a-b

004 - Trouver la valeur d'une variable

Correction

 

Dans le premier cas on a a=6

 

Dans le deuxième cas on a a=7 et b=5. En fait le code précédent a inversé les valeurs de a et b.

 

Il existe un autre moyen pour inverser la valeur de deux variables en Python, par exemple à l'aide d'une troisième variable (nommée par exemple c).

005 - Ajouter un séparateur à print

 Notion abordée: la fonction print

 

Dans cet exercice, nous allons utiliser le séparateur (+) entre les variables a, b et c qui contiennent respectivement les valeurs 2, 6 et 3.

Votre script doit donc initialiser ces variables et afficher :

 

2+6+3

 

 

 

005 - Ajouter un séparateur à print

Correction

Ici, nous séparons donc les trois variables que nous affichons avec la fonction print, par la chaîne de caractère " + ", ce qui permet d'afficher le résultat suivant : 2 + 6 + 3

 

a = 2
b = 6
c = 3
print(a, b, c, sep=" + ")

006 - Coder des instructions Python simples

Notion abordée: les variables, print, les calculs et input

Voici une suite d'instructions écrites en français qu'on vous demande de traduire en langage python.

 

  1. Demander un entier à l'utilisateur, le stocker dans une variable x.
  2. La variable a va stocker le calcul de 8*x
  3. La variable b va stocker le caclul de x+9
  4. La variable c va stocker le calcul de a+b
  5. Afficher c

 

Quelle est la valeur finale affichée pour x=2 ?

006. Coder des instructions python simples

Correction

 

x = int(input('Rentrez la valeur de x : '))

a = 8*x
b = x + 9
c = a + b

print(c)

007 - Coder des instructions Python simples (2)

Notion abordée: les variables, print, les calculs et input

Voici une suite d'instructions écrites en français qu'on vous demande de traduire en langage python.

 

  1. Demander un entier à l'utilisateur, le stocker dans une variable N.
  2. La variable a va stocker le calcul de 9*N
  3. La variable b va stocker le caclul de 6*a
  4. Afficher b

 

Quelle est la valeur finale affichée pour N=5 ?

007 - Coder des instructions python simples (2)

Correction

N = int(input('Rentrez la valeur de N : '))

a = 9*N
b = 6*a

print(b)

5. L’instruction conditionnelle if

Il n’est pas rare d’avoir à écrire dans un algorithme une instruction du type :

si CONDITION alors INSTRUCTION1 sinon INSTRUCTION2

if condition(s):
    instruction1(s)
else:
    instruction2(s)

Syntaxe en Python :

Pour délimiter les blocs d’instructions Python utilise les : et l’indentation (décalage du retour à la ligne vers la droite).
Les mots clés utilisés sont if, else et elif (contraction de else if).

Exemples :

Dans l’exemple ci-dessous, on teste la condition x > 0.

Si cette condition est vérifiée, le message s’affiche et si ce n’est pas le cas, il ne se passe rien. 

x = float(input("Entrer un nombre x :"))
if x > 0:
	print(x, " est un nombre strictement positif.")

Dans l’exemple ci-dessous, on teste toujours la condition x > 0. Si cette condition n’est pas vérifiée, le programme affiche à présent le deuxième message 

x = float(input("Entrer un nombre x :"))
if x > 0:
    print(x, " est un nombre strictement positif.")
else:
    print(x, " est un nombre négatif ou nul.")

Ici on teste une deuxième condition x < 0. Si les deux conditions ne sont pas vérifiées, le programme affiche le troisième message:

x = float(input("Entrer un nombre x :"))
if x > 0:
    print(x, " est un nombre strictement positif.")
elif x < 0:
    print(x, " est un nombre strictement négatif.")
else:
    print("x est égal à 0.")

Les conditions x > 0 et x < 0 sont des booléens, si elles sont vérifiées elles renvoient True et dans le cas contraire elles renvoient False.

Opérateurs de comparaison :

2 == 2     # True     == est le signe égal en Python
4 != 2     # True     != est le signe "est différent de" 
4 > 2      # True
4 < 2      # False
4 > 4      # False
4 >= 4     # True
4 <= 2     # False

Opérateurs logiques and et or :

a = True
b = False

a and a     # True
a and b     # False
b and a     # False
b and b     # False
a or a      # True
a or b      # True
b or a      # True
b or b      # False

008- Tester le type d'une variable

 Notion abordée: les variables

Dans cet exercice nous allons tester le type d'une variable à l'aide de la fonction type(). Le but est d'afficher un message si notre variable est du type chaîne de caractère. Sinon on affiche qu'elle n'en est pas une.

 

prenom = "Pierre"

# INSÉRER VOTRE CONDITION ICI.
# Votre condition doit vérifier si la variable prenom est bien une chaîne de caractère. 
# Ici c'est le cas, votre condition doit donc être vraie et 
# printer la phrase "La variable est une chaîne de caractères".

# Sinon elle doit afficher "La variable n'est pas une chaîne de caractères"

Et si on avait initialisé la variable prenom à 0 ?

Modifier le programme pour tester si une variable est de type entier.

008- Tester le type d'une variable

 Correction

 

prenom = "Pierre"

if type(prenom) == str:
  print("La variable est une chaîne de caractères") 
else:
  print("La variable n'est pas une chaîne de caractères")


 

009 - Tester une condition if

 Notion abordée: les conditions en python

 

Écrire un programme qui :

  1. Crée une variable Pluie de type booléen et qui met sa valeur à False.
  2. Crée une variable seuil de type float et met sa valeur à 20.0
  3. Demande une température à l'utilisateur, stockée dans une variable réelle nommé température.
  4. Teste la condition suivante:
  •     Si pluie est égale à False et température est supérieure à seuil   affiche "Allons au parc".
  •     Sinon affiche "Allons au cinema".

 

009. Tester une condition if

pluie=False
seuil=20.0
température=int(input("Saisir une température: "))
if pluie == False and température>x:
    print("Allons au parc")
else : 
    print("Allons au cinéma")

010 - Tester une condition if (3)

Notion abordée: les conditions en python

 

Écrivez un programme qui :

Demande à l'utilisateur son prénom et stocke le résultat dans une variable prénom

Demande à l'utilisateur son age et stocke le résultat dans une variable.

 

Affiche "bonjour" suivi du prénom "vous êtes majeur(e)" si la personne est majeure et "bonjour" suivi du prénom "vous êtes mineur(e)" si la personne est mineure.

 

010 - Tester une condition if (2)

Notion abordée: les conditions en python

 

Un intervalle  est défini par deux valeurs X et Y initialisées par l'utilisateur.

Ecrivez un programme qui affiche "la valeur est dans l'intervalle" si une troisième valeur donnée par l'utilisateur est comprise dans l'intervalle.

 

010 - Tester une condition if (2)

Notion abordée: les conditions en python

 

Un rectangle dans le plan est défini par deux valeurs points (X1,Y1) et (X2,Y2) initialisés par l'utilisateur.

 

Ecrivez un programme qui affiche "le point est dans le rectangle" si le point de coordonnées (X,Y) est inclus dans le rectangle.

 

011 - Tester une condition if (3)

Notion abordée: les conditions en python

 

Écrivez un programme python qui demande à l'utilisateur d'entrer trois variables a, b et c et qui indique si le triangle abc est un triangle rectangle.

 

Indice: Testez toutes les combinaisons possibles

 

011. Tester une condition if (6)

Correction

a = float(input("a = "))
b = float(input("b = "))
c = float(input("c = "))

if a**2+b**2==c**2:
    print("Triangle rectangle")
    
elif a**2+c**2==b**2:
    print("Triangle rectangle")
    
elif b**2+c**2==a**2:
    print("Triangle rectangle")
    
else:
    print("Triangle non rectangle")

6. La boucle bornée for

Lorsque l’on souhaite répéter une ou plusieurs instruction(s) un nombre défini de fois, c’est à dire connu à l’avance, on utilise une boucle for.

for variable in range():
    instruction(s)

Syntaxe en Python :

La fonction range() définit le nombre de passages dans la boucle et comme pour une instruction conditionnelle, le bloc d’instruction(s) est délimité par les : et l’indentation.

 

Soit n, m et k des nombres entiers :

  • range(n) : fait prendre à la variable les valeurs entières de 0 à n − 1 (n valeurs).
  • range(n, m) : fait prendre à la variable les valeurs entières de n à m − 1 (m − n valeurs).
  • range(n, m, k) : fait prendre à la variable les valeurs entières de n à m − 1 avec un pas de k.

Exemples :

for i in range(3):
    print(i)     # affiche 0
                 #         1
                 #         2
for i in range(21, 25):
    print(i)     # affiche 21
                 #         22
                 #         23
                 #         24
for i in range(7, 20, 3):
    print(i)     # affiche 7
                 # 10
                 # 13
                 # 16
                 # 19

Afficher sur la même ligne dans une boucle :

for i in range(3):
    print(i, end=" ")     # affiche 0 1 2
for i in range(3):
    print(i, end=", ")     # affiche 0, 1, 2,

En prenant un pas négatif on peut boucler dans l'autre sens :

for i in range(0, -10, -2):
    print(i)

# 0
# -2
# -4
# -6
# -8
for i in range(10, -1, -1):
    print(i, end="  ")

# Affiche 10  9  8  7  6  5  4  3  2  1  0

7. La boucle non bornée while

Lorsque l’on souhaite répéter une ou plusieurs instruction(s) un nombre inconnu de fois, on utilise une boucle while. Elle est parcourue tant quune condition est vérifiée. Le bloc d’instruction(s) est également délimité par les : et l’indentation.

while condition:
    instruction(s)

Syntaxe en Python :

Exemple de boucle while :

i = 0
while i < 10:
    print("Je ne bavarde pas en classe")
    i += 1

# Affiche:
# Je ne bavarde pas en classe
# Je ne bavarde pas en classe
# Je ne bavarde pas en classe
# Je ne bavarde pas en classe
# Je ne bavarde pas en classe
# Je ne bavarde pas en classe
# Je ne bavarde pas en classe
# Je ne bavarde pas en classe
# Je ne bavarde pas en classe
# Je ne bavarde pas en classe

Attention à la boucle infinie !

i = 11
while i != 10:
    print("Je ne bavarde pas en classe")
    i += 1    # La valeur n'atteindra jamais 10...

011 - Manipuler une boucle

 Notion abordée: les boucles

 

Qu'affiche le programme suivant ?

print("7x1 = ", 7x1)
print("7x2 = ", 7x2)
print("7x3 = ", 7x3)
  1. Comment afficher ceci avec une boucle while et une variable j initialisée à 1 ?
  2. En déduire un code qui affiche la table de 7 complète.
  3. Cette fois on utilise deux boucles imbriquées. L'une repose sur i qui va de 1 à 10 et l'autre sur j qui va de 1 à 10. Ecrivez toutes les tables de multiplication de 1 à 10.

011 - Manipuler une boucle

 Correction

j=1
while j<=10:
    i=1
    while i<=10:
        print(j,"*",i,'=',j*i)
        i+=1
    j+=1
i = 1
while i <= 10:
    print("7*",i,"=",7*i)
    i +=1

012 - Manipuler une boucle (somme)

 Notion abordée: les boucles

 

Ecrire un programme qui affiche la somme des entiers de 1 à N, la valeur N étant entrée par l'utilisateur.

 

012 - Manipuler un boucle (somme)

Correction

 

somme = 0
N = int(input("Entrez le nombre final de la somme: "))

for i in range(1, N+1):
  somme += i
  
print("La somme des entiers de 1 à ", N, "est: ", somme)

013 - Manipuler une boucle (2)

 Notion abordée: les boucles

 

Écrire une  qui demande un entier N et qui renvoie la somme des entiers de 1 à N élevés au cube.

013. Manipuler une boucle (2)

Correction

somme = 0
N = int(input("Entrez le nombre final de la somme: "))

for i in range(1, N+1):
  somme += i**3
  
print("La somme des entiers de 1 à ", N, "est: ", somme)

9. Listes et chaines

Les listes sont des tableaux dans lesquels on peut mettre plusieurs valeurs. Les valeurs sont séparées par des virgules. Toutes les valeurs de la liste sont comprises entre un crochet ouvrant et un crochet fermant.

 

1.  Créer une liste vide

 

liste = []
liste = [1,2,3]

2. Créer une liste avec plusieurs valeurs

On peut ajouter des éléments à la fin de la liste grâce à la fonction append

 

liste = []
liste.append(1)
liste.append("yes")

print(liste)    # Affiche [1, "yes"]

 

On voit qu'il est possible de mélanger des éléments de types différents. On peut même faire rentrer une liste dans une liste.

 

3.  Afficher les items d'une liste ou d'une chaîne

 

liste = ["e","p","s"]
print(liste[0])    # Affiche e

chaine = "abc"
print(chaine[0])    # Affiche a

On accède aux sous éléments d'une liste et d'une chaîne de la

même façon. Mais si les listes peuvent être modifiées avec les crochets ([]). Les chaînes ne peuvent pas.

 

3.  Afficher les items d'une liste ou d'une chaîne

On accède aux éléments d'une liste (ou d'une chaine) grâce aux crochets. Les nombres entre les crochets, qui suivent le nom de la liste, expriment l'indice de la valeur à afficher.

liste = ["e","p","s"]
print(liste[2])    # Affiche s

liste[2] = "z"    # On change le 3ème élément

print(liste[2])    # Affiche z

chaine = "abc"
print(chaine[2])    # Affiche c

chaine[2] = "z"    # ERREUR !! On ne peut pas modifier une chaîne
# avec les crochets

4.  Supprimer les éléments d'une liste

 

liste = ["a","b","c"]

del liste[1]    # 2ème élément on compte à partir de 0!

print(liste)    # Affiche ['a','c']

On peut supprimer un élément par sa valeur. Pour ça on utilise remove():

 

liste = ["a","b","c"]

liste.remove("a")    # Ne marche que pour le 1er "a"...

print(liste)    # Affiche ['b','c']

5.  Compter le nombre d'éléments   (liste et chaines)

Pour compter le nombre d'éléments d'une liste on utilise la fonction pédefinie len():

liste = [1,2,3,5,10]
print(len(liste))    # Affiche 5

chaine = "Bonjour tout le monde !"
print(len(chaine))    # Affiche 23

6.  Manipuler les listes et les chaînes

Voici quelques astuces pour manipuler les listes et les chaînes:

liste = [1, 10, 100, 250, 500]
print( liste[0] )    # Affiche 1

print( liste[-1] )    # Seulement le dernier élément
500

7.  Boucler sur les listes

Dans la boucle for... range associée à une liste et utilisée dans l'exemple ci-dessous, la variable i représente les indices de la liste. Chacun des liste[i] représente la valeur stockée pour chacun des indices (on commence à 0) :

liste = [1, 10, 100, 250, 500]

for i in range(len(liste)):
    print(i, liste[i], sep=" : ")

# Affiche chaque valeur de la liste accompagnée
# de son indice, séparés par  " : "

# 0 : 1
# 1 : 10
# 2 : 100
# 3 : 250
# 4 : 500

8.  Deuxième boucle sur les listes

Lorsqu'on veut parcourir une liste (ou une chaîne de caractères) on peut se demander s'il est toujours utile d'accéder à l'indice des éléments...

Si ça n'est pas le cas on peut utiliser la boucle for pour boucler directement sur les valeurs de la liste et pas sur les indices, voici comment faire:

 

liste = [1, 10, 100, 250, 500]

for v in liste:
    print(v, end=" ")

# Pas de recours à range(len(...))
# On affiche directement les valeurs. Pas besoin d'indices !
# 1 10 100 250 500

11.  Boucler sur les chaines

 

Les boucles sur les chaines obéissent au même principe:

 

chaine = "hello world!"
for lettre in chaine:
    print(lettre)

# Affiche chacune des lettres une par une - sans indices
# h
# e
# l
# l
# o
#
# w
# o
# r
# l
# d
# !

014 - Liste et suites

 Notion abordée: listes

 

On définit par récurrence la suite suivante:

U0 = 0

U1 = 1

Un+1 = 7*Un + 4*Un-1

Écrire un programme qui:

  1. Demande à l'utilisateur un rang N
  2. Stocke U0, U1 puis tous les termes successifs de la suite dans une liste jusqu'au rang N
  3. Affiche le terme de rang N

015- Listes, chaînes

 Notion abordée: les listes, les chaînes

 

En informatique on peut représenter une chaîne d'ADN par une suite de caractères "A", "T", "G" ou "C" ajoutés les uns aux autres. Si la chaîne est constituée de tout autre élément alors c'est une séquence d'ADN invalide.

 

Ecrire un programme qui demande à l'utilisateur une chaine et qui:

  1. Compte le nombre A, de T, de G ou de C
  2. Affiche dans un print unique le nombre de A, de T, de G ou de C
  3. Affiche si c'est une séquence d'ADN valide ou pas.

016 - Minimum, maximum d'une liste

 Notion abordée: les listes, les boucles, les fonctions

 

On revient aux racines de l'algorithmique avec ces techniques pour retrouver le maximum ou le minimum d'une liste.

 

Écrire un programme qui affiche le minimum d'une liste définie par vous-même.

Écrire un programme qui affiche le maximum d'une liste définie par vous-même.

Écrire un programme qui renvoie la moyenne des éléments d'une liste qui sont soit multiples de 2 soit multiples de 3.

12.  Transformer une liste en string

Pour "casser" une chaîne de caractères, c'est-à-dire pour la transformer en liste, on utilise une fonction prédéfinie:

La fonction split

Cette fonction s'utilise de la manière suivante:

ma_chaine = "Roger:DURAND:Strasbourg"
print(ma_chaine.split(":"))
# Affiche ['Roger', 'DURAND', 'Strasbourg']

ma_chaine2 = "Roger;DUPONT;Bordeaux"
print(ma_chaine2.split(";"))
# Affiche ['Roger', 'DUPOND', 'Bordeaux']

13.  Trouver un item dans une liste

Le mot-clé de Python, in est très pratique pour tester si un  élément appartient à une liste ou non :

 

On renvoie True si l'élément est dans la liste, False sinon.

Dans la console python, vous pouvez effectuer les tests suivants (attention ne recopiez pas ">>>" ce marquage est automatique et signifie que vous parlez à la console Python) :

>>> liste = [1,2,3,5,10]
>>> 3 in liste  # 3 est-il dans la liste ?
True
>>> 11 in liste  # 11 est-il dans la liste ?
False
>>> a = 3
>>> if a in liste:
>>>     print(a, "est dans la lsite")

017 - Listes et opérateur in

 Notion abordée: listes, fonctions et opérateur in

 

Ecrire un programme qui renvoie la copie d'une liste en ayant supprimé tous ses duplicatas.

 

La liste est choisie par l'utilisateur.

 

Par exemple:

Liste = [2,2,2,3,4,5,7,5]

Liste2 = []

 

A la fin Liste2 aura [2,3,4,7,5]

 

018 - Listes et opérateur in

 Notion abordée: listes et chaînes

 

Un palindrome est un mot qui peut se lire de gauche à droite ou de droite à gauche.

 

Par exemple anna est un palindrome.

 

Ecrire un programme qui demande à l'utilisateur d'entrer un mot dans une variable et qui indique si c'est un palindrome ou pas.

10. Les fichiers

De nos jours la plupart des données avec lesquelles nous travaillons sont sous forme de fichiers (textes, documents, mp3, etc...), il est donc important de savoir manipuler ce format.

 

Les fichiers en Python sont lus lignes par lignes (ou caractères par caractères), en partant du début vers la fin.

 

De nombreuses techniques de manipulation existent...

1.  Fichiers textes: introduction

Un fichier texte est un fichier qui peut être ouvert avec un éditeur de texte (par exemple avec le bloc notes de Windows). Les données stockées dans le fichier sont converties en chaînes de caractères pour être exploitées.

 f = open('Chemin_vers_fichier',mode)

Le premier argument est une chaîne de caractères contenant un chemin absolu ou relatif vers le fichier. Le second argument est aussi une chaine de caractères qui indique la manière dont le fichier va être utilisé.

2.  Chemin absolu

Quand on décrit une cible (un fichier ou un répertoire) sous la forme d'un chemin absolu, on décrit la suite des répertoires menant au fichier, depuis le répertoire racine. Sous Windows, pour le répertoire racine on partira du nom de volume (C:\,D:\…).

 

Sous les systèmes Unix, ce sera depuis (/).

Par exemple, sous Windows, si on a un fichier nommé fic.txt, contenu dans un dossier test, lui-même présent sur le disque C:, le chemin absolu menant à notre fichier sera C:\test\fic.txt.

3.  Chemin relatif

Quand on décrit la position d'un fichier grâce à un chemin relatif, cela veut dire que l'on tient compte du dossier dans lequel on se trouve actuellement.

 

Ainsi, si on se trouve dans le dossier C:\test et que l'on souhaite accéder au fichier fic.txt contenu dans ce même dossier, le chemin relatif menant à ce fichier sera tout simplement fic.txt.

 

Maintenant, si on se trouve dans C:, notre chemin relatif sera test\fic.txt.

4. Ouverture d'un fichier  

Tout d'abord il faut ouvrir le fichier en Python. Pour ce faire, on utilise la fonction open. Elle prend deux paramètres:

  • Le chemin absolu ou relatif menant au fichier à ouvrir;
  • Le mode d'ouverture du fichier.

Les deux paramètres sont sous forme de chaînes de caractères. Voici les principaux modes:

  • 'r': Ouverture en lecture (read).
  • 'w': Ouverture en écriture (write). Le précédent contenu du fichier est écrasé. Si le fichier n'existe pas il est crée.
  • 'a': Ouverture en ajout (append). On écrit à la fin du fichier sans écraser l'ancien contenu. Si le fichier n'existe pas il est crée.
  • 'r+': Ouverture en lecture/ecriture.

5.  Ouverture d'un fichier (2)

Dans l'exemple qui suit, le chemin relatif d'accès au fichier est représenté par le nom du fichier lui-même. On suppose donc qu'il est exactement dans le même dossier que celui où tourne le programme Python:

# Ouverture en lecture
mon_fichier = open("mon_fichier.txt","r")

# Ouverture en écriture
f = open("testFichier.txt","w")

# Ouverture en ajout
file = open("essai.txt","a")

Dans l'exemple ci-dessus: mon_fichier, f et file sont appelés descripteur de fichiers. Ce sont des intermédiaires qui servent à la manipulation du fichier que l'on vient d'ouvrir.

6.  Fermeture d'un fichier

Pour fermer un fichier préalablement ouvert avec open, on utilise la fonction close. Attention, la fonction s'applique sur le descripteur de fichier précédemment crée ( séparé par un (.) ).

# Ouverture en lecture
mon_fichier = open("mon_fichier.txt","r")

# Fermeture
mon_fichier.close()

Tout l'intérêt consiste à faire des opérations entre l'ouverture et la fermeture mais vous êtes obligé de fermer le fichier sinon vos modifications ne sont pas prises en compte...

7.  Ecriture dans un fichier

Ecrire dans un fichier se fait avec la méthode write appliquée au descripteur de fichier. Il prend en paramètres la chaîne à écrire. La fonction retourne une valeur qui est le nombre de caractères (ou d'octets ajoutés):

f = open("test.txt","w")
f.write("Chaine à ajouter\n")

# Ouvrez le fichier et...
# vous verrez la chaine apparaître

8.  Lecture d'un fichier

La lecture se fait toujours à partir de la position courante.

Trois méthodes pour lire dans un fichier:

  • f.read(taille) lit et retourne taille caractères (octets), sous la forme d'une chaîne si le fichier est un fichier texte; f.read() (sans paramètres) lit retourne tout le contenu du fichier.
  • f.readline() retourne toute la ligne courante (fin de ligne incluse)
  • f.readlines() retourne le reste du fichier sous la forme d'une liste contenant un élément par ligne du fichier.

Si la fin du fichier est atteinte, il n'y a pas d'erreur. La chaine retournée par read et readline sera juste vide. La liste retournée par readlines sera juste vide.

Remarque: La chaine vide est identifiée par "" ou '' en Python et la liste vide par []

 

9.  Exemples de lecture de fichier

On utilise la méthode readline pour lire une ligne du fichier ou pour lire les lignes du fichier une par une:

f = open('testFichier.txt', 'r')
# On lit la première ligne
ligne = f.readline()

# On teste si la fin du fichier est atteinte
while ligne != '':
    # On affiche la dernière ligne lue
    print(ligne)
    # On lit la suivante
    ligne = f.readline()
f.close()

10.  Exemples de lecture de fichier (2)

On utilise readlines pour stocker toutes les lignes de notre fichier dans un tableau:

f = open('testFichier.txt', 'r')
# Lecture de toutes les lignes du fichier...
# ...et stockage de ces lignes dans un tableau
lignes = f.readlines()

f.close()

# On affiche la quatrième ligne du fichier
print(lignes[3])

10.  Exemples de lecture de fichier (3)

On utilise read pour lire le fichier caractères par caractères ou alors pour tout lire d'un coup:

# Exemple 1: Compter le nombre de a dans un fichier
compteur = 0
f = open("test.txt", "r")
caractere = f.read(1)  # On lit un caractère
while caractere != '':  # Tant qu'on est pas à la fin
    if caractere == "a":  # Si le caractère c'est a
        compteur += 1  # On compte un de plus
    caractere = f.read(1)  # On lit le suivant

f.close()
print("Le nombre de 'a' dans le fichier est égal à: ", a)

# Exemple 2: Afficher tout le fichier
file = open("newfile.txt", "r")
text = file.read()
print(text)
file.close()

11. Jouons avec les fichiers

Quelques codes pour bien comprendre les manipulations de fichiers:

f = open("fichier.ext", "w") # Ouvre en écriture
f.write("bonjour")    # Ecrit bonjour dedans
f.close()    # Ferme le fichier
f = open("fichier.ext", "r") # Ouvre en lecture
f.read(3) # Lit les 3 premiers caractères: "bon"
a = f.read(4) 
# Lit les 4 caractères suivants "jour" 
# ET  les stocke dans une variable nommée a
f.close()    # Ferme le fichier
print(a)    # Affiche le résultat final

# Affiche "jour"

12. Jouons avec les fichiers (2)

Un dernier code pour bien comprendre les manipulations de fichiers:

f = open("test.ext","w")
f.write("une ligne\n")  # \n sert à sauter la ligne..
f.write("Une autre ligne\n")
f.write("unE dernière ligne\n")
f.write("en fait non\n")
f.close()

f = open("test.ext", "r+")  # Mode lecture/ecriture
f.readline()  # On lit toute la ligne
f.read(5)  # On lit 5 caractères
f.readline() # On lit le reste de la ligne
a = f.read(3)
# On lit 3 caractères qu'on stocke dans variable a
print(a)
# Affiche... :-) ?
f.close()

Python par la pratique, exercices corrigés 1

By Henri H

Python par la pratique, exercices corrigés 1

Quelques exercices corrigés pour bien comprendre le langage python

  • 233