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 :

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
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
 
liste = np.vectorize(play(Strategie.Garder))
result = np.fromfunction(liste, (100,), dtype = int)
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
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)
1 - Pourquoi dois-je passer un argument à play dans le second cas ?
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...