Problème de compréhension Python

Résolu/Fermé
31hajoura Messages postés 2 Date d'inscription vendredi 27 mars 2020 Statut Membre Dernière intervention 27 mars 2020 - Modifié le 27 mars 2020 à 18:24
yg_be Messages postés 22692 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 16 avril 2024 - 27 mars 2020 à 19:07
Bonjour,

J'ai effectué un exercice et ma version ne donne pas le même résultat que le leur ...
Est-ce que vous pouvez m'expliquer ce qui cloche.
voici l'intitulé:


Soit 10.000 lancers d'un dé équilibré classique (à 6 faces). Parmi ces 10.000 lancers, on en prend 1.000 aléatoirement.

On réalise 5 fois cette expérience, et on note m la moyenne des fréquences de 6 obtenus sur les 10.000 lancers et n la moyenne des fréquences de 4 obtenus dans le sous-échantillon.

Quelles seraient les valeurs de m et n à l'issue de cette expérience ?

voici la mienne:

for i in range(5):
    ech = [rd.randint(1,6) for j in range(10000)]
for i in range(5):
    sous_ech = [rd.sample(ech, 1000)]
   
    
m = ech.count(6)/10000
n = sous_ech.count(4)/1000
    
print("m =", m/5, "et n =", n/5)

Voici la correction:

import random
m = 0
n = 0
for i in range(5):
    listeDe = []

    j = 0

    while j < 10000:

        listeDe.append(random.randint(1, 6))

        j += 1

        sousEchantillonDe = random.sample(listeDe, 1000)

    
    m += listeDe.count(6)/10000

    n += sousEchantillonDe.count(4)/1000

    

print("m =", m/5, "et n =", n/5)


pouvez m'expliquer quel est la difference.
En vous remerciant

2 réponses

Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178
27 mars 2020 à 18:32
Bonsoir 31hajoura,

Ces 2 programmes ne font pas du tout la même chose

Dans la correction:

m=0, n=0
1_ on crée une liste de 10000 nombres aléatoires
2_ on en prend un échantillon de 1000 nombres
3_ on ajoute à m le nombre d'apparitions du chiffre 6 dans la liste/10000
4_ on ajoute à n le nombre d'apparitions du chiffre 4 dans l'échantillon/1000

et on recommence tout çà 3 fois
donc à chaque tour de boucle for i in range(5), on ajoute des valeurs à m et n

Toi tu fais çà:

1_on définit 4 fois la variable ech, donc à la fin de la boucle, c'est la dernière qui reste
(la boucle ne sert à rien : on écrase la valeur de ech à chaque tour)
2_ on définit 4 fois la variable sous_ech, donc à la fin de la boucle, c'est la dernière qui reste
(la boucle ne sert à rien : on écrase la valeur de sous_ech à chaque tour)
3_ on initialise une seule fois m et n avec les dernières valeurs de ech et sous ech
1
31hajoura Messages postés 2 Date d'inscription vendredi 27 mars 2020 Statut Membre Dernière intervention 27 mars 2020
27 mars 2020 à 19:02
D'accord, j'y vois beaucoup plus clair ...

Je te remercie beaucoup, ça me faisait tourner la tête ^^
0
yg_be Messages postés 22692 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 16 avril 2024 1 471
27 mars 2020 à 19:07
merci de marquer, le moment venu, a discussion comme résolue.
0