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–