CORRIGÉ SUJET 0 MINES
1. nest de type int (entier). Si x∈[0,1[, alors 0 ≤(h+2)/2 ×x<(h+2)/2, donc nest un entier tel
que : 0 ≤n<h
2+2.
2. def calcul_n ( h ) :
i f h>1 :
return int ( ( h+2.0)/2*random ( )) +1
else :
return 0
3. Petite difficulté : si on ne fait rien, toute variable piles définie dans le corps de la fonction est
locale et sera "détruite" à la fin de l’exécution. On rend une variable "globale" en la déclarant, à
l’aide du mot-clé "global".
def i n i t i a l i s a t i o n (P ) :
global p il e s
pi les = [0 ] *P
Méthodes alternatives pour créer la liste [0,· · · ,0] :
pi les =[0 for i in range (P ) ]
ou
pi les = []
for i in range (P ) :
pi le s . append (0 )
On évite le problème de la variable globale en définissante une fonction qui renvoie une liste
[0,· · · ,0], on ne définit piles que dans le programme principal :
def i n i t i a l i s a t i o n (P)
return [ 0 ]*P
pi le s = i n i t i a l i s a t i o n (100) # par exemple
Rappel cours :
Les variables créées par une fonction sont, par défaut, locales, et masquent (sans les "écraser") les
variables globales de même nom. Elles sont "détruites" à la fin de l’évaluation. Les paramètres
formels de la fonction sont des variables locales qui sont initialisées avec la même identité (et
en particulier la même valeur) que les arguments passés à la fonction. Il n’est pas interdit de
modifier leur valeur pendant l’évaluation, mais à la fin de l’évaluation, ces modifications ne sont
pas conservées car les variables locales sont détruites. Deux exceptions : La déclaration "global"
permet à la fonction de créer et modifier des variables globales, ces modifications étant conservées
après l’évaluation de la fonction. Quand l’argument est une liste (type "mutable"), les modifica-
tions apportées à ses termes sont conservées, car elle conserve son identité, ce sont les identités
des termes qui changent (ce n’est pas le cas si on ré-affecte directement la liste).
En Python, les listes (et les dictionnaires) sont mutables. Attention : les entiers, les floats, mais
aussi les strings et les tuples ne sont pas mutables !
4. def actualise ( piles , perdus ) :
global perdus # pas nécessaire pour une l i s t e
for p in range ( len ( p il es ) −1):
h= pi l e s [ p+1]−p i l e s [ p ]
i f h>1:
n=calcul_n (h )
p i l es [ p ] −= n