Bibm@th

Forum de mathématiques - Bibm@th.net

Bienvenue dans les forums du site BibM@th, des forums où on dit Bonjour (Bonsoir), Merci, S'il vous plaît...

Vous n'êtes pas identifié(e).

#1 08-12-2019 18:50:08

florian52
Membre
Inscription : 08-12-2019
Messages : 6

Probabilités sur python

Bonjour j'aurai besoin de renseignements sur un problème python.
Il faut d'abord que je fasse un programme qui me permet de faire avancer ou reculer quelqu'un. Il faut que cette personne saute 1m toutes les secondes. La probabilité qu'il fasse un saut vers l'avant ou vers l'arrière est la même. Il faut créer un programme qui renvoie la position de la personne après avoir fait 1000 sauts. Donc j'ai créer le programme joint ci dessous mais je me demande si il n'y a pas une erreur car le programme ne m'envoie que des résultats entre - 50 et 50. J'ai donc définit la probabilité qu'il avance 1 et qu'il recule 2.
Il y'a aussi un 2e programme qui simule n expérience du programme au dessus et qui calcule le nombre de fois où la personnes à fait plus de 100m( ce qui est problématique car je ne trouve jamais plus de 50).
Normalement le 2e programme est bon mais il mais il me semble qu'il fait trouve un moyen d'intégrer n dans le premier programme pour le définir(je crois qu'il faut que n=0 au début et qu'à chaque expérience n=n+1 mais je suis pas sûr du tout et je ne sais pas comment faire).
Voici les programmes
https://www.casimages.com/i/191208062612559574.jpg.html
Je vous remercie d'avance,
Bonne soirée

Dernière modification par florian52 (08-12-2019 18:51:19)

Hors ligne

#2 08-12-2019 21:42:24

freddy
Membre chevronné
Lieu : Paris
Inscription : 27-03-2009
Messages : 7 457

Re : Probabilités sur python

Salut,

ça aurait été plus sympa que tu nous donnes en lecture directe tes deux programmes, ça prend deux minutes à écrire et ça nous évite des aller-retour qui m'agacent.
Pour les résultats entre -50 et +50, je te rappelle que c'est un tirage aléatoire entre 1 et 2, par valeur entière, et donc, tu as le résultat d'une marche aléatoire où les queues de distributions sont très fines.
Connais tu la loi de proba qui sous-tend la fonction randint(a,b) ? Uniforme avérée ?

Dernière modification par freddy (08-12-2019 22:44:28)


De la considération des obstacles vient l’échec, des moyens, la réussite.

Hors ligne

#3 09-12-2019 06:25:34

florian52
Membre
Inscription : 08-12-2019
Messages : 6

Re : Probabilités sur python

Re bonjour,
Merci pour la réponse, mais ce qui me semble bizarre c'est que si les résultats sont toujours inférieurs à 100 la 2e partie du problème ne sert à rien. Et sinon je ne connais pas la cette loi uniforme avérée. Et sinon désolé pour l'image, je parle sur mon téléphone et je fais les programmes sur mon pc.
Bonne journée

Hors ligne

#4 09-12-2019 10:20:54

freddy
Membre chevronné
Lieu : Paris
Inscription : 27-03-2009
Messages : 7 457

Re : Probabilités sur python

Salut,

bon, je comprends que tu fais des choses dans un cadre que tu ne connais pas bien, je ne vais pas pouvoir t'aider, salut !
PS : je parle aussi sur mon téléphone et je me connecte surtout avec mon PC :-)


De la considération des obstacles vient l’échec, des moyens, la réussite.

Hors ligne

#5 09-12-2019 10:45:12

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 947

Re : Probabilités sur python

Bonjour,

freddy a écrit :

ça prend deux minutes à écrire et ça nous évite des aller-retour qui m'agacent

Il n'y a pas que toi que ça agace, surtout vu la photo :
1. En couleur : pour quoi faire ?
2. Photo pas prise à l'aplomb du document donc éclairage non uniforme : du clair au très sombre.
    Pour la rendre acceptable, obligation de la retoucher avec un petit logiciel...

florian52 a écrit :

désolé pour l'image, je parle sur mon téléphone et je fais les programmes sur mon pc.

