TP 1 : Révisions Python
Contents
TP 1 : Révisions Python#
Calcul#
Question
Écrire une fonction somme(n)
renvoyant \(\sum_{i=1}^n \sqrt{i}\).
Solution
def somme(n):
s = 0
for i in range(n + 1):
s += i**.5
return s
somme(100000)
21082008.973917928
Question
Écrire une fonction somme_riemann(f, a, b, n)
renvoyant \(\frac{b - a}{n}\sum_{k=0}^n f(a + k \frac{b-a}{n})\).
Solution
def somme_riemann(f, a, b, n):
s = 0
for i in range(n + 1):
s += f(a + (b-a)*i/n)
return s*(b - a)/n
def f(x): # pour tester
return x**.5
somme_riemann(f, 0, 10, 1000)
21.097455887480724
Question
Écrire une fonction fact(n)
renvoyant \(n!\).
Solution
def fact(n):
p = 1
for i in range(2, n + 1):
p *= i
return p
fact(5)
120
Question
Écrire une fonction borne(p)
renvoyant le plus petit entier \(n\) tel que \(2^n > p\).
Solution
def borne(p):
n = 0
while 2**n <= p:
n += 1
return n
borne(100000)
17
Question
Écrire une fonction nombre(n)
renvoyant le nombre d’entiers entre \(0\) et \(n\) qui sont multiples de \(3\) ou de \(5\).
Solution
def nombre(n):
s = 0
for i in range(n):
if i % 3 == 0 or i % 5 == 0:
s += 1
return s
nombre(100000)
46667
Tuples#
Question
Écrire une fonction distance(p1, p2)
renvoyant la distance euclidienne entre les points p1
et p2
, où p1
et p2
sont des couples.
On rappelle qu’on peut accéder aux éléments d’un tuple comme pour une liste (p[0]
pour le 1er élément, par exemple).
Solution
def distance(p1, p2):
return ((p1[0] - p2[0])**2 + (p1[1] - p2[1])**2)**.5
distance((0, 0), (3, 4))
5.0
Listes#
Question
Écrire une fonction syracuse(a)
renvoyant la liste des \(u_k\) définies par la suite suivante, où on arrêtera de calculer les termes de la suite dès que l’on obtient \(1\) :
Solution
def syracuse(a):
L = [a]
while L[-1] != 1:
if L[-1] % 2 == 0:
L.append(L[-1] // 2)
else:
L.append(3 * L[-1] + 1)
return L
syracuse(3) # [3, 10, 5, 16, 8, 4, 2, 1, 4, 2]
[3, 10, 5, 16, 8, 4, 2, 1]
Question
Écrire une fonction suite2(n)
renvoyant le couple \((u_n, v_n)\) où :
Solution
def suite2(n):
un, vn = 3, 2
for i in range(n):
un, vn = 2*un + 4*vn, un - vn
return un, vn
suite2(4)
(308, 97)
Question
Écrire une fonction moyenne(L)
qui renvoie la moyenne des éléments de la liste L
.
Solution
def moyenne(L):
s = 0
for x in L:
s += x
return s / len(L)
moyenne([9, 2, 8, 4, 5]) # 5.6
5.6
Question
Écrire une fonction variance(L)
qui renvoie la variance des éléments de la liste L
, donnée par \(\frac{1}{n}\sum_i (L[i] - m)^2\) où \(m\) est la moyenne de L
.
On évitera de calculer plusieurs fois la moyenne.
Solution
def variance(L):
m = moyenne(L)
s = 0
for x in L:
s += (x - m) ** 2
return s / len(L)
variance([9, 2, 8, 4, 5]) # 6.64
6.640000000000001
Question
Écrire une fonction inverse(L)
qui renvoie la liste des éléments de L
dans l’ordre inverse.
Solution
def inverse(L):
L2 = []
for i in range(len(L)):
L2.append(L[len(L) - i - 1])
return L2
# autre solution
def inverse(L):
return L[::-1]
inverse([1, 2, 3, 4, 5]) # [5, 4, 3, 2, 1]
[5, 4, 3, 2, 1]
Question
Écrire une fonction positifs(L)
qui renvoie la liste des éléments de L
strictement positifs.
Solution
def positifs(L):
L2 = []
for x in L:
if x > 0:
L2.append(x)
return L2
positifs([1, -2, 3, -4, 5, -6, 7, -8, 9, -10])
[1, 3, 5, 7, 9]
Question
Écrire une fonction tous_pairs(L)
qui renvoie True
si tous les éléments de L
sont pairs, False
sinon.
Solution
def tous_pairs(L):
for x in L:
if x % 2 != 0:
return False
return True
print(tous_pairs([2, 4, 6, 8, 10])) # True
print(tous_pairs([2, 4, 6, 8, 10, 11])) # False
True
False
Question
Écrire une fonction croissante(L)
qui renvoie True
si les éléments de L
sont dans l’ordre croissant, False
sinon.
Solution
def croissante(L):
for i in range(len(L) - 1):
if L[i] > L[i + 1]:
return False
return True
print(croissante([1, 2, 3, 4, 5])) # True
print(croissante([1, 2, 3, 4, 3])) # False
True
False
Question
Écrire une fonction concatene(L1, L2)
renvoyant une liste composée des éléments de L1
suivis des éléments de L2
.
Solution
def concatene(L1, L2):
L = []
for x in L1:
L.append(x)
for x in L2:
L.append(x)
return L
concatene([1, 2, 3], [4, 5, 6])
[1, 2, 3, 4, 5, 6]
Question
Écrire une fonction separe(L)
qui renvoie un couple de deux listes, la première contenant les éléments d’indices pairs de L
et la seconde les éléments d’indices impairs.
Solution
def separe(L):
L1 = []
L2 = []
for x in L:
if x % 2 == 0:
L1.append(x)
else:
L2.append(x)
return L1, L2
separe([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
([2, 4, 6, 8, 10], [1, 3, 5, 7, 9])
Question
Écrire une fonction produit_scalaire(u, v)
renvoyant le produit scalaire de u
et v
, où u
et v
sont des listes de même longueur.
Solution
def produit_scalaire(u, v):
s = 0
for i in range(len(u)):
s += u[i] * v[i]
return s
produit_scalaire([1, 2, 3], [4, 5, 6]) # 32
32
Matrices#
Dans les questions suivantes, il est interdit d’utiliser numpy
.
Question
Écrire une fonction creer_matrice(n, p, x)
qui renvoie une matrice de taille à \(n\) lignes, \(p\) colonnes dont tous les éléments sont égaux à x
.
Solution
def creer_matrice(n, p, x):
M = []
for i in range(n):
L = []
for j in range(p):
L.append(x)
M.append(L)
return M
creer_matrice(3, 4, 2)
[[2, 2, 2, 2], [2, 2, 2, 2], [2, 2, 2, 2]]
Question
Écrire une fonction matrice_identite(n)
qui renvoie la matrice identité de taille \(n\).
Solution
def matrice_identite(n):
M = creer_matrice(n, n, 0)
for i in range(n):
M[i][i] = 1
return M
matrice_identite(4)
[[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]
Question
Écrire une fonction transposee(M)
qui renvoie la transposée de la matrice M
.
Solution
def transposee(M):
n = len(M)
p = len(M[0])
Mt = creer_matrice(p, n, 0)
for i in range(n):
for j in range(p):
Mt[j][i] = M[i][j]
return Mt
transposee([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
[[1, 4, 7], [2, 5, 8], [3, 6, 9]]
Question
Écrire une fonction egal(M1, M2)
qui renvoie True
si les matrices M1
et M2
sont égales, False
sinon.
Solution
def egal(M1, M2):
n = len(M1)
p = len(M1[0])
for i in range(n):
for j in range(p):
if M1[i][j] != M2[i][j]:
return False
return True
print(egal([[1, 2, 3], [4, 5, 6], [7, 8, 9]], [[1, 2, 3], [4, 5, 6], [7, 8, 9]])) # True
print(egal([[1, 2, 3], [4, 5, 6], [7, 8, 9]], [[1, 2, 3], [4, 5, 6], [7, 8, 10]])) # False
True
False
Question
Écrire une fonction symetrique(M)
qui renvoie True
si la matrice M
est symétrique, False
sinon.
Solution
def symetrique(M):
return egal(M, transposee(M))
print(symetrique([[1, 2, 3], [2, 4, 5], [3, 5, 6]])) # True
print(symetrique([[1, 2, 3], [2, 4, 7], [3, 5, 6]])) # False
True
False