Algo Glouton
Listes opérations
Ep 45
le document
l'algorithme
Issue de : 23-NSI-13
EXERCICE 1
Ăcrire une fonction compte_occurrences
prenant en paramĂštres une valeur x
et un tableau tab
(de type list) et renvoyant le nombre dâoccurrences de x
dans tab.
Lâobjectif de cet exercice Ă©tant de parcourir un tableau, il est interdit dâutiliser la mĂ©thode count des listes Python.
Exemples :
đ Script Python >>> compte_occurrences ( 5 , [])
0
>>> compte_occurrences ( 5 , [ - 2 , 3 , 1 , 5 , 3 , 7 , 4 ])
1
>>> compte_occurrences ( 'a' , [ 'a' , 'b' , 'c' , 'a' , 'd' , 'e' , 'a' ])
3
RĂ©ponse
Complétez le code ci-dessous
# Mettre votre code icibksl-nlbksl-nl
Solution
def comptepy-undoccurrences(a, tab):bksl-nl nb = 0bksl-nl for element in tab:bksl-nl if element == a:bksl-nl nb += 1bksl-nl return nbbksl-nlbksl-nltry:bksl-nl assert comptepy-undoccurrences(5, []) == 0bksl-nl assert comptepy-undoccurrences(5, [-2, 3, 1, 5, 3, 7, 4]) == 1bksl-nl assert comptepy-undoccurrences('a', ['a','b','c','a','d','e','a']) == 3bksl-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 dans cet exercice un algorithme glouton pour le rendu de monnaie. Pour rendre une somme en monnaie, on utilise Ă chaque fois la plus grosse piĂšce possible et ainsi de suite jusquâĂ ce que la somme restante Ă rendre soit nulle.
Les piÚces de monnaie utilisées sont :
- pieces = [1, 2, 5, 10, 20, 50, 100, 200]
On souhaite Ă©crire une fonction rendu_monnaie
qui prend en paramĂštres
- un entier somme_due
représentant la somme à payer ;
- un entier somme_versee
représentant la somme versée qui est supérieure ou égale à somme_due ;
- et qui renvoie un tableau de type list contenant les piĂšces qui composent le rendu de la monnaie restante, câest-Ă -dire de somme_versee - somme_due
.
Ainsi, lâinstruction rendu_monnaie(452, 500)
renvoie le tableau [20, 20, 5, 2, 1]
.
En effet, la somme Ă rendre est de 48
euros soit 20 + 20 + 5 + 2 + 1
.
Le code de la fonction rendu_monnaie
est donné ci-dessous :
đ Script Python 1
2
3
4
5
6
7
8
9
10
11
12
13
14 pieces = [ 1 , 2 , 5 , 10 , 20 , 50 , 100 , 200 ]
def rendu_monnaie ( somme_due , somme_versee ):
'''Renvoie la liste des piĂšces Ă rendre pour rendre la monnaie
lorsqu'on doit rendre somme_versee - somme_due'''
rendu = ...
a_rendre = ...
i = len ( pieces ) - 1
while a_rendre > ... :
while pieces [ i ] > a_rendre :
i = i - 1
rendu . append ( ... )
a_rendre = ...
return rendu
đ Script Python >>> rendu_monnaie ( 700 , 700 )
[]
>>> rendu_monnaie ( 102 , 500 )
[ 200 , 100 , 50 , 20 , 20 , 5 , 2 , 1 ]
RĂ©ponse
Complétez le code ci-dessous
def rendupy-undmonnaie(sommepy-unddue, sommepy-undversee):bksl-nl pieces = [1, 2, 5, 10, 20, 50, 100, 200]bksl-nl rendu = ...bksl-nl apy-undrendre = ...bksl-nl i = len(pieces) - 1bksl-nl while apy-undrendre > ... :bksl-nl if pieces[i] <= apy-undrendre :bksl-nl rendu.append(...)bksl-nl apy-undrendre = ...bksl-nl else :bksl-nl i = ...bksl-nl return rendubksl-nlbksl-nl
Solution
def rendupy-undmonnaie(sommepy-unddue, sommepy-undversee):bksl-nl pieces = [1, 2, 5, 10, 20, 50, 100, 200]bksl-nl rendu = []bksl-nl apy-undrendre = sommepy-undversee - sommepy-undduebksl-nl i = len(pieces) - 1bksl-nl while apy-undrendre > 0 :bksl-nl if pieces[i] <= apy-undrendre :bksl-nl rendu.append(pieces[i])bksl-nl apy-undrendre = apy-undrendre - pieces[i]bksl-nl else :bksl-nl i = i - 1bksl-nl return rendubksl-nlbksl-nltry:bksl-nl assert rendupy-undmonnaie(700,700) == []bksl-nl assert rendupy-undmonnaie(102,500) == [200, 100, 50, 20, 20, 5, 2, 1]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