Je n'apprécie pas beaucoup...Cela me donne l'impression qu'on se fiche de moi : quand on est demandeur, la moindre des choses est de faire profil bas.
Apprécierais-tu que ton prof vous fournisse des documents pareils ?
Et qu'à la remarque que ce ce n'est pas terrible, voire qu'il y a là un manque de respect, il vous réponde d'un air goguenard :
Bon désolé les gars, au cas ou vous ne le sauriez pas, je parle sur mon téléphone et je fais les programmes sur mon pc.

Enfin, désolé si tu ne savais pas, le copier/coller, ça existe sur PC et même avec Python :
1. On sélectionne ces lignes de code et dans un des menus se trouve l'instruction copy. On clique
2. Tu viens ici, clic droit dans ton post  et coller.

Donc, tu tire à pile ou face : pile tu avances, face tu recules...
Pour 20 essais de 1000 tirages, nombre de "Face" :

Essai n° 1 : 493
Essai n° 2 : 508
Essai n° 3 : 516
Essai n° 4 : 518
Essai n° 5 : 498
Essai n° 6 : 490
Essai n° 7 : 496
Essai n° 8 : 510
Essai n° 9 : 507
Essai n°10 : 494
Essai n°11 : 468
Essai n°12 : 516
Essai n°13 : 529
Essai n°14 : 498
Essai n°15 : 494
Essai n°16 : 512
Essai n°17 : 502
Essai n°18 : 482
Essai n°19 : 492
Essai n°20 : 523

Ça te choque ? moi, non....
Sur 1000 tirages, à chacun d'entre eux, tu as 1 chance sur 2 de faire Pile, 1 chance sur 2 de faire Face...
Sur 1000 tirages, tu n'obtiendras pas exactement 500 Face et 500 Pile, ce sera 500 $\pm$ variation...
C'est ce que te montre Python...
randint(a,b), c'est borne sup comprise.
J'ai testé randrange(a,b) avec borne sup exclue :

Essai n° 1 : 493
Essai n° 2 : 508
Essai n° 3 : 516
Essai n° 4 : 518
Essai n° 5 : 498
Essai n° 6 : 490
Essai n° 7 : 496
Essai n° 8 : 510
Essai n° 9 : 507
Essai n°10 : 494
Essai n°11 : 468
Essai n°12 : 516
Essai n°13 : 529
Essai n°14 : 498
Essai n°15 : 494
Essai n°16 : 512
Essai n°17 : 502
Essai n°18 : 482
Essai n°19 : 492
Essai n°20 : 523

Donc, c'est conforme...

@+

[EDIT] Tu vois, je t'avais dit que te foutre de la g... des gens n'amenait rien de bon... freddy n'a pas aimé non plus.

Dernière modification par yoshi (09-12-2019 10:47:07)


Arx Tarpeia Capitoli proxima...

Hors ligne

#6 09-12-2019 18:41:01

florian52
Membre
Inscription : 08-12-2019
Messages : 6

Re : Probabilités sur python

Bonjour,
Je tiens tout d’abord à m'excuser, car je me suis en effet rendu compte que je m'étais mal exprimé(mon intention n'était tout de même pas d'être hypocrite). Je suis sincèrement désolé pour la photo de mauvaise qualité, voilà donc les programmes:

from random import randint
def mille_sauts():
    position=0
    for i in range(1000):
        if randint(1,2)==1:
            position=position+1
        else:
            position=position-1
    return position
print(mille_sauts())


def cent_mètres(n):
    C=0
    for i in range(n):
        if(mille_sauts()>100):
            C=C+1
        return C

Savez vous si il y'a moyen d'exprimer n dans le programme 1( le nombre expériences, une expérience étant 1000 sauts) car c'est nécessaire pour le second programme(ce programme m'était déjà donné mais pas le premier). Je vous remercie aussi d'avoir répondu à mes messages plus haut malgré mon comportement qui pouvait en effet être agaçant.
Bonne soirée.

Hors ligne

#7 09-12-2019 19:54:09

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 947

Re : Probabilités sur python

Re,

C'est bon, n'en parlons plus...

Savez vous si il y'a moyen d'exprimer n dans le programme 1( le nombre expériences, une expérience étant 1000 sauts) car c'est nécessaire pour le second programme(ce programme m'était déjà donné mais pas le premier)

