Apenas uma observação, esses são números pseudo-aleatórios e não são criptograficamente seguros. Não use isso em nenhum caso em que você não queira que um invasor adivinhe seus números. Use o secretsmódulo para obter melhores números aleatórios. Referência: docs.python.org/3/library/random.html
466
import randomprint(random.randint(0,9))
random.randint(a, b)
Retorne um número inteiro aleatório N tal que a <= N <= b.
Nas versões mais recentes do Python, o limite superior parece exclusivo (ou seja randint(0,9), nunca retornará 9). Isso não se reflete na documentação online, mas está na ajuda interna.
Yly
134
Tente o seguinte:
from random import randrange, uniform# randrange gives you an integral value
irand = randrange(0,10)# uniform gives you a floating-point value
frand = uniform(0,10)
Isso melhoraria a resposta e deveria ser adicionado. As respostas mais voltadas para a segurança sempre devem ser adicionadas, se disponíveis.
SudoKid 07/02
31
Escolha o tamanho da matriz (neste exemplo, eu escolhi o tamanho para 20). E então, use o seguinte:
import numpy as np
np.random.randint(10, size=(1,20))
Você pode esperar ver uma saída do seguinte formato ( números inteiros aleatórios diferentes serão retornados toda vez que você a executar; portanto, você pode esperar que os números inteiros na matriz de saída sejam diferentes do exemplo dado abaixo ).
Também é útil saber como o Numpy pode gerar uma matriz aleatória de tamanho especificado, não apenas um único número aleatório. (Docs: numpy.random.randint )
jkdev 25/06
28
Tente isso através random.shuffle
>>>import random
>>> nums = range(10)>>> random.shuffle(nums)>>> nums
[6,3,5,4,0,1,2,9,8,7]
No caso de números contínuos randintou randrangeprovavelmente as melhores opções, mas se você tiver vários valores distintos em uma sequência (ou seja, a list), também poderá usar choice:
>>>import random
>>> values = list(range(10))>>> random.choice(values)5
choice também funciona para um item de uma amostra não contínua:
Se eles devem ser sem substituição: random.sample. Com a substituição, você pode usar uma compreensão com choice: por exemplo, uma lista contendo 3 valores aleatórios com substituição:[choice(values) for _ in range(3)]
MSeifert 3/17/17
18
Enquanto muitas postagens demonstram como obter um número inteiro aleatório, a pergunta original pergunta como gerar um número inteiro aleatório s (plural):
Como posso gerar números inteiros aleatórios entre 0 e 9 (inclusive) em Python?
Para maior clareza, aqui demonstramos como obter vários números aleatórios.
Dado
>>>import random
lo =0
hi =10
size =5
Código
Múltiplos Inteiros Aleatórios
# A>>>[lo + int(random.random()*(hi - lo))for _ in range(size)][5,6,1,3,0]
# B>>>[random.randint(lo, hi)for _ in range(size)][9,7,0,7,3]
# C>>>[random.randrange(lo, hi)for _ in range(size)][8,3,6,8,7]
# D>>> lst = list(range(lo, hi))>>> random.shuffle(lst)>>>[lst[i]for i in range(size)][6,8,2,5,1]
# E>>>[random.choice(range(lo, hi))for _ in range(size)][2,1,6,9,5]
1 Ou seja, John Lawrence Aspden, @ST Mohammed, @SiddTheKid, @ user14372, @zangw, et al. 2 @prashanth menciona este módulo mostrando um número inteiro. 3 Demonstrado por @Siddharth Satpathy
Sim. Obrigado pelo link. Mas pretendia dizer que você poderia melhorar sua resposta fornecendo detalhes antes de apenas citar duas linhas de código; como por que motivo alguém prefere usá-lo em vez de algo já incorporado. Não que você seja obrigado, de qualquer maneira.
Simón
9
>>>import random
>>> random.randrange(10)3>>> random.randrange(10)1
Para obter uma lista de dez amostras:
>>>[random.randrange(10)for x in range(10)][9,0,4,0,5,7,4,3,6,8]
Aviso: Os geradores pseudo-aleatórios deste módulo não devem ser usados para fins de segurança. Use os.urandom () ou SystemRandom se precisar de um gerador de números pseudo-aleatórios criptograficamente seguro.
random.SystemRandom , que foi introduzido no Python 2.4, é considerado criptograficamente seguro . Ele ainda está disponível no Python 3.7.1, que é atual no momento da escrita.
Em vez de string.digits, rangepoderia ser usado por algumas das outras respostas, talvez junto com uma compreensão. Misture e combine de acordo com suas necessidades.
O OpenTURNS permite não apenas simular números inteiros aleatórios, mas também definir a distribuição associada à UserDefinedclasse definida.
A seguir, são simulados 12 resultados da distribuição.
import openturns as ot
points =[[i]for i in range(10)]
distribution = ot.UserDefined(points)# By default, with equal weights.for i in range(12):
x = distribution.getRealization()print(i,x)
Basta adicionar caracteres como 'ABCD' e 'abcd' ou '^! ~ = -> <' para alterar o conjunto de caracteres para retirar, altere o intervalo para alterar o número de caracteres gerados.
Respostas:
Tentar:
Mais informações: http://docs.python.org/library/random.html#random.randrange
fonte
secrets
módulo para obter melhores números aleatórios. Referência: docs.python.org/3/library/random.htmlRetorne um número inteiro aleatório N tal que a <= N <= b.
Documentos: https://docs.python.org/3.1/library/random.html#random.randint
fonte
randint(0,9)
, nunca retornará 9). Isso não se reflete na documentação online, mas está na ajuda interna.Tente o seguinte:
fonte
Isso gera 10 números inteiros pseudo-aleatórios no intervalo de 0 a 9, inclusive.
fonte
O
secrets
módulo é novo no Python 3.6. Isso é melhor que orandom
módulo para criptografia ou segurança.Para imprimir aleatoriamente um número inteiro no intervalo inclusivo de 0 a 9:
Para detalhes, consulte PEP 506 .
fonte
Escolha o tamanho da matriz (neste exemplo, eu escolhi o tamanho para 20). E então, use o seguinte:
Você pode esperar ver uma saída do seguinte formato ( números inteiros aleatórios diferentes serão retornados toda vez que você a executar; portanto, você pode esperar que os números inteiros na matriz de saída sejam diferentes do exemplo dado abaixo ).
fonte
Tente isso através
random.shuffle
fonte
Eu tentaria um dos seguintes:
1.> numpy.random.randint
2.> numpy.random.uniform
3.> random.randrange
4.> random.randint
Rapidez:
► np.random.randint é o mais rápido , seguido por np.random.uniform e random.randrange . random.randint é o mais lento .
► O np.random.randint e o np.random.uniform são muito mais rápidos (~ 8 a 12 vezes mais rápidos) do que random.randrange e random.randint .
Notas:
fonte
%timeit
funciona no seu ambiente?No caso de números contínuos
randint
ourandrange
provavelmente as melhores opções, mas se você tiver vários valores distintos em uma sequência (ou seja, alist
), também poderá usarchoice
:choice
também funciona para um item de uma amostra não contínua:Se você precisar "criptograficamente forte", também existe um
secrets.choice
no python 3.6 e mais recente:fonte
random.sample
. Com a substituição, você pode usar uma compreensão comchoice
: por exemplo, uma lista contendo 3 valores aleatórios com substituição:[choice(values) for _ in range(3)]
Enquanto muitas postagens demonstram como obter um número inteiro aleatório, a pergunta original pergunta como gerar um número inteiro aleatório s (plural):
Para maior clareza, aqui demonstramos como obter vários números aleatórios.
Dado
Código
Múltiplos Inteiros Aleatórios
Amostra de Inteiros Aleatórios
Detalhes
Algumas postagens demonstram como gerar nativamente vários números aleatórios. 1 Aqui estão algumas opções que abordam a questão implícita:
random.random
retorna um flutuador aleatório no intervalo[0.0, 1.0)
random.randint
retorna um número inteiro aleatórioN
tal quea <= N <= b
random.randrange
alias pararandint(a, b+1)
random.shuffle
embaralha uma sequência no lugarrandom.choice
retorna um elemento aleatório da sequência não vaziarandom.choices
retornak
seleções de uma população (com substituição, Python 3.6+)random.sample
retornak
seleções únicas de uma população (sem substituição): 2Veja também a palestra de R. Hettinger sobre Chunking e Aliasing usando exemplos do
random
módulo.Aqui está uma comparação de algumas funções aleatórias na Biblioteca Padrão e Numpy:
Você também pode converter rapidamente uma das muitas distribuições no Numpy em uma amostra de números inteiros aleatórios. 3
Exemplos
1 Ou seja, John Lawrence Aspden, @ST Mohammed, @SiddTheKid, @ user14372, @zangw, et al. 2 @prashanth menciona este módulo mostrando um número inteiro. 3 Demonstrado por @Siddharth Satpathy
fonte
se você deseja usar numpy, use o seguinte:
fonte
Para obter uma lista de dez amostras:
fonte
Gerando números inteiros aleatórios entre 0 e 9.
Resultado:
fonte
random.sample
é outro que pode ser usadofonte
A melhor maneira é usar a função Aleatória de importação
ou sem nenhuma importação de biblioteca:
aqui o popitems remove e retorna um valor arbitrário do dicionário
n
.fonte
Essa é mais uma abordagem matemática, mas funciona 100% do tempo:
Digamos que você queira usar a
random.random()
função para gerar um número entrea
eb
. Para conseguir isso, basta fazer o seguinte:num = (b-a)*random.random() + a;
Claro, você pode gerar mais números.
fonte
Na página de documentação do módulo aleatório :
random.SystemRandom , que foi introduzido no Python 2.4, é considerado criptograficamente seguro . Ele ainda está disponível no Python 3.7.1, que é atual no momento da escrita.
Em vez de
string.digits
,range
poderia ser usado por algumas das outras respostas, talvez junto com uma compreensão. Misture e combine de acordo com suas necessidades.fonte
O OpenTURNS permite não apenas simular números inteiros aleatórios, mas também definir a distribuição associada à
UserDefined
classe definida.A seguir, são simulados 12 resultados da distribuição.
Isso imprime:
Os colchetes estão lá porque
x
existePoint
em uma dimensão. Seria mais fácil gerar os 12 resultados em uma única chamada paragetSample
:produziria:
Mais detalhes sobre este tópico estão aqui: http://openturns.github.io/openturns/master/user_manual/_generated/openturns.UserDefined.html
fonte
Eu tive melhor sorte com isso para Python 3.6
Basta adicionar caracteres como 'ABCD' e 'abcd' ou '^! ~ = -> <' para alterar o conjunto de caracteres para retirar, altere o intervalo para alterar o número de caracteres gerados.
fonte