#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Wed Sep 30 08:45:21 2026

@author: vincentleprince
"""
import numpy as np
import numpy.random as rd



def tirageBer(p):
    a = rd.random()
    if a < p :
        res = ...
    else :
        ...
    return res

#test
print(tirageBer(0.4))

def tirageBer2(p):
    res = np.floor(rd.random()+p)
    return res 


"""Loi géométrique"""

p=1/3
tir = tirageBer(p) # premier tirage
N=1  # nombre de tirages effectués
while tir ........
    N = ............
    tir = ...  # valeur du N-ème tirage
 
print(N)

#variante : 
p=1/3
N=1  # nombre de tirages effectués
while rd.random()>p :
    N = N+1
 
print(N)

# fonction :
def tirageGeom(p):
    ...
    
# estimation de l'espérance
p = 1/3
S=0
for i in range(1000):
    Ni = ......   # valeur de la  v.a. simulée au i-ème tirage 
    S = S + ...........
 
moy = ...
print(  moy )


"""loi binomiale"""

def tirageBinom(n,p):
    NP=0
    for i ...
        tir = tirageBer(p)
        NP =  ..............
 
    return NP

# estimation de l'espérance : 
    
...


"""Exercice 1"""
def pileFace(p):
    tir_prec = tirageBer(p) # (n-1)-ème tirage 
    tir= tirageBer(p) # n-ème tirage 
    n=2 # nombre de tirages effectués
    while not(tir_prec == ...  and  ...  )
        n = ...
        tir_prec = ...
        tir = ...
    return ...

# estimation de l'espérance : 
...
    
    
"""Exercice 2"""    

def simulX() :
    nb = 2 # nombre de boules noires dans l'urne
    a1 = rd.random() # premier tirage
    if a1 < ...   : # tirage d'une boule noire
        nb = ...
        a2 = rd.random() # deuxième tirage
        if a2 < ...  :
            nb = ...
    else : # cas où le premier tirage a donné une boule blanche
        a2 = rd.random()
        if a2 < ...  : 
            nb = ...
    X = 
    return X

#exemple de diagramme en bâtons : 
import matplotlib.pyplot as plt
X=[x for x in range(5)]
Y=[1,2,1,2,1]
plt.bar(X,Y,width=0.1,color='b')   

#représentation de la loi empirique : 
N = 1000 # nombre de simulations
liste_valeursX = [0,1,2]
liste_occ  = [0,0,0] #liste_occ[k] doit contenir le nombre 
               #de fois que k apparaît lors des simulations
for i in range(N):
    Xi = ......   # valeur de la  v.a. simulée au i-ème tirage 
    liste_occ[Xi] = ...
 
liste_freq = [a/N for a in liste_occ]
plt.bar(liste_valeursX,liste_freq,width=0.1,color='b')
    
    
    