Dépouillement d'une élection - Sujet 27 - EP NSI 2025
Énoncé du problème
EXERCICE 1 (10 points)
Écrire une fonction verifie qui prend en paramètre un tableau de valeurs numériques et qui renvoie True si ce tableau est trié dans l’ordre croissant, False sinon.
Un tableau vide est considéré comme trié.
Exemples :
>>> verifie([0, 5, 8, 8, 9])
True
>>> verifie([8, 12, 4])
False
>>> verifie([-1, 4])
True
>>> verifie([])
True
>>> verifie([5])
True
EXERCICE 2 (10 points)
On considère dans cet exercice l’élection d’un vainqueur à l’issue d’un vote. Les résultats du vote sont stockés dans un tableau : chaque vote exprimé est le nom d’un ou d’une candidate.
Par exemple, les résultats pourraient correspondre au tableau :
urne = ['A', 'A', 'A', 'B', 'C', 'B', 'C', 'B', 'C', 'B']
indiquant que 3 candidats ont obtenu au moins un vote chacun : A, B et C.
On cherche à déterminer le ou les candidats ayant obtenu le plus de suffrages. Pour cela, on propose d’écrire deux fonctions :
- la fonction
depouilledoit permettre de compter le nombre de votes exprimés pour chacune des issues. Elle prend en paramètre un tableau et renvoie le résultat dans un dictionnaire dont les clés sont les noms des issues et les valeurs le nombre de votes en leur faveur ; - la fonction
vainqueursdoit désigner le nom du ou des gagnants. Elle prend en paramètre un dictionnaire non vide dont la structure est celle du dictionnaire renvoyé par la fonctiondepouilleet renvoie un tableau. Ce tableau peut donc contenir plusieurs éléments s’il y a des artistes ex-aequo.
Compléter les fonctions depouille et vainqueurs ci-après pour qu’elles renvoient les résultats attendus.
def depouille(urne):
'''prend en paramètre une liste de suffrages et renvoie un
dictionnaire avec le nombre de voix pour chaque candidat'''
resultat = ...
for bulletin in urne:
if ...:
resultat[bulletin] = resultat[bulletin] + 1
else:
...
return resultat
def vainqueurs(election):
'''prend en paramètre un dictionnaire non vide avec le nombre de voix
pour chaque candidat et renvoie la liste des vainqueurs'''
nmax = 0
for candidat in election:
if ... > ... :
nmax = ...
liste_finale = [ nom for nom in election if ... ]
return ...
Exemples d’utilisation :
>>> depouille([ 'A', 'B', 'A' ])
{'A': 2, 'B': 1}
>>> depouille([])
{}
>>> election = depouille(['A', 'A', 'A', 'B', 'C',
'B', 'C', 'B', 'C', 'B'])
>>> election
{'A': 3, 'B': 4, 'C': 3}
>>> vainqueurs(election)
['B']
>>> vainqueurs({ 'A' : 2, 'B' : 2, 'C' : 1})
['A', 'B']
Les contraintes ci-dessous sont ajoutées par la plateforme et ne font pas partie du sujet.
Exercice 1
Contraintes :
verifieprend en paramètre un tableau (list) de valeurs numériques (intoufloat)0 <= len(tab) <= 10^4-10^9 <= tab[i] <= 10^9- le tableau peut être vide ou ne contenir qu’un seul élément
verifierenvoie un booléen (TrueouFalse)
Exercice 2
Contraintes :
depouilleprend en paramètre un tableau (list) dont chaque élément est une chaîne de caractères (str) désignant un nom de candidat0 <= len(urne) <= 10^41 <= len(urne[i]) <= 20; les noms sont formés de caractères alphanumériques- l’urne peut être vide :
depouille([])renvoie{} depouillerenvoie un dictionnaire (dict) dont les clés sont des chaînes de caractères et les valeurs des entiers strictement positifsvainqueursprend en paramètre un dictionnaire non vide de la forme renvoyée pardepouillepour une urne non vide :1 <= len(election) <= 10^4, et1 <= election[nom] <= 10^4pour chaque clénom- le dictionnaire vide et les dictionnaires contenant des valeurs nulles ou négatives sont hors du champ de
vainqueurset ne sont jamais soumis à la fonction vainqueursrenvoie un tableau (list) de chaînes de caractères, les noms y apparaissant dans l’ordre des clés du dictionnaire reçu