diff --git a/20oct/myList.py b/20oct/myList.py new file mode 100644 index 0000000..790ab10 --- /dev/null +++ b/20oct/myList.py @@ -0,0 +1,148 @@ +""" + Nous ne pouvons utiliser que pop et append pour les lists +""" + +import math + + +def map(fun, it): + """execute la fonction sur chaques elements de la liste """ + ret = list() + for i in it: + ret.append(fun(i)) + return ret + + +def filter(test_fun, it): + """return a list of all el of it that passes test fun """ + ret = list() + for i in it: + v = test_fun(i) + if v: + ret.append(i) + return ret + + +def reduce(fun, it): + ret = fun(it[0], it[1]) + for i in range(2, len(it)): + ret = fun(ret, it[i]) + return ret + + +def prime_numbers(n): + """make a list of n first prime elements """ + ret = list() + cursor = 2 + while len(ret) < n: + check = True + for i in range(2, cursor): + if cursor % i == 0: + check = False + if check: + ret.append(cursor) + cursor += 1 + return ret + + +def is_prime(n): + if n == 0 or n == 1: + return False + for i in range(2, n): + if n % i == 0: + return False + return True + + +def insert(seq, n): + """insert n in the seq at the right position + :seq: List par ordre croissant + """ + ret = list() + cursor = None + for i in range(len(seq)): + if seq[i] < n: + ret.append(seq[i]) + else: + cursor = i + break + ret.append(n) + if cursor is None: + return ret + for j in seq[cursor:]: + ret.append(j) + return ret + + +def produit_matriciel(matrice1, matrice2): + """fait le produit matriciel de 2 matrices """ + if len(matrice1[0]) != len(matrice2): + return None + ret = list() + for i in range(len(matrice1)): + temp = list() + for j in range(len(matrice1)): + temp.append(sum_for_matrices(matrice1, i, matrice2, j)) + ret.append(temp) + if len(ret) == 1: + return ret[0][0] + return ret + + +def sum_for_matrices(a, i, b, j): + tot = 0 + for k in range(0, len(b)): + tot += a[i][k] * b[k][j] + return tot + + +def test(fun, *args, result): + if len(args) == 1: + test = fun(args[0]) + if test == result: + print(f"✅{fun.__name__}({args[0]}) == {result} -- SUCCESS!") + else: + print(f"❌{fun.__name__}({args[0]}) == {result} -- ERROR! (returned {test})") + elif len(args) == 2 and hasattr(args[0], '__name__'): + test = fun(args[0], args[1]) + if test == result: + print(f"✅{fun.__name__}({args[0].__name__}, {args[1]}) == {result} -- SUCCESS!") + else: + print(f"❌{fun.__name__}({args[0].__name__}, {args[1]}) == {result} -- ERROR! (returned {test})") + elif len(args) == 2: + test = fun(args[0], args[1]) + if test == result: + print(f"✅{fun.__name__}({args[0]}, {args[1]}) == {result} -- SUCCESS!") + else: + print(f"❌{fun.__name__}({args[0]}, {args[1]}) == {result} -- ERROR! (returned {test})") + + +if __name__ == "__main__": + test(map, math.sqrt, [], result=[]) + test(map, math.sqrt, [2.0, 4.0, 6.0, 100.0], result=[1.4142135623730951, 2.0, 2.449489742783178, 10.0]) + test(map, str.upper, list('hello'), result=['H', 'E', 'L', 'L', 'O']) + + test(filter, is_prime, range(20), result=[2, 3, 5, 7, 11, 13, 17, 19]) + test(filter, str.isalpha, list('r2d2'), result=['r', 'd']) + + test(reduce, math.pow, [2, 2], result=4.0) + test(reduce, math.pow, [2, 3, 4], result=4096.0) + + test(prime_numbers, 1, result=[2]) + test(prime_numbers, 12, result=[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37]) + + test(is_prime, 1, result=False) + test(is_prime, 2, result=True) + test(is_prime, 3, result=True) + test(is_prime, 33, result=False) + + test(insert, [], 1, result=[1]) + test(insert, list(range(6)), -1, result=[-1, 0, 1, 2, 3, 4, 5]) + test(insert, list(range(6)), 3, result=[0, 1, 2, 3, 3, 4, 5]) + test(insert, list(range(6)), 10, result=[0, 1, 2, 3, 4, 5, 10]) + + test(produit_matriciel, [[2, 0, 1], [3, 6, 2]], [[1, 5], [2, 6], [3, 7]], result=[[5, 17], [21, 65]]) + test(produit_matriciel, [[1, 5], [2, 6], [3, 7]], [[2, 0, 1], [3, 6, 2]], result=[[17, 30, 11], [22, 36, 14], [27, 42, 17]]) + test(produit_matriciel, [[1.0, 2.5]], [[3.0], [4.5]], result=14.25) + test(produit_matriciel, [[1.0, 2.5]], [[3.0, 4.5]], result=None) + test(produit_matriciel, [[1, 5], [2, 6], [3, 7]], [[1, 5], [2, 6], [3, 7]], result=None) diff --git a/20oct/serie5.pdf b/20oct/serie5.pdf new file mode 100644 index 0000000..24cfbcb Binary files /dev/null and b/20oct/serie5.pdf differ