Aller au contenu

Ep 10

le document

l'algorithme

Issue de : 23-NSI-03⚓

EXERCICE 1⚓

Dans cet exercice on cherche Ă  calculer la moyenne pondĂ©rĂ©e d’un Ă©lĂšve dans une matiĂšre donnĂ©e. Chaque note est associĂ©e Ă  un coefficient qui la pondĂšre.

Par exemple, si ses notes sont : 14 avec coefficient 3, 12 avec coefficient 1 et 16 avec coefficient 2, sa moyenne pondérée sera donnée par

\(\dfrac{14 \times 3 + 12 \times 1 + 16 \times 2 }{3+1+2} = 14.333...\)

Écrire une fonction moyenne :

  • qui prend en paramĂštre une liste notes non vide de tuples Ă  deux Ă©lĂ©ments entiers de la forme (note, coefficient) (int ou float) positifs ou nuls ;
  • et qui renvoie la moyenne pondĂ©rĂ©e des notes de la liste sous forme de flottant si la somme des coefficients est non nulle, None sinon.

Exemple :

🐍 Script Python
>>> moyenne([(8, 2), (12, 0), (13.5, 1), (5, 0.5)])
9.142857142857142
>>> moyenne([(3, 0), (5, 0)])
None

RĂ©ponse

Complétez le code ci-dessous

###
# Mettez votre code icibksl-nl



Solution

###
def moyenne(tab):bksl-nl somme = 0bksl-nl coeffs = 0bksl-nl for couple in tab:bksl-nl somme += couple[0] py-str couple[1]bksl-nl coeffs += couple[1]bksl-nl if coeffs == 0:bksl-nl return Nonebksl-nl return somme / coeffsbksl-nlbksl-nltry:bksl-nl assert round(moyenne([(8, 2), (12, 0), (13.5, 1), (5, 0.5)]),8) == 9.14285714bksl-nl assert moyenne([(3, 0), (5, 0)]) == Nonebksl-nl print('Tout semble correct 👍')bksl-nlbksl-nlexcept AssertionError as asser:bksl-nl print('Le rĂ©sultat de votre fonction n\'est pas conforme đŸ€”')bksl-nl