Oui, bien sûr, mais quel intérêt ?
Je t'ai donné des simulations, donc j'avais testé...
Et je ne trouve rien d'anormal...

Reprenons..., il faut un écart de
Sur 1000 sauts avant/arrière aléatoirement déterminés (Pile/Face), sauts d'1 m, pour avoir avancer de 100 m, il faut un écart de 200 entre les sauts avant et les sauts arrières soit 600 / 400...
sauf que 1000 sauts équilibrent les + et les -...
Je viens de faire 10 tentatives de dix-mille sauts pour tester mille mètre
"F" : sauts avant  et  "P" ; sauts arrière
Nombre de "F" , nombre de "P" ,  Position
        4923       ,     5077          ,   -154
        5051       ,     4949          ,   +102
        4949       ,     5051          ,   -102
        4952       ,     5048          ,     -96
        5016       ,     4984          ,     +32
        4972       ,     5028          ,      -56
        4976       ,     5024          ,      +48
        5196       ,     4804           ,    +392
        4975       ,     5025           ,     -50

Jusqu'à preuve du contraire, on n'arrivera jamais à 1000..
Et même 100 m : sur 10 essais de 10000 sauts on a passé largement 100 m 1 fois, péniblement 1 fois, on avancé de - de 100 m, 2 fois...

Donc, je répète : pourquoi veux-tu passer n à ta fonction mille_sauts ?
Parce que tu penses que la fonction mille_sauts() n'est pas appelée n fois ?
Bien sûr que si, puisque la fonction n° 2 qu'on t'a donnée, appelle n fois mille_sauts() puisqu'elle exécute n fois le test :

if (mille_sauts() >100):

Parce que tu voudrais que dans mille_sauts() on exécute n fois 1000 sauts ? tu voudrais écrire ta boucle comme ça :
   

 for i in range(n*1000):

Oui, tu obtiendrais des résultats
Non, tu ne dois pas le faire, ce serait modifier l'énoncé qui dit :
Il faut créer un programme qui renvoie la position de la personne après avoir fait 1000 sauts.

Je n'ai rien à redire à ton programme n° 1...
A moins que l'énoncé que tu as donné ne soit pas conforme à l'original, à la virgule et au mot près ?

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#8 09-12-2019 20:24:05

florian52
Membre
Inscription : 08-12-2019
Messages : 6

Re : Probabilités sur python

Bonsoir,
Je vais te donner l'énoncé du 2e algorithme: en utilisant la fonction précédente, écrire le script d'une fonction qui simule n expérience de mille sauts et qui renvoie le nombre de fois où la personne a avancé de plus de 100m à la fin des milles sauts lors de ces n expériences. Il faut ensuite exécuter la fonction pour n=10 000. Comme on m'avait donné le 2e algo, n devait sûrement être définit dans le premier. Mais peut être qu'on peut aussi le définir dans le 2e, le problème c'est que je n'arrive pas à dire en python qu'il correspond au nombres d'expériences mille sauts. Je te remercie pour ton aide
A +

Hors ligne

#9 09-12-2019 21:36:04

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 947

Re : Probabilités sur python

Salut,

Dans ce cas je te propose :


             
from random import randint

def cent_metres(n):
    C=0
    for i in range (n):
        position=0
        for j in range(1000):
            if randint(1,2)==1:
                position+=1
            else:
                position-=1
        if position>100:
                C+=1
    return C

n=50
print("Nombre de déplacements supérieurs à 100 m :",cent_metres(n))

Explications
Je rentre dans la fonction cent_metres(n) en lui passant l'argument n dont je définis la valeur avant le print
Dans cette fonction j'initialise immédiatement C à 0.
Après deux boucles imbriquées :
la première :
for i in range(n):
dit qu'on va exécuter n fois ce qui va suivre
Là, à l'intérieur de cette boucle, j'initialise position à 0
puis 2e boucle :
    for j in range(1000):
     où l'on va effectuer les 1000 sauts

C'est le morceau de ta fonction 1000 sauts :

    position=0
    for j in range(1000):
        if randint(1,2)==1:
            position+=1
        else:
            position-=1

