Aller au contenu

Sujet n°5

Sujet original

Pour télécharger l'énoncé original, cliquer ici.

Exercice n°1

Écrire en python deux fonctions :

  • lancer de paramètre n, un entier positif, qui renvoie un tableau de type list de n entiers obtenus aléatoirement entre 1 et 6 (1 et 6 inclus) ;
  • paire_6 de paramètre tab, un tableau de type list de n entiers entre 1 et 6 obtenus aléatoirement, qui renvoie un booléen égal à True si le nombre de 6 est supérieur ou égal à 2, False sinon.

On pourra utiliser la fonction randint(a, b) du module random pour laquelle la documentation officielle est la suivante :
Renvoie un entier aléatoire N tel que a <=N <= b.

Exemples

>>> lancer1 = lancer(5)
[5, 6, 6, 2, 2]

>>> paire_6(lancer1)
True

>>> lancer2 = lancer(5)
[6, 5, 1, 6, 6]

>>> paire_6(lancer2)
True

>>> lancer3 = lancer(3)
[2, 2, 6]

>>> paire_6(lancer3)
False

>>> lancer4 = lancer(0)
[]

>>> paire_6(lancer4)
False
Une solution
 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
32
33
34
35
36
37
from random import randint

def lancer(n):
    """
    n - int, entier positif
    Sortie: list - Tableau de n entiers aléatoires compris entr e1 et 6
    """
    return [randint(1, 6) for _ in range(n)]

def paire_6(tab):
    """
    tab - list, tableau d'entiers compris entre 1 et 6
    Sortie: bool - True si tab contient au moins deux 6, False sinon
    """
    nb_6 = 0
    for elt in tab:
        if elt == 6:
            nb_6 += 1
    return nb_6 >= 2


if __name__ == '__main__':
    # Exemples de l'énoncé
    print(paire_6([5, 6, 6, 2, 2]) == True )
    print(paire_6([6, 5, 1, 6, 6]) == True )
    print(paire_6([2, 2, 6]) == False )
    print(paire_6([]) == False )


    # Exemples supplémentaires
    for i in range(10):
        print(lancer(i))

    print(paire_6([1]) == False )
    print(paire_6([6]) == False )
    print(paire_6([6, 6]) == True )
    print(paire_6([6, 6, 6]) == True )

Exercice n°2

On considère une image en 256 niveaux de gris que l’on représente par une grille de nombres, c’est-à-dire une liste composée de sous-listes toutes de longueurs identiques.

La largeur de l’image est donc la longueur d’une sous-liste et la hauteur de l’image est le nombre de sous-listes.

Chaque sous-liste représente une ligne de l’image et chaque élément des sous-listes est un entier compris entre 0 et 255, représentant l’intensité lumineuse du pixel.

Le négatif d’une image est l’image constituée des pixels x_n tels que x_n + x_i = 255x_i est le pixel correspondant de l’image initiale.

Commentaires

Ici, le mot « liste » est à comprendre dans le sens « liste Python » (c'est-à-dire tableau) plutôt que dans le sens du type abstrait de données liste étudié en Terminale.

Compléter le programme suivant :

 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
32
33
34
35
36
37
38
img=[[20, 34, 254, 145, 6], [23, 124, 237, 225, 69], [197, 174, 207, 25, 87], [255, 0, 24, 197, 189]]

def nbLig(image):
    '''renvoie le nombre de lignes de l'image'''
    return ...

def nbCol(image):
    '''renvoie la largeur de l'image'''
    return ...

def negatif(image):
    '''renvoie le negatif de l'image sous la forme
       d'une liste de listes'''

    # on cree une image de 0 aux memes dimensions que le parametre image
    L = [[0 for k in range(nbCol(image))] for i in range(nbLig(image))]

    for i in range(nbLig(image)):
        for j in range(...):
            L[i][j] = ...
    return L

def binaire(image, seuil):
    '''renvoie une image binarisee de l'image sous la forme
       d'une liste de listes contenant des 0 si la valeur
       du pixel est strictement inferieure au seuil
       et 1 sinon'''

    # on cree une image de 0 aux memes dimensions que le parametre image
    L = [[0 for k in range(nbCol(image))] for i in range(nbLig(image))]

    for i in range(nbLig(image)):
        for j in range(...):
            if image[i][j] < ... :
                L[i][j] = ...
            else:
                L[i][j] = ...
    return L
Commentaire sur le code original

Pour télécharger l'original du fichier à compléter, cliquer ici.

Exemples

>>> img = [[20, 34, 254, 145, 6], [23, 124, 237, 225, 69], [197, 174, 207, 25, 87], [255, 0, 24, 197, 189]]
>>> nbLig(img)
4

>>> nbCol(img)
5

>>> negatif(img)
[[235, 221, 1, 110, 249], [232, 131, 18, 30, 186], [58, 81, 48, 230, 168], [0, 255, 231, 58, 66]]

>>> binaire(img, 120)
[[0, 0, 1, 1, 0], [0, 1, 1, 1, 0], [1, 1, 1, 0, 0], [1, 0, 0, 1, 1]]
Une solution
 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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
def nbLig(image):
    '''renvoie le nombre de lignes de l'image'''
    return len(image)

def nbCol(image):
    '''renvoie la largeur de l'image'''
    return len(image[0])

def negatif(image):
    '''renvoie le negatif de l'image sous la forme
       d'une liste de listes'''

    # on cree une image de 0 aux memes dimensions que le parametre image
    L = [[0 for k in range(nbCol(image))] for i in range(nbLig(image))]

    for i in range(nbLig(image)):
        for j in range(nbCol(image)):
            L[i][j] = 255 - image[i][j]
    return L

def binaire(image, seuil):
    '''renvoie une image binarisee de l'image sous la forme
       d'une liste de listes contenant des 0 si la valeur
       du pixel est strictement inferieure au seuil
       et 1 sinon'''

    # on cree une image de 0 aux memes dimensions que le parametre image
    L = [[0 for k in range(nbCol(image))] for i in range(nbLig(image))]

    for i in range(nbLig(image)):
        for j in range(nbCol(image)):
            if image[i][j] < seuil :
                L[i][j] = 0
            else:
                L[i][j] = 1
    return L




if __name__ == '__main__':
    # Exemple de l'énoncé
    img=[[20, 34, 254, 145, 6], [23, 124, 237, 225, 69], [197, 174, 207, 25, 87], [255, 0, 24, 197, 189]]
    print(nbLig(img) == 4)
    print(nbCol(img) == 5)
    print(negatif(img) == [[235, 221, 1, 110, 249], [232, 131, 18, 30, 186], [58, 81, 48, 230, 168], [0, 255, 231, 58, 66]])
    print(binaire(img, 120) == [[0, 0, 1, 1, 0], [0, 1, 1, 1, 0], [1, 1, 1, 0, 0], [1, 0, 0, 1, 1]])


    # Exemples supplémentaires
    img=[[20, 34, 254, 145], [6, 23, 124, 237], [225, 69, 197, 174], [207, 25, 87, 255], [0, 24, 197, 189]]
    print(nbLig(img) == 5)
    print(nbCol(img) == 4)
    print(negatif(img) == [[235, 221, 1, 110], [249, 232, 131, 18], [30, 186, 58, 81], [48, 230, 168, 0], [255, 231, 58, 66]])
    print(binaire(img, 200) == [[0, 0, 1, 0], [0, 0, 0, 1], [1, 0, 0, 0], [1, 0, 0, 1], [0, 0, 0, 0]])