Et quelle est l'erreur que tu reçois? D'abord, choice s'attend à recevoir un itérable comme argument. Ensuite Python s'attend à ce que tu donnes des arguments à tes fonctions. Je pense qu'il pense les trouver sur la ligne du print. random.choice( (partie1, partie2) ) ()
choice choisit un objet de type "function" mais n'exécute pas la fonction.
- Edité par PierrotLeFou 16 janvier 2023 à 19:15:45
Le Tout est souvent plus grand que la somme de ses parties.
ton code est un peu l'équivalent à ci-dessous si je me trompe,
import random
mise = 999
def head_or_tail(my_list, values): return random.choices(my_list, values, k=1)[0]
def get_values():
parts = {
"parts_1": (0.49, 0.51),
"parts_2": random.choice([(0.09, 0.91), (0.74, 0.26)])
}
return parts[random.choice(list(parts.keys()))]
for _ in range(1, 1000000):
if head_or_tail(["pile", "face"], get_values()) == "pile":
mise += 1
else:
mise -= 1
print(mise)
- Edité par fred1599 16 janvier 2023 à 19:55:55
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard) La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
import random
Mise = 999
Liste_choix = ["pile","face"]
Jeux_A = 0
Jeux_B = 0
def partie1():
global Mise
Jeux = random.choices (Liste_choix, weights=(0.49,0.51),k=1)
if Jeux == ["pile"] :
Mise += 1
else :
Mise -= 1
def partie2() :
global Mise
if Mise%3==0 :
Jeux_A = random.choices (Liste_choix, weights=(0.09,0.91),k=1)
if Jeux_A == ["pile"] :
Mise += 1
else :
Mise -= 1
else :
Jeux_B = random.choices (Liste_choix, weights=(0.74,0.26),k=1)
if Jeux_B == ["pile"] :
Mise += 1
else :
Mise -= 1
for i in range (1,1000000) :
random.choice((partie1,partie2))()
print(Mise)
Sinon un peu plus pro et PEP friendly :
import random
mise = 999
liste_choix = ["pile","face"]
def partie(rd, mise) :
if rd == 1:
weights = (0.49, 0.51)
else:
if mise%3!=0 :
weights = (0.74, 0.26)
else :
weights = (0.09, 0.91)
side = random.choices(liste_choix, weights=weights, k=1)[0]
if side == "pile" :
return mise+1
else :
return mise-1
for i in range(1, 1000000) :
mise = partie(random.randint(1, 2), mise)
print(mise)
Merci Fred, un peu compliqué pour le débutant que je suis pour l'instant :-) merci je vais étudier ça
ErispoeLeNarvalo a écrit:
Salut !
Une manière de faire :
import random
Mise = 999
Liste_choix = ["pile","face"]
Jeux_A = 0
Jeux_B = 0
def partie1():
global Mise
Jeux = random.choices (Liste_choix, weights=(0.49,0.51),k=1)
if Jeux == ["pile"] :
Mise += 1
else :
Mise -= 1
def partie2() :
global Mise
if Mise%3==0 :
Jeux_A = random.choices (Liste_choix, weights=(0.09,0.91),k=1)
if Jeux_A == ["pile"] :
Mise += 1
else :
Mise -= 1
else :
Jeux_B = random.choices (Liste_choix, weights=(0.74,0.26),k=1)
if Jeux_B == ["pile"] :
Mise += 1
else :
Mise -= 1
for i in range (1,1000000) :
random.choice((partie1,partie2))()
print(Mise)
Sinon un peu plus pro et PEP friendly :
import random
mise = 999
liste_choix = ["pile","face"]
def partie(rd, mise) :
if rd == 1:
weights = (0.49, 0.51)
else:
if mise%3!=0 :
weights = (0.74, 0.26)
else :
weights = (0.09, 0.91)
side = random.choices(liste_choix, weights=weights, k=1)[0]
if side == "pile" :
return mise+1
else :
return mise-1
for i in range(1, 1000000) :
mise = partie(random.randint(1, 2), mise)
print(mise)
Et oui il ne faut pas oublier la portée des variables !!!
Choix aléatoire entre plusieurs fonctions ?
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Le Tout est souvent plus grand que la somme de ses parties.
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)