Programmation Python Aide-mémoire fourni (recto

Transcription

Programmation Python Aide-mémoire fourni (recto
ISBS B1-ST01
Contrôle de programmation
2014-2015
Programmation Python
Aide-mémoire fourni (recto-verso) – Durée 2 heures
Syntaxe de base et écritures de fonctions (8 points)
1
1.1
(1 point)
Décrivez en quelques lignes la syntaxe de range
1.2
Opérateurs (1 point)
Quels seront les affichages produits par les lignes suivantes ?
>>>
>>>
>>>
>>>
>>>
>>>
1.3
x = 2
a = ’x ’
x
’x ’
str ( x )
print (a , "=" , x )
Conversion kilomètre - miles (2 points)
Écrire la fonction qui convertit des km en miles (1 mile = 1, 609 km)
def deKmVersMile ( km ):
...
1.4
Recherche d’éléments sur critère (2 points)
Écrire la fonction qui retourne l’indice du premier élément strictement négatif parmi les
éléments d’une liste d’entiers (−1 si aucun élément n’est strictement négatif).
def i n d i c e P r e m i er N e g a t i f ( liste ):
...
1.5
Étude de programme (2 points)
Qu’affichera ce programme ?
titre = " Monty Python "
liste = [" Graham Chapman " , " John Cleese " , " Terry Jones " , " Eric Idle " , " Michael Palin "
for x in liste :
for c in titre :
if c != ’ ’ and c in x :
break
else : # ce " else " est bien a sa place
print ( x . split ( ’ ’)[1]. upper ())
a = [ x [1]. upper () for x in liste ][4:]
print ( a )
–1/3–
ISBS B1-ST01
Contrôle de programmation
2014-2015
Débogage de programme (6 points)
2
Soit la spécification de fonction suivante :
Déclaration : def queDesChiffres(s)
Rôle : vérifie que la chaîne s ne contient que des caractères chiffres
Données : s : chaîne de caractères
Résultat : booléen
Principe : vérification que chaque caractère de la chaîne est un chiffre
Le code (incorrect) suivant vous est fourni :
def queDesChiffres ( s ): # code incorrect
for c in s :
if c not in "123456789":
return False
return True
2.1
Tests (2 points)
Donnez un exemple de chaîne pour laquelle ce programme ne fonctionnera pas : une chaîne
ne contenant que des chiffres pour laquelle il retourne False
Donnez un exemple de chaîne bien particulière pour laquelle ce programme ne fonctionnera
pas : une chaîne ne contenant pas de chiffre pour laquelle il retourne True
2.2
Correction (2 points)
Modifiez ce programme pour qu’il fonctionne.
2.3
Réécriture (2 points)
Écrivez une version récursive de la fonction queDesChiffres en utilisant le principe suivant :
– si la chaîne est vide, retourner False
– si son initiale (premier caractère) est un chiffre :
– si la chaîne ne contient qu’un caractère, retourner True
– si la chaîne contient au moins deux caractères, retourner la valeur obtenue par l’appel
à la fonction appliquée à la chaîne privée de son initiale
– si son initiale n’est pas un chiffre, retourner False
–2/3–
ISBS B1-ST01
Contrôle de programmation
2014-2015
Simulation (6 points)
3
Une population est divisée en éléments pouvant chacun avoir une position parmi deux sur
une question (êtes vous de gauche ou de droite ? êtes vous pour la légalisation du camembert au
lait cru ? etc.)
Un individu peut convaincre un autre individu et le faire adhérer à sa position.
Pour une simulation informatique, on prendra lst une liste de n éléments valant 0 ou 1.
3.1
Programmes utilitaires (2 points)
Le module python random (utilisable avec l’instruction import random) fournit entre autres
la fonction random.randrange(a) fournissant un nombre entier pseudo-aléatoire compris entre 0
(inclus) et a (exclus).
Écrire une fonction militant(lst) qui retourne un nombre aléatoire pouvant être un indice
de lst.
Écrire une fonction voisin(k, lst) qui retourne aléatoirement le numéro d’un des deux
voisins de k dans lst. On distinguera les cas où k est à une des deux extrémités de la liste (pas
de choix pour le voisin) et ceux où k est à l’intérieur (deux voisins possibles).
3.2
Un modificateur d’opinion (2 points)
Écrire la fonction modif(lst) qui modifie une liste lst selon le principe suivant :
– on choisit un militant dans la liste ;
– ce militant convainc un de ses deux voisins (au hasard s’il n’est pas en extrémité de liste)
d’adhérer à sa position.
Ainsi, à partie de la liste
[0,1,0,0,1]
si l’élément militant est l’élément no 3 (d’opinion 0) et que son voisin (choisi au hasard) est
l’élément no 4, celui-ci prend l’opinion 0 (s’il avait déjà eu l’opinion 0, il n’en aurait pas changé),
ce qui donnera la liste :
[0,1,0,0,0]
3.3
Le simulateur (2 points)
On peut montrer qu’au bout d’un temps fini, toute la population simulée aura la même
opinion.
Écrire une fonction simule(n) qui étant donné un nombre n, génère une liste aléatoire lst de
n opinions (0 ou 1), puis applique à cette liste la fonction modif(lst) tant que les éléments de
la liste n’ont pas tous la même valeur, et enfin retourne le nombre d’appels à modif(lst).
— Fin de l’énoncé —
–3/3–