Le but de ces exercices est de trouver le résultat final sans taper le programme, donc en effectuant les étapes à la main sur papier comme si vous étiez l’ordinateur.
Dans un second temps, des applications concrètes sont données, à vous de déterminer laquelle des fonctions mystère sera utile.
Exercice 1
def mystere(arr):
s = 0
m = arr[0]
for v in arr:
if v > m:
m = v
s += 1
return s
>> mystere([2,3,7,0,6,3])
??
>> mystere([2])
??
Exercice 2
def mystere(arr, n):
s = 0
for v in arr:
if v > n:
s += 1
return s
>> mystere([2,3,7,0,6,3], 3)
??
>> mystere([2,3,7,0,6,3], 10)
??
Exercice 3
def mystere(arr, n):
s = None
for v in arr:
if v > n:
if s is None or s > v:
s = v
return s
>> mystere([2,3,7,0,6,3], 3)
??
>> mystere([2,3,7,0,6,3], 10)
??
Exercice 4
def mystere(arr):
s = 0
for i, v in enumerate(arr):
s += v * (-1) ** i
return s
>> mystere([2,3,7,0,6,3])
??
>> mystere(range(5))
??
Exercice 5
def mystere(arr):
s = 0
for i, v in enumerate(arr):
if v == i:
s += 1
return s
>> mystere([2,1,0,3,5,4])
??
>> mystere(range(5))
??
exercice 6
def mystere(arr):
s = sorted(list(arr))
for i, v in enumerate(arr):
s[i] = arr.index(s[i])
return s
>> mystere([2,5,3,1])
??
>> mystere([2])
??
exercice 7
def mystere(arr):
for i, v in enumerate(arr):
if i > 0 and v == arr[i - 1]: return True
return False
>> mystere([2,5,3,1])
??
>> mystere([2,5,5,3])
??
>> mystere(range(10))
??
Exercice 8
def mystere(arr1, arr2):
s = []
for v in arr1:
if v in arr2 and v not in s:
s.append(v)
return s
>> mystere([2,5,5,3], [4,4,2,5,7])
??
>> mystere([2],[4])
??
Exercice 9
def mystere(arr1, arr2):
s = []
for v in arr1 + arr2:
if v not in s:
s.append(v)
return s
>> mystere([2,2,2,7],[4,4,5])
??
Pour aller plus loin : Ecrire une fonction analogue (l’ordre des éléments pouvant être différent), en utilisant set, union et list.
exercice 10
def mystere(arr):
s = []
for u in arr:
n = 0
for v in arr:
if v > u:
n += 1
s.append(n)
return s
>> mystere([8,2,5,1,7])
??
>> mystere([1])
??
>> mystere(range(5))
??
Applications concrètes
Pour chacun des exemples concrets ci-dessous, retrouvez quelle fonction mystère serait adaptée pour répondre à la question.
Société de transport « Okilo »
La société OKILO a plusieurs camions, chacun étant spécialisé dans le transport de colis de plus de X kilos. Par exemple le camion ci-dessous ne transporte que des colis de plus de 10 kilos, il va donc refuser 3 colis sur les 5 et ne garder que les 2 de 15 et 13 kg.
Quelle fonction mystere permet, à partir d’une liste de poids et de la valeur minimale acceptée par le camion, d’obtenir le nombre de colis qui seront transportés ?
Mélange
Vous mettez 6 billes numérotées de 0 à 5 dans un sac. Au hasard vous les sortez une à une et les placez dans des boites numérotées également de 0 à 5. On se demande combien de billes ont un numéro correspondant à celui de leur boite ?

