Bonjour,
je suis actuellement bloqué dans l'écriture de mon code. Le but est de modéliser le problème de MOnty Hall en n'utilisant que la bibliothèque numpy et sans avoir recours à la boucle for. Pour cela :
Le terme results à la fin me retourne un nd.array avec la valeur 0 ou 1 suivant le bon choix de porte. Je voudrais que réaliser cette tâche plusieurs fois. En cherchant sur ce forum, j'ai trouvé une piste avec la fonction fromfunction mais lorsque je l'utilise de la manière suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 %matplotlib inline import numpy as np import matplotlib.pyplot as plt from enum import Enum class Strategie(Enum): GARDER = 0 CHANGER = 1 def play(): """Simulation du jeu de Monty Hall""" results = np.array([]) # Portes disponibles au début du jeu doors = np.array([1, 2, 3]) # Porte où se cache la voiture car = np.random.randint(1,4,1) # Porte choisie par le candidat choice = np.random.randint(1,4,1) # Portes que le présentateur peut ouvrir open_doors = np.setdiff1d(doors,[car, choice]) # Porte ouverte par le présentateur open_door = np.random.choice(open_doors, 1) # Porte qui reste fermée après l'ouverture du présentateur other_closed_door = np.setdiff1d(doors, [choice, open_door]) if other_closed_door == car: results = np.append(results, 1) else: results = np.append(results, 0) return results
Cela renvoie numpy.array not callable alors qu'avec le code suivant cela marche :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 liste = np.vectorize(play(Strategie.Garder)) result = np.fromfunction(liste, (100,), dtype = int)
1 - Pourquoi dois-je passer un argument à play dans le second cas ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42 %matplotlib inline import numpy as np import matplotlib.pyplot as plt from enum import Enum class Strategie(Enum): GARDER = 0 CHANGER = 1 def play(nbtous): """Simulation du jeu de Monty Hall""" results = np.array([]) # Portes disponibles au début du jeu doors = np.array([1, 2, 3]) # Porte où se cache la voiture car = np.random.randint(1,4,1) # Porte choisie par le candidat choice = np.random.randint(1,4,1) # Portes que le présentateur peut ouvrir open_doors = np.setdiff1d(doors,[car, choice]) # Porte ouverte par le présentateur open_door = np.random.choice(open_doors, 1) # Porte qui reste fermée après l'ouverture du présentateur other_closed_door = np.setdiff1d(doors, [choice, open_door]) if other_closed_door == car: results = np.append(results, 1) else: results = np.append(results, 0) return results liste = np.fromfunction(np.vectorize(play), (100,), dtype=int)
2 - Pourquoi cela ne marche pas dans le premier cas ?
Merci d'avance pour vos piste et vos éclaircissements. Comme vous l'avez compris je début sous numpy...
Partager