diff --git a/Chapter_3/corpus.py b/Chapter_3/corpus.py
index e267400b14a093f5fd41ddef9e620eefa8681b7d..a8dcffb870e08426561d11c77d4e8a67699ffaad 100644
--- a/Chapter_3/corpus.py
+++ b/Chapter_3/corpus.py
@@ -7,7 +7,6 @@ Débuts chaotiques
 
 Genève. Lundi 13 mars 1989. Une page de l’histoire s’écrit au CERN, l’Organisation européenne pour la recherche nucléaire. L’informaticien britannique Tim Berners-Lee dépose dans le bureau de son supérieur un document de quelques pages, sobrement intitulé Gestion de l’information : proposition. Tim Berners-Lee constate qu’il est parfois difficile d’échanger et d’accéder aux innombrables publications scientifiques éparpillées dans le monde entier. Pour y parvenir, l’article suggère l’association de deux technologies qui existaient à l’époque.
 Le CERN est aujourd'hui considéré comme le berceau du World-Wide Web.
-Le CERN est aujourd'hui considéré comme le berceau du World-Wide Web. - © J. Covolo
 
 La première est l’internet, inventé en 1974 par les américains Vint Cerf et Bob Khan. Il permet à des ordinateurs de s’échanger très rapidement des informations au moyen du réseau téléphonique, quel que soit leur emplacement.
 
@@ -227,7 +226,7 @@ C'est une découverte scientifique majeure dans la compréhension de l'univers e
 
 C’était donc l’ambiance des grands jours le mercredi 4 juillet 2012 au département physique de la Faculté des sciences de l'UMons... Si la découverte du boson de Brout-Englert-Higgs laisse le commun des mortels assez indifférent, ici, on parle d'une avancée majeure.
 
-Il faut dire que cela fait près de cinquante ans que l'on cherchait à prouver l'existence de cette particule qui joue un rôle important dans la compréhension de la matière. Cette fois donc ça y est, il a été découvert au LHC. 
+Il faut dire que cela fait près de cinquante ans que l'on cherchait à prouver l'existence de cette particule qui joue un rôle important dans la compréhension de la matière. Cette fois donc ça y est, il a été découvert au LHC.
 
 Le LHC, c'est le plus grand accélérateur de particules du monde, il se trouve à Genève au CERN, le Centre Européen de Recherche Nucléaire. Evelyne Daubie y va régulièrement, elle fait partie des milliers de physiciens qui se relaient pour suivre des expériences.
 