Quelle fonction mystere permet, à partir d’une liste de numéros ([1, 0, 2, 4, 3, 5] pour l’exemple) de connaitre le nombre de billes qui sont bien rangées (2 pour l’exemple) ?
Nombre de personnes dans le bus
Des personnes montent et descendent d’un bus. Par exemple la liste [3,2,8,0,6,3] signifie qu’au premier arrêt 3 personnes sont montées et 2 sont descendues. A l’arrêt suivant 8 personnes montent et aucune ne descend et enfin au 3e arrêt, 6 montent et 3 descendent. Sachant qu’il y avait 10 personnes dans le bus avant d’arriver au 1er arrêt, combien restera-t-il de personnes dans le bus après le 3e arrêt ?
Quelle fonction mystere vous aidera à trouver le nombre final de passagers ?
Combien sont plus grands que moi ?
5 personnes montrent aux autres leurs tailles respectives sur un petit panneau. Ainsi, tout le monde voit les tailles de tout le monde. Chacun se demande « Combien sont plus grands que moi ? »
La plus grande personne pensera donc à zéro et la plus petite à 4.
Quelle fonction mystere permet, à partir de la liste des tailles [1.6, 1.95, 1.56, 1.61, 1.52] d’obtenir la liste des nombres auxquels chacun pense ?
Ecrivains célèbres
On se demande s’il existe des écrivains dont le nom et le prénom s’écrivent avec des lettres différentes. Par exemple pour VICTOR HUGO, on voit qu’il y a la lettre O en commun, cet auteur ne correspond pas à ce que l’on recherche.
Quelle fonction mystere permet, à partir de 2 chaines de caractères (une pour le prénom, l’autre pour le nom) de nous dire quelles lettres sont communes ?
Arriverez-vous à trouver un auteur vérifiant ce que l’on cherche ?
secret défense
Voici la technique de cryptographie que vous voulez employer :
– La phrase à transmettre est MESSAGEIMPORTANT
– Comme il y a 16 lettres dans ce message, vous prenez les 16 premières lettres de l’alphabet que vous mélangez au hasard. Par exemple en tapant :
>> from random import sample
>> sample("ABCDEFGHIJKLMNOP",16)
['H', 'C', 'G', 'B', 'N', 'I', 'A', 'M', 'L', 'F', 'O', 'D', 'J', 'E', 'K', 'P']
– Maintenant vous regardez les rangs des lettres en partant de ‘A’ jusqu’à ‘P’ dans cet alphabet mélangé. Le ‘A’ est à la 6e position, le ‘B’ la position 3, le ‘C’ à la position 1 etc.
– On obtient la liste : [6, 3, 1, 11, 13, 9, 2, 0, 5, 12, 14, 8, 7, 4, 10, 15]
– Finalement, pour crypter votre message, vous allez prendre sa lettre n°6 (le E) puis la n°3 (le S), puis la n°1 (le E) etc. jusqu’à la 16e position.
– Vous obtenez le mot codé : ESERAPSMGTNMIAOT
Quelle fonction mystere permettra de faire fonctionner le programme ci-dessous ?
def coder(txt,cle):
ordre = mystere(cle)
s = ""
for i in range(len(txt)):
s += txt[ordre[i]]
return s
>> coder("MESSAGEIMPORTANT", "HCGBNIAMLFODJEKP")
ESERAPSMGTNMIAOT
Gratte-ciels
Des immeubles de différentes hauteurs sont côte à côte. On se demande combien vont être touchés par des rayons de lumières parallèles au sol et provenant de la gauche. Sur le visuel ci-dessous les hauteurs sont [2, 2, 3, 2, 6, 3, 6, 2] et l’on voit que seuls 3 seront touchés par les rayons (les autres sont cachés par au moins un plus grand à leur gauche).
Quelle fonction mystere va vous aider à compter le nombre d’immeubles touchés par les rayons ?
parterre de fleurs
Afin d’obtenir le label « Villes et villages fleuris », le maire décide de créer des parterres de fleurs en alternant fleurs et tulipes. Voici un exemple qui lui convient : 🌼🌷🌼🌷🌼🌷🌼🌷
Par contre celui-ci ne convient pas : 🌼🌷🌼🌷🌷🌼🌷🌼🌷 puisque 2 tulipes sont côte à côte.
Quelle fonction mystere va vous permettre de savoir si un parterre est correct ou non ?
>> correct("🌼🌷🌼🌷🌼🌷🌼🌷")
True
>> correct("🌼🌷🌼🌷🌷🌼🌷🌼🌷")
False