Aller au contenu

Index des sujets 2022

Corrigé sujet 34 - Année : 2022

Sujet 34 - 2022

Exercice 1

Bug

Il y a une faute de frappe dans la variable alphabet de l'énoncé (une virgule en trop dans la valeur 'o,')

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
alphabet = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i',
            'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r',
            's', 't', 'u', 'v', 'w', 'x', 'y', 'z']

def occurrence_max(ch):
    occurrence = [0]*26
    for caractere in ch:
        if caractere in alphabet:
            index_caractere = alphabet.index(caractere)
            occurrence[index_caractere] += 1
    indice_max_occurence = 0
    max_occurence = occurrence[0]
    for i in range(0,len(occurrence)):
        if occurrence[i]>max_occurence:
            max_occurence = occurrence[i]
            indice_max_occurence = i 
    return alphabet[indice_max_occurence]

Commentaires

  1. Le problème du nombre d'occurrence maximal d'un caractère dans un texte peut aussi se résoudre en utilisant un dictionnaire dont les clés sont les caractères et les valeurs les nombres d'occurrences.
  2. On utilise dans la correction proposée ici, la méthode index qui renvoie l'indice de la première apparition d'un élément dans une liste. On peut aussi rechercher cet indice en effectuant un parcourt de la liste.

Exercice 2

 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 nbLig(image):
    '''renvoie le nombre de lignes de l'image'''
    return len(image) #(1)

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

def negatif(image):
    '''renvoie le negatif de l'image sous la forme 
       d'une liste de listes'''
    L = [[0 for k in range(nbCol(image))] for i in range(nbLig(image))] 
# on cree une image de 0 aux memes dimensions que le parametre image 
    for i in range(len(image)):
        for j in range(nbCol(image)): #(3)
            L[i][j] = 255-image[i][j] #(4)
    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'''
    L = [[0 for k in range(nbCol(image))] for i in range(nbLig(image))] # on cree une image de 0 aux memes dimensions que le parametre image 
    for i in range(len(image)):
        for j in range(nbCol(image)): 
            if image[i][j] < seuil : #(5)
                L[i][j] = 0
            else:
                L[i][j] = 1
    return L
  1. Comme indiqué dans l'énoncé, une image est une listes de listes (toutes de même longueur).la hauteur de l'image est le nombres de listes
  2. La largeur de l'image est la longueur d'une sous-liste (elles ont toute la même longueur).
  3. On utilise la fonction nbCol définie plus haut
  4. Se référer à l'énoncé : la somme du pixel et de son négatif doit faire 255.
  5. On applique l'algorithme donné en commentaire : le pixel est mis à 0 s'il est inférieur au seuil et à 1 sinon.

Attention

  1. On peut regretter que le programme définisse les fonctions nbLig et nbCol afin de récupérer les dimensions d'une image mais ne les utilise pas pour parcourir l'image (voir ligne 14 et 25)