Random : faire favoriser des chiffres

Résolu/Fermé
ghFrankfurt Messages postés 207 Date d'inscription mardi 16 novembre 2010 Statut Membre Dernière intervention 10 décembre 2014 - 16 août 2013 à 14:54
ghFrankfurt Messages postés 207 Date d'inscription mardi 16 novembre 2010 Statut Membre Dernière intervention 10 décembre 2014 - 18 août 2013 à 21:22
Bonjour,

Je cherche un moyen optimal de faire favoriser des chiffres sur un random en python 2.7.5

Par exemple j'ai besoin de 10 chiffres aléatoire entre (0, 15)
mais les chiffres entre 0 et 5 devraient ressortir plus souvent que 6 à 10 et ceux ci plus souvent que 11 à 15.

J'imagine deux possibilités :
la première c'est de faire un random entre 0 et 150 et tout ce qui est en dessous de 100, je convertis à une valeur entre 0 et 5, idem entre 100 et 140 et encore une fois de 140 à 150 pour les dernières valeurs.

L'autre possibilité que j'imagine, mais probablement moins performante, est de faire une liste en répétant les valeurs

valeurs = [0,0,0,0,0,0,0,0,0,0,
1,1,1,1,1,1,1,1,1,
2,2,2,2,2,2,2,2,2,2,
......
6,6,6,6,
7,7,7,7,
....
11,11,
12,12
....15]

return choice(valeurs)

Selon vous, quelle serait le meilleur moyen d'arriver à mes fins?

Merci !

A voir également:

2 réponses

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
16 août 2013 à 19:19
Je ne connais pas Python, mais on peut parler un peu théoriquement...

Quelle probabilité voudrais-tu pour chacun de tes nombres ? Parce que "plus souvent que" c'est un peu vague...

Genre : {0,1,2,3,4,5}=6.9% {6,7,8,9,10}=5.9%, {11,12,13,14,15}=4.9%
(ce qui fait presque 100%...)

Ou genre : {0,1,2,3,4,5}=10% {6,7,8,9,10}=6%, {11,12,13,14,15}=2%
(qui fait presque 100% aussi)

Bref, précises un peu plus ce que tu veux, parce que la méthode à adopter risque de dépendre du résultat que tu attends.
1
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
16 août 2013 à 19:44
Pour faire le plus générique possible? Je dirais que si tu as :

{0,1,2,3,4,5}=A% {6,7,8,9,10}=B%, {11,12,13,14,15}=C%
Avec bien sûr A+B+C=100

Alors tu peux tirer un nombre aléatoire entre 1 et 100, :
Si tu es inférieur à A, tu tires aléatoirement un nombre entre {0,1,2,3,4,5}.
Si tu es entre A et A+B, tu tires aléatoirement un nombre entre {6,7,8,9,10}.
Si tu es entre A+B et A+B+C=100, tu tires aléatoirement un nombre entre {11,12,13,14,15}
0
ghFrankfurt Messages postés 207 Date d'inscription mardi 16 novembre 2010 Statut Membre Dernière intervention 10 décembre 2014 23
18 août 2013 à 21:22
Salut,
J'avoue que je n'ai pas tout à fait saisi ton explication.
En tout cas, j'y ai compris ceci :

def random_tile():

    tile = randint(1,100)
    if tile < 60:
        return randint(0, len(ID_TILES_FLOWERS))
    elif tile < 90:
        return randint(0, len(ID_TILES_DECOS))
    else:
        return randint(0, len(ID_TILES_TREES))


Et ça me semble pas trop mal. Donc je te remercie :D
0