(position+=1 est une forme condensée de C=C+1)
Et après les 1000 tests on sort de la boucle sans avoir besoin d'un return, puisque avant de remonter exécuter un nouveau tour de boucle i, on teste immédiatement si position est supérieur à 100, si oui on ajoute 1 à C
que ce soit oui ou non on repart dans un nouveau de boucle i et on remet position à 0
Lorsque la boucle i aura exécuté n fois le bloc :

        position=0
        for j in range(1000):
            if randint(1,2)==1:
                position+=1
            else:
                position-=1
        if position>100:
                C+=1

on sort de la boucle i et on renvoie la valeur de C :     return C

Et le print permet d'afficher la valeur de C après n expériences de 1000 sauts...

Quand tu testeras 10000 fois (n=10000) la valeur de C après 1000 sauts, tu vas peut-être trouver le temps long, selon la vitesse de ta machine...
Mais il y a des résultats

Ton système à 2 fonctions marchait tout aussi bien...
Mais j'interprète le texte du sujet puisque j'en ai vu passer pas mal, et tous étaient dans esprit :
en utilisant la fonction précédente = en modifiant la fonction précédente...

Mais c'est affaire d'interprétation, on peut aussi lire :
en utilisant la fonction précédente = écrire une 2e fonction qui utilise la fonction précédente...

C'est clair ?

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#10 09-12-2019 23:01:54

freddy
Membre chevronné
Lieu : Paris
Inscription : 27-03-2009
Messages : 7 457

Re : Probabilités sur python

Salut,

j'ai tenté n=1.000 et, au bout d'un long temps :-), j'ai eu C=5.
Ce n'est pas vraiment surprenant, puisqu'aller à droite ou à gauche a une proba de 1/2 chacun, ne sont pas corrélés entre eux et en moyenne, le marcheur reste à l'origine en fait. Dans l'étude des processus stochastiques, on parle du modèle de la marche aléatoire de l'ivrogne !


De la considération des obstacles vient l’échec, des moyens, la réussite.

Hors ligne

#11 10-12-2019 19:26:30

florian52
Membre
Inscription : 08-12-2019
Messages : 6

Re : Probabilités sur python

Bonjour,
Oui super tout est clair, merci pour l'aide, le programme marche et j'ai compris pourquoi le programme 2 est égal à 0.
Bonne soirée

Hors ligne

#12 10-12-2019 19:41:23

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 947

Re : Probabilités sur python

Bonsoir,

Oui super tout est clair, merci pour l'aide, le programme marche et j'ai compris pourquoi le programme 2 est égal à 0.

Oulah, tu m'inquiètes, qu'est-ce que tu veux dire par programme 2 égal à 0
Pour moi, ça n'a pas de sens ni en français ni en informatique ?
freddy a testé n=1000, il a eu un résultat positif...

Moi, j'avais testé n=10000, 5 fois de suite et j'ai eu obtenu comme réponses :
Nombre de déplacements supérieurs à 100 m : 6
Nombre de déplacements supérieurs à 100 m : 11
Nombre de déplacements supérieurs à 100 m : 8
Nombre de déplacements supérieurs à 100 m : 3
Nombre de déplacements supérieurs à 100 m : 3


@+

[EDIT] C'est bon, je comprends...
Mais si tu essaies cette nouvelle version pour n=10, tu as 99% de chances d'obtenir 0 comme réponse...
Ton idée d'ajouter une 2e fonction était bonne et parfaitement fonctionnelle...

De plus, il faut bien te dire, que les tirs à pile ou face avec les logiciels de programmation ne sont pas complètement du hasard, pour une relativement faible quantité de tirages, c'est à peu près fiable, au delà pour de très grandes séries de tirages, le random de base n'est pas bon.
Mais, pour Python, il y a deux modules de calculs scientifiques installables après téléchargement, numpy+scipy qui te permettent d'avoir un random beaucoup plus performant.

Dernière modification par yoshi (10-12-2019 21:27:05)


Arx Tarpeia Capitoli proxima...

Hors ligne

#13 11-12-2019 17:14:33

florian52
Membre
Inscription : 08-12-2019
Messages : 6

Re : Probabilités sur python

Bonjour,
j'ai obtenu 0 sur mon premier test, mais après la plupart des résultats tournaient en effet autour de 5.
Désolé j'aurai dû tester le programme plusieurs fois avant d'envoyer le message.
En tout cas je m'excuse du dérangement,
Bonne journée.

Hors ligne

Pied de page des forums