Aller au contenu

Sujet n°37

Sujet original

Pour télécharger l'énoncé original, cliquer ici.

Exercice n°1

Programmer la fonction verifie qui prend en paramètre un tableau de valeurs numériques non vide et qui renvoie True si ce tableau est trié dans l’ordre croissant, False sinon.

Exemples

Exemples :
>>> verifie([0, 5, 8, 8, 9])
True
>>> verifie([8, 12, 4])
False
>>> verifie([-1, 4])
True
>>> verifie([5])
True
Une solution
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
def verifie(tableau):
    """
    tableau - list, tableau non vide de nombres
    Sortie: bool, True si les éléments de tableau sont rangés par ordre croissant,
            False sinon
    """
    for i in range(1, len(tableau)):
        if tableau[i] < tableau[i-1]:
            return False
    return True



if __name__ == '__main__':
    print(verifie([0, 5, 8, 8, 9]) == True)
    print(verifie([8, 12, 4]) == False)
    print(verifie([-1, 4]) == True)
    print(verifie([5]) == True)

Exercice n°2

Les résultats d'un vote ayant trois issues possibles 'A', 'B' et 'C' sont stockés dans un tableau.

Exemple

Urne = ['A', 'A', 'A', 'B', 'C', 'B', 'C', 'B', 'C', 'B']

La fonction depouille doit permettre de compter le nombre de votes exprimés pour chaque artiste. Elle prend en paramètre un tableau et renvoie le résultat dans un dictionnaire dont les clés sont les noms des artistes et les valeurs le nombre de votes en leur faveur.

La fonction vainqueur doit désigner le nom du ou des gagnants. Elle prend en paramètre un dictionnaire dont la structure est celle du dictionnaire renvoyé par la fonction depouille et 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 vainqueur ci-après pour qu’elles renvoient les résultats attendus.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
def depouille(urne):
    resultat = ...
    for bulletin in urne:
        if ...:
            resultat[bulletin] = resultat[bulletin] + 1
        else:
            ...
    return resultat

def vainqueur(election):
    vainqueur = ''
    nmax = 0
    for candidat in election:
        if ... > ... :
            nmax = ...
            vainqueur = candidat
    liste_finale = [nom for nom in election if election[nom] == ...]
    return ...
Commentaires sur le code original
  1. Pour télécharger l'original du fichier à compléter, cliquer ici.

  2. Nommer une variable vainqueur comme le nom de la fonction qui la « contient » n'est vraiment pas recommandé...

  3. L'exemple proposé contient une erreur pour l'appel election. Voici l'exemple original :

    >>> urne = ['A', 'A', 'A', 'B', 'C', 'B', 'C', 'B', 'C', 'B']
    >>> election = depouille(urne)
    >>> election
    {'B': 4, 'A': 3, 'A': 3}        # Une erreur ici
    >>> vainqueur(election)
    ['B']
    

Exemples

>>> urne = ['A', 'A', 'A', 'B', 'C', 'B', 'C', 'B', 'C', 'B']
>>> election = depouille(urne)
>>> election
{'B': 4, 'A': 3, 'C': 3}
>>> vainqueur(election)
['B']
Une solution
def depouille(urne):
    resultat = dict()
    for bulletin in urne:
        if bulletin in resultat.keys():
            resultat[bulletin] = resultat[bulletin] + 1
        else:
            resultat[bulletin] = 1
    return resultat

def vainqueur(election):
    vainqueur = ''
    nmax = 0
    for candidat in election:
        if election[candidat] > nmax :
            nmax = election[candidat]
            vainqueur = candidat
    liste_finale = [nom for nom in election if election[nom] == nmax]
    return liste_finale


if __name__ == '__main__':
    urne = ['A', 'A', 'A','B', 'C', 'B', 'C','B', 'C', 'B']
    election = depouille(urne)
    print(election == {'B': 4, 'A': 3, 'C': 3})
    print(vainqueur(election) == ['B'])