Aller au contenu

Sujet n°1

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

>>> 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
19
20
21
22
23
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__':
    # Exemples de l'énoncé
    print(verifie([0, 5, 8, 8, 9]) == True)
    print(verifie([8, 12, 4]) == False)
    print(verifie([-1, 4]) == True)
    print(verifie([5]) == True)

    # Exemples supplémentaires
    print(verifie([5, 4, 3, 2]) == False)
    print(verifie([1, 2, 8]) == 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']
Commentaires sur l'énoncé original

Dans l'énoncé, Urne est écrit avec une majuscule tandis que dans l'exemple plus loin et dans le code, urne est écrit avec une minuscule.

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 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 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 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é...

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__':
    # Exemple de l'énoncé
    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'])

    # Exemple supplémentaire
    urne = ['B', 'B', 'B', 'C', 'B', 'C', 'A', 'A', 'B', 'B', 'C', 'B', 'C', 'C', 'A']
    election = depouille(urne)
    print(election == {'B': 7, 'C': 5, 'A': 3})
    print(vainqueur(election) = ['B'])