```

EXERCICE 2⚓

image On travaille sur des dessins en noir et blanc obtenu Ă  partir de pixels noirs et blancs :

La figure « cƓur » ci-dessus va servir d’exemple.

On la reprĂ©sente par une grille de nombres, c’est-Ă -dire par une liste composĂ©e de sous-listes de mĂȘme longueurs.

Chaque sous-liste représentera donc une ligne du dessin.

Dans le code ci-dessous, la fonction affiche permet d’afficher le dessin. Les pixels noirs (1 dans la grille) seront reprĂ©sentĂ©s par le caractĂšre * et les blancs (0 dans la grille) par deux espaces.

La fonction Liste_zoom prend en argument une liste liste_depart et un entier k. Elle renvoie une liste oĂč chaque Ă©lĂ©ment de liste_depart est dupliquĂ© k fois.

La fonction Dessin_zoom prend en argument une grille grille et renvoie une grille oĂč toutes les lignes de grille sont zoomĂ©es k fois et rĂ©pĂ©tĂ©es k fois.

Compléter les fonctions liste_zoom et dessin_zoom du code suivant :

🐍 Script Python
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
def affiche(dessin):
    ''' affichage d'une grille : les 1 sont représentés par 
        des "*" , les 0 par un espace " " '''
    for ligne in dessin:
        affichage = ''
        for col in ligne:
            if col == 1:
                affichage = affichage + "*"
            else:
                affichage = affichage + " "
        print(affichage)


def liste_zoom(liste_depart,k):
    '''renvoie une liste contenant k fois chaque élément de
       liste_depart'''
    liste_zoomee = ... 
    for elt in ... : 
        for i in range(k):
            ...
    return liste_zoomee

def dessin_zoom(grille,k):
    '''renvoie une grille oĂč les lignes sont zoomĂ©es k fois 
       ET répétées k fois'''
    grille_zoomee=[]
    for ligne in grille:
        ligne_zoomee = ... 
        for i in range(k):
            ... .append(...) 
    return grille_zoomee
Exemple :
🐍 Script Python
>>> coeur = [[0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0],
             [0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0],
             [0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0],
             [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0],
             [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0],
             [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0],
             [0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0],
             [0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0],
             [0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0],
             [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0]]

>>> affiche(coeur)
   **   **   
  *  * *  *
*     *    *
*          *
*          *
 *        *
  *      *
   *    *
    * *
     *
>>> affiche(dessin_zoom(coeur,2))
      ****      ****      
      ****      ****      
    **    **  **    **    
    **    **  **    **    
  **        **        **
  **        **        **
  **                  **
  **                  **
  **                  **
  **                  **
    **              **
    **              **
      **          **
      **          **
        **      **
        **      **
          **  **
          **  **
            **
            **
>>> liste_zoom([1,2,3],3)
[1, 1, 1, 2, 2, 2, 3, 3, 3]

RĂ©ponse

Complétez le code ci-dessous

###
coeur = [[0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0],bksl-nl [0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0],bksl-nl [0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0],bksl-nl [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0],bksl-nl [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0],bksl-nl [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0],bksl-nl [0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0],bksl-nl [0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0],bksl-nl [0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0],bksl-nl [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0]]bksl-nlbksl-nldef affiche(dessin):bksl-nl ''' affichage d'une grille : les 1 sont reprĂ©sentĂ©s par bksl-nl des "py-str" , les 0 par un espace " " '''bksl-nl for ligne in dessin:bksl-nl affichage = ''bksl-nl for col in ligne:bksl-nl if col == 1:bksl-nl affichage = affichage + "py-str"bksl-nl else:bksl-nl affichage = affichage + " "bksl-nl print(affichage)bksl-nlbksl-nldef listepy-undzoom(listepy-unddepart,k):bksl-nl '''renvoie une liste contenant k fois chaque Ă©lĂ©ment debksl-nl listepy-unddepart'''bksl-nl listepy-undzoomee = ... bksl-nl for elt in ... : bksl-nl for i in range(k):bksl-nl ...bksl-nl return listepy-undzoomeebksl-nlbksl-nldef dessinpy-undzoom(grille,k):bksl-nl '''renvoie une grille oĂč les lignes sont zoomĂ©es k fois bksl-nl ET rĂ©pĂ©tĂ©es k fois'''bksl-nl grillepy-undzoomee=[]bksl-nl for ligne in grille:bksl-nl lignepy-undzoomee = ... bksl-nl for i in range(k):bksl-nl ... .append(...) bksl-nl return grillepy-undzoomeebksl-nl



Solution

###
coeur = [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],bksl-nl [0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0],bksl-nl [0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0],bksl-nl [0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0],bksl-nl [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0],bksl-nl [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0],bksl-nl [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0],bksl-nl [0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0],bksl-nl [0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0],bksl-nl [0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0],bksl-nl [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0],bksl-nl [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]bksl-nlbksl-nldef affiche(dessin):bksl-nl ''' affichage d'une grille : les 1 sont reprĂ©sentĂ©s par bksl-nl des "py-str" , les 0 par un espace " " '''bksl-nl for ligne in dessin:bksl-nl affichage = ''bksl-nl for col in ligne:bksl-nl if col == 1:bksl-nl affichage = affichage + "py-str"bksl-nl else:bksl-nl affichage = affichage + " "bksl-nl print(affichage)bksl-nlbksl-nldef listepy-undzoom(listepy-unddepart, k):bksl-nl '''renvoie une liste contenant k fois chaque bksl-nl Ă©lĂ©ment de listepy-unddepart'''bksl-nl listepy-undzoomee = []bksl-nl for elt in listepy-unddepart:bksl-nl for i in range(k):bksl-nl listepy-undzoomee.append(elt)bksl-nl return listepy-undzoomeebksl-nlbksl-nldef zoomDessin(grille, k):bksl-nl '''renvoie une grille oĂč les lignes sont zoomĂ©es k fois bksl-nl ET rĂ©pĂ©tĂ©es k fois'''bksl-nl grillepy-undzoomee = []bksl-nl for elt in grille:bksl-nl listepy-undzoomee = listepy-undzoom(elt, k)bksl-nl for i in range(k):bksl-nl grillepy-undzoomee.append(listepy-undzoomee)bksl-nl return grillepy-undzoomeebksl-nlbksl-nlaffiche(zoomDessin(coeur,2))bksl-nlbksl-nltry:bksl-nl assert listepy-undzoom([1,2,3],3) == [1, 1, 1, 2, 2, 2, 3, 3, 3]bksl-nl print('Tout semble correct 👍')bksl-nlbksl-nlexcept AssertionError as asser:bksl-nl print('Le rĂ©sultat de votre fonction n\'est pas conforme đŸ€”')bksl-nlbksl-nl