Problème de Monty Hall
Fermé
maxos68000
Messages postés
1
Date d'inscription
dimanche 3 octobre 2021
Statut
Membre
Dernière intervention
3 octobre 2021
-
Modifié le 5 oct. 2021 à 13:05
mamiemando Messages postés 33372 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 22 novembre 2024 - 6 oct. 2021 à 11:07
mamiemando Messages postés 33372 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 22 novembre 2024 - 6 oct. 2021 à 11:07
A voir également:
- Application la halle introuvable
- Application mobile - Guide
- Application gps sans internet - Guide
- Desinstaller application windows - Guide
- Application miroir - Guide
- Application partage photo entre amis - Guide
3 réponses
yg_be
Messages postés
23342
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
21 novembre 2024
Ambassadeur
1 550
3 oct. 2021 à 21:36
3 oct. 2021 à 21:36
bonjour,
peux-tu préciser le langage, python, quand tu utilises les balises de code? explications: https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
ton code donne des erreurs: es-tu certain d'avoir partagé le code complet?
à quoi sert la seconde ligne dans ce code?
tu n'utilises plus
peux-tu préciser le langage, python, quand tu utilises les balises de code? explications: https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
ton code donne des erreurs: es-tu certain d'avoir partagé le code complet?
à quoi sert la seconde ligne dans ce code?
elif strategie == "garder" : portes.remove(porte_eliminee)
tu n'utilises plus
portespar la suite.
mamiemando
Messages postés
33372
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
22 novembre 2024
7 802
Modifié le 5 oct. 2021 à 13:17
Modifié le 5 oct. 2021 à 13:17
Bonjour,
Si l'on s'en tient à la définition du problème de Monty Hall, la porte éliminée ne peut être ni la porte gagnante, ni la porte choisie par le joueur. Or dans ton code, rien n'empêche ces situations d'arriver, ce qui peut engendrer un biais statistiques sur tes simulations.
Le début du programme ressemblerait donc plus à ça :
Ensuite dans ton code, tu compares (l23) une liste à un entier, donc ce test est toujours faux. Il faudrait à la rigueur le comparer
Enfin, comme le souligne yg_be, le contenu de
Bonne chance
Si l'on s'en tient à la définition du problème de Monty Hall, la porte éliminée ne peut être ni la porte gagnante, ni la porte choisie par le joueur. Or dans ton code, rien n'empêche ces situations d'arriver, ce qui peut engendrer un biais statistiques sur tes simulations.
Le début du programme ressemblerait donc plus à ça :
... portes = [i+1 for i in range(3)] choix_joueur = np.random.choice(portes) porte_gagnante = np.random.choice(portes) portes_eliminables = [ porte for porte in portes if porte != choix_joueur and porte != porte_gagnante ] porte_eliminee = np.random.choice(portes_eliminables) portes.remove(porte_eliminee) ...
Ensuite dans ton code, tu compares (l23) une liste à un entier, donc ce test est toujours faux. Il faudrait à la rigueur le comparer
portes[0](qui ne contient plus qu'une porte).
Enfin, comme le souligne yg_be, le contenu de
portesne sert pas à grand chose. Ton programme s'écrit bien plus simplement :
#!/usr/bin/env python3 # -*- coding: utf-8 -*- import numpy as np import matplotlib.pyplot as plt def jeu (strategie): portes = [i+1 for i in range(3)] choix_joueur = np.random.choice(portes) porte_gagnante = np.random.choice(portes) # portes_eliminables = [ # porte # for porte in portes # if porte != choix_joueur and porte != porte_gagnante # ] # porte_eliminee = np.random.choice(portes_eliminables) # portes.remove(porte_eliminee) return ( int(porte_gagnante == choix_joueur) if strategie == "garder" else int(porte_gagnante != choix_joueur) ) garder = np.sum([jeu("garder") for i in range(1000)]) changer = np.sum([jeu("changer") for i in range(1000)]) print(garder) print(changer) plt.figure() plt.bar(1, garder) plt.bar(2, changer)
Bonne chance
yg_be
Messages postés
23342
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
21 novembre 2024
1 550
Modifié le 5 oct. 2021 à 13:59
Modifié le 5 oct. 2021 à 13:59
il me semble que la comparaison entre un entier et une liste à un élément fonctionne bien.
import numpy p=[0] i=numpy.random.choice(p) print(i,p) if i == p: print("ok")
mamiemando
Messages postés
33372
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
22 novembre 2024
7 802
>
yg_be
Messages postés
23342
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
21 novembre 2024
5 oct. 2021 à 15:07
5 oct. 2021 à 15:07
Effectivement, car
iest ici un
numpy.int64qui supporte la comparaison avec un itérable, mais ça n'en reste pas moins un abus d'écriture qui selon moi nuit à la lisibilité du code : il faudrait en toute rigueur écrire
i == p[0]sinon le test plante quand l'itérable a plusieurs éléments.
yg_be
Messages postés
23342
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
21 novembre 2024
1 550
>
mamiemando
Messages postés
33372
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
22 novembre 2024
5 oct. 2021 à 16:42
5 oct. 2021 à 16:42
p[0]plantera quand la liste est vide.
mamiemando
Messages postés
33372
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
22 novembre 2024
7 802
>
yg_be
Messages postés
23342
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
21 novembre 2024
Modifié le 6 oct. 2021 à 11:08
Modifié le 6 oct. 2021 à 11:08
Oui, de même que
i == p. Et c'est pour ça que dans le cas général, il faudrait vérifier si
pest non vide. Mais bon, dans le code proposé ça ne peut pas arriver.