Assert Rec Corr 240130 215350

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 8

08/01/2024 23:04 Untitled

TD5: Assertions et récursivité

Exo 1

1. Écrire une fonction maximum(a, b) qui prend deux entiers strictement positifs et qui retourne le maximum entre ces deux nombres.

In [1]: def maximum(a, b):


assert type(a)==int and type(b)==int
assert a> 0 and b>0
if a>b:
return a
return b

2. Écrire une fonction division(a, b) qui permet de calculer la division entière de deux nombres a et b. La fonction doit assurer que le diviseur b
n’est pas zéro, les deux paramètres sont de même types, et que la valeur de retour est de type entier.

In [2]: def division(a, b):


assert b!=0
assert (type(a)==int and type(b)==int) or (type(a)==float and type(b)==float)
r = a//b
assert type(r) == int
return r

3. Écrire une fonction qui permet de calculer la moyenne de deux nombre a et b. La fonction doit assurer que a et b sont des nombres.

In [3]: def moyenne(a, b):


assert type(a)==int or type(a) == float
assert type(b)==int or type(b) == float
return (a+b)/2

localhost:8888/notebooks/Bureau/Sakina/cours cpge/1 année/5_assertions_et_recursivite/td/Untitled.ipynb 1/8


08/01/2024 23:04 Untitled

4. Écrire une fonction est_premier(n) qui renvoie True si n est premier et False dans le cas contraire. La fonction doit assurer que n est un
nombre entier strictement positif.

In [4]: from math import sqrt


def est_premier(n):
assert type(n) == int
assert n > 0
if n == 1:
return False
r = int(sqrt(n)) + 1
for i in range(2, r):
if n%i == 0:
return False
return True

5. Écrire un test pour vérifier le fonctionnement de la fonction est_premier(n).

In [5]: assert est_premier(7) == True


assert est_premier(2) == True
assert est_premier(1) == False
assert est_premier(6) == False

In [6]: #Q6
def est_armstrong(n):
q = n
s = 0
while q!=0:
s += (q%10)**3
q = q//10
if s == n:
return True
return False

In [7]: #Q7
assert est_armstrong(153)==True

localhost:8888/notebooks/Bureau/Sakina/cours cpge/1 année/5_assertions_et_recursivite/td/Untitled.ipynb 2/8


08/01/2024 23:04 Untitled

Exo 2

In [8]: %%time
#Q1
def puissance(x, n):
assert type(n) == int and n>=0
assert type(x) == float or type(x) == int
if n==0:
return 1
return x * puissance(x, n-1)
#test
print(puissance(10, 100))

10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
CPU times: user 1.07 ms, sys: 157 µs, total: 1.23 ms
Wall time: 818 µs

In [9]: %%time
#Q2
def puissance2(x, n):
assert type(n) == int and n>=0
assert type(x) == float or type(x) == int
if n == 0:
return 1
elif n%2 == 0:
return puissance2(x, n//2)**2
return x * puissance2(x, (n-1)//2)**2
#test
print(puissance2(10, 100))

10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
CPU times: user 123 µs, sys: 19 µs, total: 142 µs
Wall time: 149 µs

Exo 3

Q1

localhost:8888/notebooks/Bureau/Sakina/cours cpge/1 année/5_assertions_et_recursivite/td/Untitled.ipynb 3/8


Si b = 0, alors PGCD(a,b) = a.
08/01/2024 23:04 Untitled

Sinon, PGCD(a,b) = PGCD(b,a%b).


In [10]: # Q2
def PGCD(a, b):
assert a!=0 or b!=0
if b == 0:
return a
return PGCD(b, a%b)

In [11]: #Q3
PGCD(119, -544)

Out[11]: -17

In [12]: #Q4
def PGCD(a, b):
assert a!=0 or b!=0
a = abs(a)
b = abs(b)
if b == 0:
return a
return PGCD(b, a%b)
#ou
def PGCD(a, b):
assert a!=0 or b!=0
if b == 0:
return abs(a)
return PGCD(b, a%b)

In [21]: #test
assert PGCD(119, -544) == 17

Exo 4

localhost:8888/notebooks/Bureau/Sakina/cours cpge/1 année/5_assertions_et_recursivite/td/Untitled.ipynb 4/8


08/01/2024 23:04 Untitled

In [13]: # Q1
i = 0 # pour calculer le nombre des déplacements
def hanoi(n, debut, inter, fin):
assert n>0
global i
i+=1
if n==1:
print("disque {}: {}-->{}".format(n, debut, fin))
else:
hanoi(n-1, debut, fin , inter)
print("disque {}: {}-->{}".format(n, debut, fin))
hanoi(n-1, inter, debut , fin)

localhost:8888/notebooks/Bureau/Sakina/cours cpge/1 année/5_assertions_et_recursivite/td/Untitled.ipynb 5/8


08/01/2024 23:04 Untitled

In [14]: # Q2
hanoi(3, "A", "B", "C")
print(i)

disque 1: A-->C
disque 2: A-->B
disque 1: C-->B
disque 3: A-->C
disque 1: B-->A
disque 2: B-->C
disque 1: A-->C
7

Exo 5

localhost:8888/notebooks/Bureau/Sakina/cours cpge/1 année/5_assertions_et_recursivite/td/Untitled.ipynb 6/8


08/01/2024 23:04 Untitled

 In [15]: #Q1
def A(m, n):
if m == 0:
return n+1
if m > 0 and n == 0:
return A(m-1, 1)
if m>0 and n>0:
return A(m-1, A(m, n-1))

In [16]: #Q2
print(A(3,3))

61

Exo 7

In [17]: # a
def nbr_chiffres(n):
if n == 0:
return 0
return 1 + nbr_chiffres(n//10)

In [18]: # b
def som_chiffres(n):
if n == 0:
return 0
return n%10 + som_chiffres(n//10)

In [19]: #utlisation des fcts


n = 123456
print(nbr_chiffres(n))
print(som_chiffres(n))

6
21

localhost:8888/notebooks/Bureau/Sakina/cours cpge/1 année/5_assertions_et_recursivite/td/Untitled.ipynb 7/8


08/01/2024 23:04 Untitled

localhost:8888/notebooks/Bureau/Sakina/cours cpge/1 année/5_assertions_et_recursivite/td/Untitled.ipynb 8/8

Vous aimerez peut-être aussi