Assert Rec Corr 240130 215350
Assert Rec Corr 240130 215350
Assert Rec Corr 240130 215350
Exo 1
1. Écrire une fonction maximum(a, b) qui prend deux entiers strictement positifs et qui retourne le maximum entre ces deux nombres.
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.
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.
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 [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
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
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
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)
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
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)
6
21