Prototyper une fonction
Exercice 1
Voici une fonction en langage Python qui convertit un nombre binaire de 8 bits en décimale.
def bintodec(binaire):
result=0
for i in range (0,8):
result+=int(binaire[i])*2**(7-i)
return result
Rajouter un commentaire, des pré-conditions et un jeu de tests à cette fonction.
Voir une solution
Voir le code :
def bintodec(binaire):
'''
Fonction qui convertit un binaire en décimal
jeu de tests
>>> bintodec('01010011')
83
>>> bintodec('01010010')
82
'''
assert(type(binaire)==str),("il faut chaine de car")
assert(len(binaire)==8),("il faut 8 car")
assert(binaire[0]=="1" or binaire[0]=="0"),("pas binaire")
result=0
for i in range (0,8):
result+=int(binaire[i])*2**(7-i)
return result
if __name__ == '__main__':
import doctest
doctest.testmod(verbose=True)
Masquer
Exercice 2
Ecrire une fonction
de paramètres a
et b
qui retourne si a et b sont des entiers naturels le quotient et le reste de la division euclidienne de a par b, sinon elle renvoit -1.
Preconditions: a >= 0 et b > 0 avec a et b entiers.
Si les préconditions ne sont pas respectées, doit renvoyer -1.
def division_euclidienne(a,b):
à compléter
return quotient,reste
Rajouter un commentaire, des pré-conditions sous forme de if...else
et un jeu de tests à cette fonction.
Voir une solution
Voir le code :
def division_euclidienne(a,b):
"""(int,int) -> tuple(int,int)
Cas "normaux" de division euclidienne
>>> division_euclidienne(10, 2)
(5, 0)
>>> division_euclidienne(2, 10)
(0, 2)
>>> division_euclidienne(37, 3)
(12, 1)
Si les arguments sont négatifs -> Erreur
>>> division_euclidienne(-10, 7)
-1
>>> division_euclidienne(10, -7)
-1
Si les arguments ne sont pas entiers -> Erreur
>>> division_euclidienne(10.3, 4)
-1
>>> division_euclidienne(11, 3.5)
-1
Division de 0
>>> division_euclidienne(0, 3)
(0, 0)
Division par 0
>>> division_euclidienne(3, 0)
-1
>>> division_euclidienne(0, 0)
-1
"""
if type(a)!=int or type(b)!=int or a<0 or b<=0:
return -1
quotient=0
while a>=b:
a=a-b
quotient+=1
reste=a
return quotient,reste
if __name__ == '__main__':
import doctest
doctest.testmod(verbose=True)
Masquer
Exercice 3
Voici une fonction en langage Python qui calcule le pgcd(a,b) avec l'algorithme des soustractions successives, malheureusement elle bugue.
def pgcd(a,b):
while a-b != 0:
r=a-b
a=b
b=r
return a
- Rajouter un commentaire, des pré-conditions et un jeu de tests à cette fonction.
- Modifier le code afin qu'il fonctionne
Voir une solution
Voir le code :
def pgcd(a,b):
'''
Fonction qui calcule le pgcd de a et b
jeu de tests
>>> pgcd(10,10)
10
>>> pgcd(5,10)
5
>>> pgcd(10,5)
5
>>> pgcd(3,10)
1
>>> pgcd(6,9)
3
'''
assert(type(a)==int and a>=0),("a doit être un entier naturel")
assert(type(b)==int and b>=0),("b doit être un entier naturel")
if a<b:
a,b=b,a
while a-b != 0:
r=a-b
if r>b:
a=r
else:
a=b
b=r
return a
if __name__ == '__main__':
import doctest
doctest.testmod(verbose=True)
Masquer