Random : faire favoriser des chiffres

Résolu
ghFrankfurt Messages postés 227 Statut Membre -  
ghFrankfurt Messages postés 227 Statut Membre -
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 !

2 réponses

  1. KX Messages postés 19031 Statut Modérateur 3 020
     
    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
    1. KX Messages postés 19031 Statut Modérateur 3 020
       
      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
  2. ghFrankfurt Messages postés 227 Statut Membre 23
     
    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