Aller au contenu

Ep 26

le document

l'algorithme

Issue de : 23-NSI-20⚓

EXERCICE 1⚓

Écrire une fonction ajoute_dictionnaires qui prend en paramĂštres deux dictionnaires d1 et d2 dont les clĂ©s sont des nombres et renvoie le dictionnaire d dĂ©fini de la façon suivante :

  • Les clĂ©s de d sont celles de d1 et celles de d2 rĂ©unies.
  • Si une clĂ© est prĂ©sente dans les deux dictionnaires d1 et d2, sa valeur associĂ©e dans le dictionnaire d est la somme de ses valeurs dans les dictionnaires d1 et d2.
  • Si une clĂ© n’est prĂ©sente que dans un des deux dictionnaires, sa valeur associĂ©e dans le dictionnaire d est la mĂȘme que sa valeur dans le dictionnaire oĂč elle est prĂ©sente.

Exemples :

🐍 Script Python
>>> ajoute_dictionnaires({1: 5, 2: 7}, {2: 9, 3: 11})
{1: 5, 2: 16, 3: 11}
>>> ajoute_dictionnaires({}, {2: 9, 3: 11})
{2: 9, 3: 11}
>>> ajoute_dictionnaires({1: 5, 2: 7}, {})
{1: 5, 2: 7}
RĂ©ponse

Complétez le code ci-dessous

###
# Mettre ici votre codebksl-nlbksl-nl



Solution

###
def ajoutepy-unddictionnaires(d1, d2):bksl-nl for cle in d2:bksl-nl if cle in d1:bksl-nl d1[cle] += d2[cle]bksl-nl else:bksl-nl d1[cle] = d2[cle]bksl-nl return d1bksl-nlbksl-nltry:bksl-nl assert ajoutepy-unddictionnaires({1: 5, 2: 7}, {2: 9, 3: 11}) == {1: 5, 2: 16, 3: 11}bksl-nl assert ajoutepy-unddictionnaires({}, {2: 9, 3: 11}) == {2: 9, 3: 11}bksl-nl assert ajoutepy-unddictionnaires({1: 5, 2: 7}, {}) == {1: 5, 2: 7}bksl-nl print('Tout semble correct 👍')bksl-nlbksl-nlexcept AssertionError as asser:bksl-nl print('Le rĂ©sultat de votre fonction n\'est pas conforme đŸ€”')bksl-nl



EXERCICE 2⚓

On considÚre une piste carrée qui contient 4 cases par cÎté. Les cases sont numérotées de 0 inclus à 12 exclu comme ci-dessous :

image

L’objectif de l’exercice est d’implĂ©menter le jeu suivant :

Au dĂ©part, le joueur place son pion sur la case 0. A chaque coup, il lance un dĂ© Ă©quilibrĂ© Ă  six faces et avance son pion d’autant de cases que le nombre indiquĂ© par le dĂ© (entre 1 et 6 inclus) dans le sens des aiguilles d’une montre.

Par exemple, s’il obtient 2 au premier lancer, il pose son pion sur la case 2 puis s’il obtient 6 au deuxiùme lancer, il le pose sur la case 8, puis s’il obtient à nouveau 6, il pose le pion sur la case 2.

Le jeu se termine lorsque le joueur a posé son pion sur toutes les cases de la piste.

ComplĂ©ter la fonction nbre_coups ci-dessous de sorte qu’elle renvoie le nombre de lancers alĂ©atoires nĂ©cessaires pour terminer le jeu.

🐍 Script Python
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
from random import randint

def nombre_coups():
    '''Simule un jeu de plateau avec 12 cases et renvoie le nombre
    minimal de coups pour visiter toutes les cases.'''
    nombre_cases = 12
    # indique si une case a été vue
    cases_vues = [ False ] * nombre_cases
    nombre_cases_vues = 1
    cases_vues[0] = True
    case_en_cours = 0
    n = ... 
    while ... < ...: 
        x = randint(1, 6)
        case_en_cours = (case_en_cours + ...) % ... 
        if ...: 
            cases_vues[case_en_cours] = True
            nombre_cases_vues = ... 
        n = ... 
    return n
Proposer ensuite quelques tests pour en vérifier le fonctionnement.

RĂ©ponse

Complétez le code ci-dessous

###
from random import randintbksl-nlbksl-nldef nbrepy-undcoups():bksl-nl n = ...bksl-nl casespy-undvues = [0]bksl-nl casepy-undenpy-undcours = 0bksl-nl nbrepy-undcases = 12bksl-nl while ... < ...:bksl-nl x = randint(1, 6)bksl-nl casepy-undenpy-undcours = (casepy-undenpy-undcours + ...) % ...bksl-nl if ...:bksl-nl casespy-undvues.append(casepy-undenpy-undcours)bksl-nl n = ...bksl-nl return nbksl-nlbksl-nl



Solution

###
from random import randintbksl-nlbksl-nldef nbrepy-undcoups():bksl-nl n = 0bksl-nl casespy-undvues = [0]bksl-nl casepy-undenpy-undcours = 0bksl-nl nbrepy-undcases = 12bksl-nl while len(casespy-undvues) < nbrepy-undcases:bksl-nl x = randint(1, 6)bksl-nl casepy-undenpy-undcours = (casepy-undenpy-undcours + x) % nbrepy-undcasesbksl-nl if casepy-undenpy-undcours not in casespy-undvues:bksl-nl casespy-undvues.append(casepy-undenpy-undcours)bksl-nl n = n + 1bksl-nl return nbksl-nlbksl-nltry:bksl-nl for essai in range(100):bksl-nl n = nbrepy-undcoups()bksl-nl assert n >= 12 bksl-nl print('Tout semble correct 👍')bksl-nlbksl-nlexcept AssertionError as asser:bksl-nl print('Le rĂ©sultat de votre fonction n\'est pas conforme đŸ€”')bksl-nl