¿Número aleatorio entre 0 y 1? [duplicate]

4 minutos de lectura

avatar de usuario
Talía

Quiero un número aleatorio entre 0 y 1, como 0,3452. solía random.randrange(0, 1) pero siempre es 0 para mí. ¿Qué tengo que hacer?

  • @gidim: esta es una pregunta más específica, por ejemplo, random.random() ([0,1)) is the answer to this question but not the question you’ve linked and therefore it is not a duplicate.

    – jfs

    Oct 27, 2015 at 4:28


  • randrange(a,b) returns INTEGERS between a (incl.) and b (excl.)

    – Julien

    Oct 27, 2015 at 6:26

  • import numpy as np np.random.random_sample((120))

    – BigData-Guru

    Aug 23, 2020 at 19:20

user avatar
jh314

You can use random.uniform

import random
random.uniform(0, 1)

  • This just does return a + (b-a) * self.random()

    – John La Rooy

    Oct 27, 2015 at 4:12

  • Ensure you have import random

    – Bruno Bieri

    Sep 5, 2017 at 11:58

  • To get always same numbers, ensure to set a seed first, just random.seed(123)

    – Rodrigo Laguna

    Feb 6, 2018 at 14:49

user avatar
John La Rooy

random.random() does exactly that

>>> import random
>>> for i in range(10):
...     print(random.random())
... 
0.908047338626
0.0199900075962
0.904058545833
0.321508119045
0.657086320195
0.714084413092
0.315924955063
0.696965958019
0.93824013683
0.484207425759

If you want really random numbers, and to cover the range [0, 1]:

>>> import os
>>> int.from_bytes(os.urandom(8), byteorder="big") / ((1 << 64) - 1)
0.7409674234050893

  • random.random valores devueltos entre [0,1) so then return would never be 1.

    – gidim

    Oct 27, 2015 at 4:03

  • @gidim: randrange(a, b) excludes b as well as anything *range() in Python. Python uses option a). OP shows randrange(), not randint() that includes both edges.

    – jfs

    Oct 27, 2015 at 4:29


  • Even if it would include, the probability to return 1 would be extremely low (as in practice there is a 64 digits precision of python’s float), so it wouldn’t change much.

    – szedjani

    Sep 30, 2019 at 9:34


user avatar
alsjflalasjf.dev

I want a random number between 0 and 1, like 0.3452

random.random() is what you are looking for:

From python docs:
random.random() Return the next random floating point number in the
range [0.0, 1.0).


And, btw, Why your try didn’t work?:

Your try was: random.randrange(0, 1)

From python docs:
random.randrange() Return a randomly selected element from range(start, stop, step). This is equivalent to choice(range(start, stop, step)), but doesn’t actually build a range object.

So, what you are doing here, with random.randrange(a,b) is choosing a random element from range(a,b); in your case, from range(0,1), but, guess what!: the only element in range(0,1), is 0, so, the only element you can choose from range(0,1), is 0; that’s why you were always getting 0 back.

you can use use numpy.random module, you can get array of random number in shape of your choice you want

>>> import numpy as np
>>> np.random.random(1)[0]
0.17425892129128229 >>> np.aleatorio.aleatorio((3,2)) matriz([[ 0.7978787 ,  0.9784473 ],
       [ 0.49214277,  0.06749958],
       [ 0.12944254,  0.80929816]]) >>> np.aleatorio.aleatorio((3,1)) matriz([[ 0.86725993],
       [ 0.36869585],
       [ 0.2601249 ]]) >>> np.aleatorio.aleatorio((4,1)) matriz([[ 0.87161403],
       [ 0.41976921],
       [ 0.35714702],
       [ 0.31166808]]) >>> np.aleatorio.muestra_aleatoria() 0.47108547995356098

random.randrange(0,2) ¡esto funciona!

  • Como referencia, el OP quería un valor flotante entre 0 y 1, pero esto devolverá una opción entre los números enteros 0 y 1.

    – JasTonAChair

    5 de noviembre de 2016 a las 3:38

  • ¿Cómo responde esto a la pregunta? Uno está buscando un número de punto flotante entre 0 y 1 (exclusivo).

    – Willem Van Onsem

    13 de enero de 2017 a las 12:43

RTM

De los documentos para Python random módulo:

Functions for integers:

random.randrange(stop)
random.randrange(start, stop[, step])

    Return a randomly selected element from range(start, stop, step).
    This is equivalent to choice(range(start, stop, step)), but doesn’t
    actually build a range object.

Eso explica por qué solo te da 0, ¿no es así? range(0,1) es [0]. Es elegir de una lista que consta solo de ese valor.

También de esos documentos:

random.random() Devuelve el siguiente número de punto flotante aleatorio en el rango [0.0, 1.0).

But if your inclusion of the numpy tag is intentional, you can generate many random floats in that range with one call using a np.random function.

  • For reference, the OP wanted a float between 0 and 1 but this will return a choice between integers 0 and 1.

    – JasTonAChair

    Nov 5, 2016 at 3:38

  • How does this answers the question? One is looking for a floating point number between 0 and 1 (exclusive).

    – Willem Van Onsem

    Jan 13, 2017 at 12:43

user avatar
M T Head

My variation that I find to be more flexible.

str_Key           = ""
str_FullKey       = "" 
str_CharacterPool = "01234ABCDEFfghij~-)"
for int_I in range(64): 
    str_Key = random.choice(str_CharacterPool) 
    str_FullKey = str_FullKey + str_Key 

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad