Aller au contenu

hide: - navigation in docs.md

Index des sujets 2022

Corrigé sujet 09 - Année : 2022

Sujet 09 - 2022

Exercice 1

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
def calcul(k):
  resultat=[k]
  while k!=1:
    if k%2==0: 
      k=k//2
    else:
      k=3*k+1
    resultat.append(k)
  return resultat

print(calcul(7))

Commentaires

  • Le sujet avantage les élèves ayant suivi l'enseignement de spécialités mathématiques. Les suites définies par récurrence comme celle de l'énoncé y sont vues dès la classe de première.
  • Le test permettant de savoir si un entier 2 est pair s'écrit n%2 == 0, c'est à dire qu'on teste qu'en divisant par 2 il reste 0.
  • Attention à la ligne 5 à bien utiliser la division euclidienne \\ et pas la division décimale \ (sinon le résultat obtenu serait alors un flottant).

Exercice 2

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
dico = {"A":1, "B":2, "C":3, "D":4, "E":5, "F":6, "G":7, \
        "H":8, "I":9, "J":10, "K":11, "L":12, "M":13, \
        "N":14, "O":15, "P":16, "Q":17, "R":18, "S":19, \
        "T":20, "U":21,"V":22, "W":23, "X":24, "Y":25, "Z":26}

def est_parfait(mot) :
    #mot est une chaîne de caractères (en lettres majuscules)
    code_c = ""
    code_a = 0 #(1)
    for c in mot :
        code_c = code_c + str(dico[c]) #(2)
        code_a = code_a + dico[c] #(3)
    code_c = int(code_c)
    if code_c%code_a==0 : #(4)
        mot_est_parfait = True
    else :
        mot_est_parfait = False
    return [code_a, code_c, mot_est_parfait]
  1. Bien comprendre que le code_a est un entier (addition des entiers), tandis que code_c est une chaîne de caractères (concaténation).
  2. Les valeurs du dictionnaires sont des entiers pour concaténer avec la chaine code_c il faut convertir en str
  3. On addition des entiers, pas de conversion nécessaire
  4. Teste si le code additionné divise le code concaténé.

Attention

  • Les lignes 14,15,16, et 17 se résument à mot_est_parfait = (code_c%code_a==0)
  • Même si cela est autorisé en Python, le changement de type d'une variable tel que celui effectué ligne 13 (où int_c qui était une chaîne de caractères devient un entier) est largement considéré comme une mauvaise pratique de programmation.
  • On aurait pu se passer du dictionnaire en utilisant les fonctions ord et chr.