Dichotomie
Listes opérations
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 :
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