Aller au contenu

Ep 45

▶ TĂ©lĂ©charger le sujet en pdf.

EXERCICE 1⚓

On veut trier par ordre croissant les notes d’une Ă©valuation qui sont des nombres entiers compris entre 0 et 10 (inclus).

Ces notes sont contenues dans une liste notes_eval.

Écrire une fonction rangement_valeurs prenant en paramĂštre la liste notes_eval et renvoyant une liste de longueur 11 telle que la valeur de cette liste Ă  chaque rang est Ă©gale au nombre de notes valant ce rang. Ainsi le terme de rang 0 indique le nombre de note 0, le terme de rang 1 le nombre de note 1, etc.

Écrire ensuite une fonction notes_triees prenant en paramĂštre la liste des effectifs des notes et renvoyant une liste contenant la liste, triĂ©e dans l’ordre croissant, des notes des Ă©lĂšves.

Exemple :

🐍 Script Python
    >>> notes_eval = [2, 0, 5, 9, 6, 9, 10, 5, 7, 9, 9, 5, 0, 9, 6, 5, 4]

    >>> effectifs_notes = rangement_valeurs(notes_eval)
    >>> effectifs_notes
    [2, 0, 1, 0, 1, 4, 2, 1, 0, 5, 1]

    >>> notes_triees(effectifs_notes)
    [0, 0, 2, 4, 5, 5, 5, 5, 6, 6, 7, 9, 9, 9, 9, 9, 10]
RĂ©ponse

Complétez le code ci-dessous

###
# Mettre votre code icibksl-nlbksl-nl



Solution

###
def rangementpy-undvaleurs(notespy-undeval):bksl-nl lst = [0]py-str11bksl-nl for note in notespy-undeval:bksl-nl lst[note] += 1bksl-nl return lstbksl-nlbksl-nldef notespy-undtriees(effectifspy-undnotes):bksl-nl triees = []bksl-nl for i in range(11):bksl-nl if effectifspy-undnotes[i] != 0:bksl-nl for py-und in range(effectifspy-undnotes[i]):bksl-nl triees.append(i)bksl-nl return trieesbksl-nlbksl-nl



EXERCICE 2⚓

L’objectif de cet exercice est d’écrire deux fonctions rĂ©cursives dec_to_bin et bin_to_dec assurant respectivement la conversion de l’écriture dĂ©cimale d’un nombre entier vers son Ă©criture en binaire et, rĂ©ciproquement, la conversion de l’écriture en binaire d’un nombre vers son Ă©criture dĂ©cimale.

Dans cet exercice, on s’interdit l’usage des fonctions Python bin et int.

On rappelle sur l’exemple ci-dessous une façon d’obtenir l’écriture en binaire du nombre 25 :

\(25 = 1 + 2 \times 12\)
\(\phantom{25} = 1 + 2 \times 12\)
\(\phantom{25} = 1 + 2 (0 + 2 \times 6)\)
\(\phantom{25} = 1 + 2 (0 + 2 (0 + 2 \times 3))\)
\(\phantom{25} = 1 + 2 (0 + 2 (0 + 2 (1 + 2 \times 1)))\)
\(\phantom{25} = 1 \times 2^0 + 0 \times 2^1 + 0 \times 2^2 + 1 \times 2^3 + 1 \times 2^4\)

L'Ă©criture binaire de 25 est donc 11001.

0n rappelle Ă©galement que :

  • a // 2 renvoie le quotient de la division euclidienne de a par 2.
  • a % 2 renvoie le reste dans la division euclidienne de a par 2.

On indique enfin qu’en Python si mot = "informatique" alors :

  • mot[-1] renvoie 'e', c’est-Ă -dire le dernier caractĂšre de la chaĂźne de caractĂšres mot.
  • mot[:-1] renvoie 'informatiqu' , c’est-Ă -dire l’ensemble de la chaĂźne de caractĂšres mot privĂ©e de son dernier caractĂšre.

ComplĂ©ter, puis tester, les codes de deux fonctions ci-dessous. On prĂ©cise que la fonction rĂ©cursive dec_to_bin prend en paramĂštre un nombre entier et renvoie une chaĂźne de caractĂšres contenant l’écriture en binaire du nombre passĂ© en paramĂštre.

RĂ©ponse

Complétez le code ci-dessous

###
def decpy-undtopy-undbin(nbpy-unddec):bksl-nl q, r = nbpy-unddec // 2, nbpy-unddec % 2bksl-nl if q == ...:bksl-nl return str(r)bksl-nl else:bksl-nl return decpy-undtopy-undbin(...) + ...bksl-nlbksl-nldef binpy-undtopy-unddec(nbpy-undbin):bksl-nl if nbpy-undbin == '0':bksl-nl return 0bksl-nl elif ...:bksl-nl return 1bksl-nl else:bksl-nl if nbpy-undbin[-1] == '0':bksl-nl bitpy-unddroit = 0bksl-nl else:bksl-nl bitpy-unddroit = ...bksl-nl return ... py-str binpy-undtopy-unddec(nbpy-undbin[:-1]) + ...bksl-nlbksl-nl



Solution

###
def decpy-undtopy-undbin(nbpy-unddec):bksl-nl q, r = nbpy-unddec // 2, nbpy-unddec % 2bksl-nl if q == 0:bksl-nl return str(r)bksl-nl else:bksl-nl return decpy-undtopy-undbin(q) + str(r)bksl-nlbksl-nldef binpy-undtopy-unddec(nbpy-undbin):bksl-nl if nbpy-undbin == '0':bksl-nl return 0bksl-nl elif nbpy-undbin == '1':bksl-nl return 1bksl-nl else:bksl-nl if nbpy-undbin[-1] == '0':bksl-nl bitpy-unddroit = 0bksl-nl else:bksl-nl bitpy-unddroit = 1bksl-nl return 2 py-str binpy-undtopy-unddec(nbpy-undbin[:-1]) + bitpy-unddroitbksl-nlbksl-nl



Exemple :

🐍 Script Python
    >>> dec_to_bin(25)
    '11001'
    >>> bin_to_dec('101010')
    42