La mise au point des programmes



Partie 1:  préconditions-postconditions-exceptions



On donne ici le code d'une fonction censée vérifier que les nombres d'une liste t passée en paramètre à la fonction sont classées par ordre croissant:


def est_croissant(t):
    i=len(t) -1
    while i >= 0:
        if t[i] <= t[i+1]:
            return True
        else:
            return False
        i-= 1


Exercice 1.1 


- Ecrire les postconditions suivantes, en déduire si la fonction est mal écrite:


t1 = [ 1, 2, 3, 4, 5, 6]   ici la fonction doit renvoyer True


t2 = [ 1, 3, 2, 4, 5, 6]   ici la fonction doit renvoyer False


t3 = [ ]  ici la fonction doit renvoyer True



- Trouver la cause du bug, modifier la fonction et vérifier à nouveau les postconditions.

- Remplacer la boucle while par une boucle for qui parcourt la liste en commençant par le dernier élément ( analyse du dernier élément vers le premier)


Exercice 1.2


- Ecrire la précondition qui permettra d’arrêter l'exécution de la fonction si on soumet le tableau suivant à la fonction


t1= [1, 2, 3, 'B', 5, 6]


Exercice 1.3

- Ecrire le code d'un programme qui demande n nombres à l'utilisateur et les stockent dans un tableau t2, le nombre n est choisi par l'utilisateur du programme.


- Ecrire une gestion d'exception qui permettrait d’afficher le message " vous devez saisir des nombres entiers naturels"  si l'utilisateur ne saisit pas un nombre entier:



- Ecrire un code qui range par ordre croissant les nombres de votre tableau t2



Exercice 1.4

 On cherche maintenant  à générer aléatoirement n nombres dans un tableau t3


- Compléter la fonction  tableau_croissant(n) qui génère un tableau trié de n nombres générés aléatoirement.


from random import randint

def tableau_croissant(n):
    """  fonction de génération d'un tableau de n nombres aléatoires"""
    t3 = [0] * n
   



    return t3


# utilisation pour n=10 éléments

tableau_généré = tableau_croissant(10)




- Expliquer  la ligne  t3 = [0] * n



Partie 2:  Module et package


Exercice 2.1



- Créer un dossier appelé mon_dossier_travail
- Créer un package appelé mon_package dans le dossier mon_dossier_travail

- Ajouter un module appelé mon_module_1 dans le package mon_package

- Ajouter la fonction affichage ci-dessous dans le module mon_module_1

def affiche():

    print("message depuis le module 1")

- Ajouter un module appelé mon_module_2 dans le package mon_package

- Ajouter la fonction affichage ci-dessous dans mon_module_2


def affiche():

    print("message depuis le module 2")



- Ajouter un module appelé mon_module_principal dans le dossier mon_dossier_travail et en dehors du package.



Exercice 2.2


- Ajouter  le code ci_dessous dans le module mon_module_principal :

from mon_package.mon_module_2 import *

from mon_package.mon_module_1 import *

affiche()


- tester  le code et expliquer le résultat de l'affichage


Exercice 2.3



- Modifier le code précédent pour utiliser la fonction affiche du module 2 dans le module mon_module_principal



Partie 3:  Interfaces


Exercice 3.1


- Ajouter  le code ci_dessous de deux fonctions qui détecte la présence de doublons dans un tableau dans votre module mon_module_principal :


def presence_doublon(t):

    s={}

    for data in t:

        if data in s.keys():

            return True

        else:

            s[data] = 1

    return False


def presence_doublon_2(t):

    s=[]

    for data in t:

        if data in s:

            return True

        else:

            s.append(data)

    return False


- tester les deux fonctions en passant en paramètre les tableaux ci-dessous :


tab1 = [1,2,3,2,4]

tab2 = [1,2,3,4,5]


- conclure sur la correction de ces deux fonctions ( correction = fonctionnement correct)


Exercice 3.2


- Vous pouvez voir ci-dessus que le code des deux fonctions n'a pas de documentation. Ajouter aux fonctions une documentation, le type de données attendu pour t, ainsi que le type de la valeur de retour.



Exercice 3.3


- Les parties rouges de chaque fonction ( ci-dessus) sont liées à l'implémentation choisie pour le conteneur s . On désire remplacer ces parties par le code en vert ci-dessous qui encapsule l'implémentation:


def presence_doublon(t):

    s = creer_conteneur()

    for data in t:

        if est_present(data, s):

            return True

        else:

            ajouter(data,s)

    return False


- Ecrire l'interface qui présente les trois fonctions sur votre compte rendu

- Proposer une implémentation de ces trois fonctions dans le cas où la fonction creer_conteneur() renvoie une liste vide à s.

- Proposer une implémentation de ces trois fonctions dans le cas où la fonction creer_conteneur() renvoie un dictionnaire vide à s.

- Proposer une implémentation des deux fonctions est_present(data,s) et ajouter(data,s) qui permette de manipuler indifféremment une structure s de type dictionnaire ou liste, tout autre structure générera un exception de type TypeError


Exercice supplémentaire


- Ecrire la fonction compte_et_affiche_doublons(t) qui crée un dictionnaire avec comme clés les éléments du tableau t passé en paramètre, la valeur de chaque clé étant le nombre d'occurrences des éléments, la fonction affichera le dictionnaire, le nombre d’occurrences de chaque élément, renverra True si t comporte des doublons et False sinon.


Exemple de rendu pour le code d'utilisation suivant:







 

Créé avec HelpNDoc Personal Edition: Produire des livres Kindle gratuitement