Aller au contenu

Index des sujets 2022

Corrigé sujet 20 - Année : 2022

Sujet 20 - 2022

Exercice 1

1
2
3
4
5
6
7
8
def xor(a,b):
    resultat = []
    for i in range(len(a)):
        if a[i]==b[i]:
            resultat.append(0)
        else:
            resultat.append(1)
    return resultat

Commentaire

On peut aussi utiliser une définition de listes par compréhension.

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
32
33
34
35
36
37
38
class Carre:
    def __init__(self, tableau = [[]]):
        self.ordre = len(tableau)
        self.valeurs = tableau

    def affiche(self):
        '''Affiche un carré'''
        for i in range(self.ordre):
            print(self.valeurs[i])

    def somme_ligne(self, i):
        '''Calcule la somme des valeurs de la ligne i'''
        return sum(self.valeurs[i])

    def somme_col(self, j):
        '''calcule la somme des valeurs de la colonne j'''
        return sum([self.valeurs[i][j] for i in range(self.ordre)])

def est_magique(carre):
    n = carre.ordre
    s = carre.somme_ligne(0)

    #test de la somme de chaque ligne
    for i in range(1,n): #(1)
        if carre.somme_ligne(i) != s:
            return False

    #test de la somme de chaque colonne
    for j in range(n):
        if carre.somme_col(j) != s: #(2)
            return False

    #test de la somme de chaque diagonale
    if sum([carre.valeurs[k][k] for k in range(n)]) != s: #(3)
            return False
    if sum([carre.valeurs[k][n-1-k] for k in range(n)]) != s:
            return False
    return True   #(4)
  1. Par la peine de tester la ligne d'indice 0, elle a servi à calculer la somme de référence s (ligne 21), on commence donc à 1.
  2. On utilise la méthode somme_col de la classe Carre
  3. La diagonale principale se caractérise par des indices de lignes et de colonne identiques.
  4. Si on atteint cette ligne, tous les tests ont été passé avec succès, le carré est magique !

Attention

  • Le code fourni utilise un objet mutable (une liste) comme paramètre par défaut d'une fonction :
    def __init__(self, tableau = [[]]):
    
    C'est une très mauvaise pratique car source d'erreurs, en effet la variable tableau étant mutable elle est modifiée par la fonction lors d'un premier appel et ne sera donc plus vide lors des appels suivants. Pour une solution à ce problème, on pourra par exemple consulter ce site