Programme pile ou face [Résolu]

Signaler
Messages postés
2
Date d'inscription
dimanche 30 mai 2021
Statut
Membre
Dernière intervention
30 mai 2021
-
Messages postés
2
Date d'inscription
dimanche 30 mai 2021
Statut
Membre
Dernière intervention
30 mai 2021
-
Bonjour,
J'aimerais faire un programme qui me permettrait de lancer 100 fois une pièce et que si la fréquence de pile ou de face est égale à 0.8 alors le programme s'arrête sinon il continue. J'aimerais aussi avoir le nombre de tentatives indiqué.
Merci beaucoup pour votre aide
Voici le bout de code que j'ai déjà fait :
from math import*
from random import*

def pile_face(a):
    nb_pile = 0
    nb_face = 0



while True:
    for i in range(a):
       piece = randint(0,1)
        if piece == 1:
            nb_pile = nb_pile + 1
        else:
            nb_face = nb_face + 1
        if nb_face/a == 0.8:
            break
    print(pile_face(100))

4 réponses

Messages postés
32150
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
14 juin 2021
7 740
Bonjour,

Pourquoi initialiser les compteurs dans une fonction ? Car il faut se rappeler qu'une variable définie dans une fonction ne sera pas visible en dehors. Suggestion de lecture, la portée des variables : https://www.pierre-giraud.com/python-apprendre-programmer-cours/portee-variable/

Ton code n'a pas de logique, il ne peut aboutir.

Pourquoi un while et un for, c'est ceinture et bretelles, un de trop.

Après tester strictement = à 0.8 sera difficile à atteindre. Un >= serait plus approprié. Et 80% peut être un objectif ambitieux. Mais attention si on démarre sur un face, cela s'arrête tout de suite : 100% de face sur 1 tirage ;-) L'énoncé est peut être à revoir.

A étudier :
from random import*

nb_pile = 0
nb_face = 0
max=int(input("Tentatives max : "))

for i in range(max):
    piece = randint(0,1) 
    if piece == 1:
        nb_pile = nb_pile + 1
    else:
        nb_face = nb_face + 1
    if nb_face/(i+1) >= 0.6:
        print("Interruption en route !")
        break

print("Tentatives",i+1,"- Pile",nb_pile,"- Face",nb_face)


Oui d'accord merci beaucoup je vais tester ça et pourquoi 0.8 car c'était le défi de tomber dessus.
Messages postés
32150
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
14 juin 2021
7 740
On peut aussi réarranger ton code, en mettant tout dans la fonction, et en sachant que pour qu'une fonction lancée par un print renvoie quelque chose, il faut un return avec des valeurs en fin.

from random import*

def pile_face(a):
    nb_pile = 0
    nb_face = 0
    for i in range(a):
       piece = randint(0,1)
       if piece == 1:
           nb_pile = nb_pile + 1
       else:
           nb_face = nb_face + 1
       if nb_face/a == 0.8:
           break
    return i+1,nb_pile,nb_face

print(pile_face(100)) 

Messages postés
32150
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
14 juin 2021
7 740
il reste qu'obtenir 80 face (avant la fin) sur 100 tirages max, c'est quasi impossible. Cela ferait de la fonction random un mauvais hasard

A essayer
from random import*

def pile_face(a):
    nb_pile = 0
    nb_face = 0
    for i in range(a):
       piece = randint(0,1)
       if piece == 1:
           nb_pile = nb_pile + 1
       else:
           nb_face = nb_face + 1
       if nb_face/a == 0.8:
           exit()
    return i+1,nb_pile,nb_face

while True:
    print(pile_face(100))
Messages postés
2
Date d'inscription
dimanche 30 mai 2021
Statut
Membre
Dernière intervention
30 mai 2021

oui d'accord merci beaucoup