diff --git a/Chapter_3/ex1.py b/Chapter_3/ex1.py
new file mode 100644
index 0000000000000000000000000000000000000000..69bb7977b013127fbb41055a5e138df5776109d4
--- /dev/null
+++ b/Chapter_3/ex1.py
@@ -0,0 +1,33 @@
+ 
+n_dim = int(input("Nombre de dimensions : "))
+
+u = [float(input("u_{0} = ".format(i))) for i in range(n_dim)]
+v = [float(input("v_{0} = ".format(i))) for i in range(n_dim)]
+
+print("Somme : ")
+for i in range(n_dim):
+    print (u[i]+v[i])
+
+
+prod_scal = 0
+for i in range(n_dim):
+    prod_scal += u[i]*v[i]
+print("Produit scalaire : {0}".format(prod_scal))
+
+
+if n_dim == 3:
+    prod_vec = [ u[1]*v[2] - u[2]*v[1],
+                -u[0]*v[2] + u[2]*v[0],
+                 u[0]*v[1] - u[1]*v[0]
+                ]
+    
+    print("Produit vectoriel : w = ({0}, {1}, {2})".format(prod_vec[0],prod_vec[1],prod_vec[2]))
+    prod_scal = 0
+    for i in range(n_dim):
+        prod_scal += prod_vec[i]*u[i]
+    print("u.w = {0}".format(prod_scal))
+    prod_scal = 0
+    for i in range(n_dim):
+        prod_scal += prod_vec[i]*v[i]
+    print("v.w = {0}".format(prod_scal))
+
diff --git a/Chapter_3/ex2.py b/Chapter_3/ex2.py
new file mode 100644
index 0000000000000000000000000000000000000000..5c189e2f963e4675c23f913218f05a1fd080ae19
--- /dev/null
+++ b/Chapter_3/ex2.py
@@ -0,0 +1,44 @@
+ 
+numbers = []
+last = 0
+while last >= 0:
+    last = int(input("Entrez un nombre : "))
+    numbers.append(last)
+
+numbers = numbers[:-1]
+
+print ("Les nombres sont {0}:".format(numbers))
+
+# Brute-force.
+# Each step, find the minimum of the vector and place it in the
+# first position.
+
+for index in range(len(numbers)):
+    minimum       = numbers[index]
+    minimum_index = index
+    for i in range(index+1,len(numbers)):
+        if numbers[i] < minimum:
+            minimum = numbers[i]
+            minimum_index = i
+    numbers[minimum_index] = numbers[index]
+    numbers[index] = minimum
+    
+print ("Les nombres tries : {0}".format(numbers))
+
+if len(numbers)%2 == 0:
+    print ("La medianne est : {0}".format(0.5*(numbers[int(len(numbers)/2)]+numbers[int(len(numbers)/2-1)])))
+else:
+    print ("La medianne est : {0}".format(numbers[int(len(numbers)/2)]))
+        
+
+moyenne = 0
+for x in numbers:
+    moyenne += x
+moyenne/=len(numbers)
+print("La moyenne est : {0}".format(moyenne))
+
+variance = 0
+for x in numbers:
+    variance += (x-moyenne)**2
+variance/=len(numbers)
+print("La variance est : {0}".format(variance))
diff --git a/Chapter_3/ex3.py b/Chapter_3/ex3.py
new file mode 100644
index 0000000000000000000000000000000000000000..845ddf297e0c159d31c7eccb5e000969b3344397
--- /dev/null
+++ b/Chapter_3/ex3.py
@@ -0,0 +1,24 @@
+
+txt="Les objectifs de Python en font un langage pedagogique ideal.C'est un langage     general-purpose:il s'adapte a toutes les applications"
+
+seperatorList = " ,.;-'\":\n/\\?+()’!°"
+
+n_words = 0
+words   = []
+
+while len(txt) > 0:
+    seperation = len(txt)
+    for sep in seperatorList:
+        sepPos = txt.find(sep)
+        if sepPos >= 0 and sepPos < seperation:
+            seperation = sepPos
+    if seperation > 0:
+        n_words+=1
+        txt=txt[seperation+1:]
+    elif seperation == 0:
+        txt=txt[seperation+1:]
+    else:
+        words.append(txt)
+        txt=""
+
+print("Il y a {0} mots dans la phrase.".format(n_words))
diff --git a/Chapter_3/ex4.py b/Chapter_3/ex4.py
new file mode 100644
index 0000000000000000000000000000000000000000..89375e1352f7b5153b567e545b068fe7b18b3651
--- /dev/null
+++ b/Chapter_3/ex4.py
@@ -0,0 +1,36 @@
+from corpus import texte
+
+seperatorList = " ,.;-'\":\n/\\?+()’!°"
+
+word_count = {}
+
+while len(texte) > 0:
+    seperation = len(texte)
+    for sep in seperatorList:
+        sepPos = texte.find(sep)
+        if sepPos >= 0 and sepPos < seperation:
+            seperation = sepPos
+    if seperation > 0:
+        word = texte[:seperation].lower()
+        if word in word_count.keys():
+            word_count[word] +=1
+        else:
+            word_count[word] = 1
+        texte=texte[seperation+1:]
+    elif seperation == 0:
+        texte=texte[seperation+1:]
+    else:
+        words.append(texte)
+        texte=""
+
+
+sorted_words = []
+for word,count in word_count.items():
+    if len(word) > 3:
+        sorted_words.append([count,word])
+
+sorted_words.sort(reverse = True)
+
+for count,word in sorted_words[:50]:
+    print ("{0:20} apparaît {1} fois".format(word,count))
+
diff --git a/Chapter_3/ex5.py b/Chapter_3/ex5.py
new file mode 100644
index 0000000000000000000000000000000000000000..ca25da86f2122b4eba100aaa5f30ed14ac3b3b17
--- /dev/null
+++ b/Chapter_3/ex5.py
@@ -0,0 +1,18 @@
+
+n_lines = int(input("Combien de lignes ? "))
+
+previous_line = [1]
+print ("{0:5} ".format(1))
+for line in range(1,n_lines):
+    new_line = [1]
+    for i in range(line-1):
+        new_line.append(previous_line[i+1]+previous_line[i])
+    new_line.append(1)
+    
+    txt_to_print = ""
+    for entry in new_line:
+        txt_to_print += "{0:5} ".format(entry)
+    print (txt_to_print)
+    previous_line = new_line
+        
+    
diff --git a/Chapter_3/ex6.py b/Chapter_3/ex6.py
new file mode 100644
index 0000000000000000000000000000000000000000..4aeaf5822d4d9e2101495e9a3d95a2be6f49c1b7
--- /dev/null
+++ b/Chapter_3/ex6.py
@@ -0,0 +1,80 @@
+
+n_lines  = 8
+n_col    = 15
+
+
+snake   = [[1,1]]
+apple   = [n_lines - snake[-1][0] - 1 , n_col - snake[-1][1] - 1]
+
+#Positions où mettre la pomme si la case prévue est déjà occupée.
+#On commence par des points proches des quatres coins
+#Puis, on met toutes les autres cases.
+
+default_apple_positions = [[1,1],[n_lines-1,n_col-1], [1,n_col-1],[n_lines-1, 1]]
+for i in range(n_lines):
+    for j in range(n_col):
+        default_apple_positions.append([i,j])
+        
+game_over = False
+
+while not game_over:
+    # Affichage du tableau de jeu
+    print ((n_col+2)*"-")
+    for line in range(n_lines):
+        txt_to_print = "|"
+        for col in range(n_col):
+            if [line,col] in snake:
+                txt_to_print += "@"
+            elif [line,col] == apple:
+                txt_to_print += "*"
+            else:
+                txt_to_print += " "
+        print(txt_to_print+"|")
+    print ((n_col+2)*"-")
+
+    
+    # Demande instruction :
+    move = ""
+    while not move in ["z","s","q","d"]:
+        move = input("move : ")
+    
+    new_head_position = [snake[-1][0], snake[-1][1]]
+    if move == "z":
+        new_head_position[0] -=1
+    elif move == "s":
+        new_head_position[0] +=1
+    elif move == "q":
+        new_head_position[1] -=1
+    elif move == "d":
+        new_head_position[1] +=1
+        
+        
+    if new_head_position in snake or new_head_position[0] >= n_lines or new_head_position[1] >= n_col or new_head_position[0] < 0 or new_head_position[1] < 0 :
+        game_over = True
+        break
+        
+    snake.append(new_head_position)
+    if not new_head_position == apple:
+        snake = snake [1:]
+    else:
+        #Trying to place apple..     
+        apple   = [n_lines - snake[0][0] - 1 , n_col - snake[0][1] - 1]
+        if apple in snake:
+            for apple_candidate in default_apple_positions:
+                if not apple_candidate in snake:
+                    apple = apple_candidate[:]
+                    break
+
+        if apple in snake:                        
+            game_over = True
+            
+            
+if len(snake) == n_lines*n_col:
+    print ("Congrats ! You have succesfully filled the grid ! Score : {0}".format(len(snake)))
+else:
+    print ("Better luck next time... Score : {0}/{1}".format(len(snake),n_lines*n_col))
+
+            
+    
+
+