diff --git a/Chapter_4/ex1.py b/Chapter_4/ex1.py
new file mode 100644
index 0000000000000000000000000000000000000000..8b5ac2148a1cdccf21ebde115ef177637dbf26a8
--- /dev/null
+++ b/Chapter_4/ex1.py
@@ -0,0 +1,35 @@
+import math
+
+
+def get_fibonnacci(n_numbers):
+    fibo = [1,1]
+    if n_numbers <= 2:
+        return fibo[:n_numbers]
+    for i in range(2,n_numbers):
+        fibo.append(fibo[-1] + fibo[-2])
+    return fibo
+
+def is_prime(number):
+    if number < 2 :
+        return False
+    if number == 2:
+        return True
+
+    for test in range(2,int(math.sqrt(number))):
+        if (number % test) == 0:
+            return False
+    return True
+
+
+n_numbers = int(input("Combien de nombres voulez-vous ?"))
+
+for (index,fib) in enumerate(get_fibonnacci(n_numbers)):
+    to_print = "Number {0} : {1} ; ".format(index,fib)
+    if is_prime(fib):
+        to_print += "is prime"
+    else:
+        to_print += "isn't prime"
+    print(to_print)
+
+
+
diff --git a/Chapter_4/ex2.py b/Chapter_4/ex2.py
new file mode 100644
index 0000000000000000000000000000000000000000..d270b161253e8f7d83ab63e2d46dc8503982ea95
--- /dev/null
+++ b/Chapter_4/ex2.py
@@ -0,0 +1,12 @@
+
+
+
+def factorial(N):
+    if N < 2:
+        return 1
+    else:
+        return N*factorial(N-1)
+
+
+for i in range(0,10):
+    print("{0}! = {1}".format(i,factorial(i)))
diff --git a/Chapter_4/ex3.py b/Chapter_4/ex3.py
new file mode 100644
index 0000000000000000000000000000000000000000..f554caf84fe767131b890fd51cab0f0b078936b1
--- /dev/null
+++ b/Chapter_4/ex3.py
@@ -0,0 +1,22 @@
+
+
+def is_perfect(number):
+    if type(number)==float:
+        print("Warning, {0} is a float. The function will consider it to be {1} instead.".format(number,int(number+0.5)))
+        number = int(number+0.5)
+    elif type(number) != int:
+        print("Error, cannot understand the user input : {0}".format(number))
+        return False
+
+
+    sum_div = 0
+    for div in range(1,number+1):
+        if number%div == 0:
+            sum_div += div
+    return sum_div == 2*number
+
+
+test_cases = [1,1.0, 1.49 , 1.51, "arboretum", 2,3,4,5,6,7,8,9,10,28,496]
+
+for test in test_cases:
+    print("Trying {0} : {1}".format(test,is_perfect(test)))
diff --git a/Chapter_4/ex4.py b/Chapter_4/ex4.py
new file mode 100644
index 0000000000000000000000000000000000000000..912d10f9132497eb3fc5cda655f4d21672032577
--- /dev/null
+++ b/Chapter_4/ex4.py
@@ -0,0 +1,10 @@
+import timeit
+
+def multiplication(x,y):
+    if y < 2:
+        return x
+    else:
+        return x+multiplication(x,y-1)
+
+
+print(multiplication(6,7))