2017-07-22 3 views
0

Je veux générer une liste de 10 nombres décimaux aléatoires entre 0.101 et 0.909. À l'heure actuelle cela semble fonctionner pour deux décimales:générateur de nombre aléatoire décimal

for i in range(10): 
     print (random.randint(75,95)/100) 

Avec une sortie comme suit:

0.93 
0.8 
0.85 
0.89 
0.89 
0.78 
0.79 
0.91 
0.82 
0.86 

Je voudrais que cela ait 3 décimales pas 2 et je dois ensuite sélectionner l'un des les valeurs et le mettre dans une variable.

+0

En utilisant randint (750,950)/1000? –

Répondre

1

La meilleure façon que je sais faire est comme ceci:

for i in range(10): 
    print (random.random() * (0.909 - 0.101) + 0.101) 

Comment ça marche? La formule générale pour générer un nombre aléatoire 0-B est la suivante:

random.random() * B 

Parce que random.random() génère un nombre dans la gamme [0,1), de sorte que la multiplication par B numéros de rendement entre [0,B). Maintenant, si vous ne voulez pas commencer la gamme résultante à 0 mais A, vous ne pouvez essayer d'écrire:

random.random() * B + A 

Mais qui donne un nombre entre [A,A+B) qui n'est pas ce que vous voulez, c'est la raison pour laquelle nous la soustraction trop:

random.random() * (B - A) + A 

Aller étape par étape:

random.random()    -> [0,1) 
random.random() * (B - A)  -> [0,B-A) 
random.random() * (B - A) + A -> [A,B) 

Dans votre cas, A = 0.101 et B=0.909. Notez que, comme la plage est ouverte à droite, vous n'obtiendrez jamais exactement 0.909 mais vous pouvez obtenir 0.90899999 ou toute autre chose qui est très proche. Enfin, à propos du nombre de décimales, consultez la documentation de la fonction print sur la façon d'imprimer des nombres jusqu'à une certaine position décimale (ceci est différent selon votre version de Python). Par exemple cela pourrait être comme ceci dans Python3:

print('{0:0.3f}'.format(my_var)) 
+0

merci va essayer si je veux une variable dire myvar = float (random.random() * (0.909 - 0.101) + 0.101) pour être l'un de la liste? –

+0

Salut juste essayé myrand = int (random.random() * (12-8) +12) et il renvoie des valeurs seulement au-dessus de 12 il me semble comme toute valeur au-dessus de 12-8 = 4 + 12 j'ai un 17? ?? aussi j'ai essayé un random.random() simple et il ne renvoie que 0 Je pensais que les valeurs par défaut étaient entre 0-10 ?? –

+0

Désolé, je ne comprends pas ce que vous vouliez dire, mais 'int (random.random() * (12-8) +12)' n'est pas la formule que j'ai écrite, il devrait être '+ 8' à la fin, pas '+ 12'. A propos de la valeur de retour fo 'random.random()', si vous n'obtenez que le nombre '0' parce que vous le convertissez en' int', ne faites pas le cast si vous voulez voir juste ce que retourne cette fonction . – MondKin