Ep 12
le document
l'algorithme
Issue de : 23-NSI-42
EXERCICE 1
Ăcrire une fonction tri_selection
qui prend en paramĂštre une liste tab
de nombres entiers et qui renvoie la liste triée par ordre croissant. Il est demandé de ne pas créer de nouvelle liste mais de modifier celle fournie.
On utilisera lâalgorithme suivant :
- on recherche le plus petit élément de la liste, en la parcourant du rang 0 au dernier rang, et on l'échange avec l'élément d'indice 0 ;
- on recherche ensuite le plus petit élément de la liste restreinte du rang 1 au dernier rang, et on l'échange avec l'élément d'indice 1 ;
- on continue de cette façon jusqu'à ce que la liste soit entiÚrement triée.
Exemple :
đ Script Python>>> tri_selection([1, 52, 6, -9, 12])
[-9, 1, 6, 12, 52]
RĂ©ponse
Complétez le code ci-dessous
# Mettre votre code icibksl-nlbksl-nl
Solution
def tripy-undselection(tab):bksl-nl for i in range(len(tab)-1):bksl-nl indicepy-undmin = ibksl-nl for j in range(i+1, len(tab)):bksl-nl if tab[j] < tab[indicepy-undmin]:bksl-nl indicepy-undmin = jbksl-nl tab[i], tab[indicepy-undmin] = tab[indicepy-undmin], tab[i]bksl-nl return tabbksl-nlbksl-nltry:bksl-nl assert tripy-undselection([1, 52, 6, -9, 12]) == [-9, 1, 6, 12, 52]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
Le jeu du « plus ou moins » consiste à deviner un nombre entier choisi entre 1 et 99.
Un élÚve de NSI décide de le coder en langage Python de la maniÚre suivante :
- le programme génÚre un nombre entier aléatoire compris entre 1 et 99 ;
- si la proposition de lâutilisateur est plus petite que le nombre cherchĂ©, lâutilisateur en est averti. Il peut alors en tester un autre ;
- si la proposition de lâutilisateur est plus grande que le nombre cherchĂ©, lâutilisateur en est averti. Il peut alors en tester un autre ;
- si lâutilisateur trouve le bon nombre en 10 essais ou moins, il gagne ;
- si lâutilisateur a fait plus de 10 essais sans trouver le bon nombre, il perd.
La fonction randint
est utilisée.
Si a et b sont des entiers tels que a <= b
, randint(a,b)
renvoie un nombre entier compris entre a
et b
.
Compléter le code ci-dessous et le tester :
RĂ©ponse
Complétez le code ci-dessous
from random import randintbksl-nlbksl-nldef pluspy-undoupy-undmoins():bksl-nl nbpy-undmystere = randint(1, ...) bksl-nl nbpy-undtest = int(input("Proposez un nombre entre 1 et 99 : "))bksl-nl compteur = ... bksl-nlbksl-nl while nbpy-undmystere != ... and compteur < ...: bksl-nl compteur = compteur + 1bksl-nl if nbpy-undmystere ... nbpy-undtest: bksl-nl nbpy-undtest = int(input("Trop petit ! Testez encore : "))bksl-nl else:bksl-nl nbpy-undtest = int(input("Trop grand ! Testez encore : "))bksl-nlbksl-nl if nbpy-undmystere == nbpy-undtest:bksl-nl print ("Bravo ! Le nombre Ă©tait ", ...) bksl-nl print("Nombre d'essais: ", ...) bksl-nl else:bksl-nl print ("Perdu ! Le nombre Ă©tait ", ...) bksl-nlbksl-nlbksl-nl
Solution
from random import randintbksl-nlbksl-nldef pluspy-undoupy-undmoins():bksl-nl nbpy-undmystere = randint(1,99)bksl-nl nbpy-undtest = int(input('Proposez un nombre entre 1 et 99 : '))bksl-nl compteur = 1bksl-nlbksl-nl while nbpy-undmystere != nbpy-undtest and compteur < 10 :bksl-nl compteur = compteur + 1bksl-nl if nbpy-undmystere > nbpy-undtest:bksl-nl nbpy-undtest = int(input('Trop petit ! Testez encore : '))bksl-nl else:bksl-nl nbpy-undtest = int(input('Trop grand ! Testez encore : '))bksl-nlbksl-nl if nbpy-undmystere == nbpy-undtest:bksl-nl print ('Bravo ! Le nombre Ă©tait ', nbpy-undmystere)bksl-nl print('Nombre d essais: ', compteur)bksl-nl else:bksl-nl print ('Perdu ! Le nombre Ă©tait ', nbpy-undmystere)bksl-nlbksl-nlpluspy-undoupy-undmoins()bksl-nl