Hoe kan ik willekeurige gehele getallen tussen 0 en 9 (inclusief) genereren in Python?
Bijvoorbeeld 0
, 1
, 2
, 3
, 4
, 5
, 6
, 7
, 8
, 9
Antwoord 1, autoriteit 100%
Probeer:
from random import randrange
print(randrange(10))
Documenten:https://docs .python.org/3/library/random.html#random.randrange
Antwoord 2, autoriteit 26%
import random
print(random.randint(0,9))
random.randint(a, b)
Retourneer een willekeurig geheel getal N zodat a <= N <= b.
Documenten: https://docs.python.org/3.1/ library/random.html#random.randint
Antwoord 3, autoriteit 7%
Probeer dit:
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)
Antwoord 4, autoriteit 4%
from random import randint
x = [randint(0, 9) for p in range(0, 10)]
Dit genereert 10 pseudo-willekeurige gehele getallen in het bereik van 0 tot en met 9.
Antwoord 5, autoriteit 3%
De secrets
-module is nieuw in Python 3.6 . Dit is beter dan de random
module voor cryptografie of beveiliging gebruikt.
Om willekeurig een geheel getal in het inclusieve bereik 0-9 af te drukken:
from secrets import randbelow
print(randbelow(10))
Voor details, zie PEP 506.
Antwoord 6, autoriteit 2%
Ik zou een van de volgende dingen proberen:
import numpy as np
X1 = np.random.randint(low=0, high=10, size=(15,))
print (X1)
>>> array([3, 0, 9, 0, 5, 7, 6, 9, 6, 7, 9, 6, 6, 9, 8])
import numpy as np
X2 = np.random.uniform(low=0, high=10, size=(15,)).astype(int)
print (X2)
>>> array([8, 3, 6, 9, 1, 0, 3, 6, 3, 3, 1, 2, 4, 0, 4])
import numpy as np
X3 = np.random.choice(a=10, size=15 )
print (X3)
>>> array([1, 4, 0, 2, 5, 2, 7, 5, 0, 0, 8, 4, 4, 0, 9])
from random import randrange
X4 = [randrange(10) for i in range(15)]
print (X4)
>>> [2, 1, 4, 1, 2, 8, 8, 6, 4, 1, 0, 5, 8, 3, 5]
from random import randint
X5 = [randint(0, 9) for i in range(0, 15)]
print (X5)
>>> [6, 2, 6, 9, 5, 3, 2, 3, 3, 4, 4, 7, 4, 9, 6]
Snelheid:
>np.random.uniform en np.random.randintzijn veel sneller(~10 keer sneller) dan np.random.choice, willekeurig. randrange, random.randint.
%timeit np.random.randint(low=0, high=10, size=(15,))
>> 1.64 µs ± 7.83 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
%timeit np.random.uniform(low=0, high=10, size=(15,)).astype(int)
>> 2.15 µs ± 38.6 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
%timeit np.random.choice(a=10, size=15 )
>> 21 µs ± 629 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
%timeit [randrange(10) for i in range(15)]
>> 12.9 µs ± 60.4 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
%timeit [randint(0, 9) for i in range(0, 15)]
>> 20 µs ± 386 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
Opmerkingen:
1.> np.random.randintgenereert willekeurige gehele getallen over het halfopen interval [laag, hoog).
2.> np.random.uniformgenereert uniform verdeelde nummers over het halfopen interval [laag, hoog).
3.> np.random.choicegenereert een willekeurige steekproef over het halfopen interval [laag, hoog) alsof het argument
a
np.arange(n) is.4.> random.randrange(stop)genereert een willekeurig getal uit range( start, stop, stap).
5.> random.randint(a, b)retourneert een willekeurig geheel getal N zodat een < ;= N <= b.
6.> astype(int)-casts de numpy-array naar het gegevenstype int.
7.> Ik heb maat = (15,) gekozen. Dit geeft je een numpy array van lengte = 15.
Antwoord 7
Kies de grootte van de array (in dit voorbeeld heb ik de grootte 20 gekozen). En gebruik dan het volgende:
import numpy as np
np.random.randint(10, size=(1, 20))
U kunt een uitvoer van de volgende vorm verwachten (elke keer dat u het uitvoert, worden verschillende willekeurige gehele getallen geretourneerd; daarom kunt u verwachten dat de gehele getallen in de uitvoerarray verschillen van het onderstaande voorbeeld).
array([[1, 6, 1, 2, 8, 6, 3, 3, 2, 5, 6, 5, 0, 9, 5, 6, 4, 5, 9, 3]])
Antwoord 8
Hoewel veel berichten laten zien hoe je éénwillekeurig geheel getal kunt krijgen, vraagt de oorspronkelijke vraag hoe je een willekeurig geheel getals(meervoud) kunt genereren:
Hoe kan ik willekeurige gehele getallen tussen 0 en 9 (inclusief) genereren in Python?
Voor de duidelijkheid laten we hier zien hoe u meerdere willekeurige gehele getallen kunt krijgen.
Gegeven
>>> import random
lo = 0
hi = 10
size = 5
Code
Meerdere, willekeurige gehele getallen
# 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]
Voorbeeld van willekeurige gehele getallen
# F
>>> random.choices(range(lo, hi), k=size)
[3, 2, 0, 8, 2]
# G
>>> random.sample(range(lo, hi), k=size)
[4, 5, 1, 2, 3]
Details
Sommige berichten laten zien hoe je native meerderewillekeurige gehele getallen kunt genereren.1Hier zijn enkele opties die de geïmpliceerde vraag beantwoorden:
- A:
random.random
retourneert een willekeurige float in het bereik[0.0, 1.0)
- B:
random.randint
retourneert een willekeurig geheel getaln
zodata <= N <= b
- C:
random.randrange
alias naarrandint(a, b+1)
- D:
random.shuffle
schudt een reeks op zijn plaats - E:
random.choice
retourneert een willekeurig element uit de niet-lege reeks - F:
random.choices
retourneertk
selecties uit een populatie (met vervanging, Python 3.6+) - G:
random.sample
geeftk
unieke selecties uit een populatie (zonder vervanging):2
Zie ook R. Hettinger’s talkover Chunking en Aliasing met voorbeelden uit de random
-module.
Hier is een vergelijking van enkele willekeurige functies in de Standaardbibliotheek en Numpy:
| | random | numpy.random |
|- | ----------------------- | ----------------------------------|
|A| random() | random() |
|B| randint(low, high) | randint(low, high) |
|C| randrange(low, high) | randint(low, high) |
|D| shuffle(seq) | shuffle(seq) |
|E| choice(seq) | choice(seq) |
|F| choices(seq, k) | choice(seq, size) |
|G| sample(seq, k) | choice(seq, size, replace=False) |
Je kunt ook snel een van de vele converteren distributiesin Numpy naar een steekproef van willekeurige gehele getallen.3
Voorbeelden
>>> np.random.normal(loc=5, scale=10, size=size).astype(int)
array([17, 10, 3, 1, 16])
>>> np.random.poisson(lam=1, size=size).astype(int)
array([1, 3, 0, 2, 0])
>>> np.random.lognormal(mean=0.0, sigma=1.0, size=size).astype(int)
array([1, 3, 1, 5, 1])
1Namelijk @John Lawrence Aspden, @ST Mohammed, @SiddTheKid, @user14372, @zangw, et al.
2@prashanth vermeldt deze module met één geheel getal.
3Gedemonstreerd door @Siddharth Satpathy
Antwoord 9
Probeer dit via random.shuffle
>>> import random
>>> nums = range(10)
>>> random.shuffle(nums)
>>> nums
[6, 3, 5, 4, 0, 1, 2, 9, 8, 7]
Antwoord 10
In het geval van doorlopende nummers randint
of randrange
zijn waarschijnlijk de beste keuzes maar als je meerdere afzonderlijke waarden in een reeks hebt (dwz een list
), kun je ook choice
:
>>> import random
>>> values = list(range(10))
>>> random.choice(values)
5
choice
werkt ook voor één item uit een niet-continu monster:
>>> values = [1, 2, 3, 5, 7, 10]
>>> random.choice(values)
7
Als je het “cryptografisch sterk” nodig hebt, is er ook een secrets.choice
in python 3.6 en nieuwer:
>>> import secrets
>>> values = list(range(10))
>>> secrets.choice(values)
2
Antwoord 11
als je numpy wilt gebruiken, gebruik dan het volgende:
import numpy as np
print(np.random.randint(0,10))
Antwoord 12
>>> import random
>>> random.randrange(10)
3
>>> random.randrange(10)
1
Om een lijst van tien voorbeelden te krijgen:
>>> [random.randrange(10) for x in range(10)]
[9, 0, 4, 0, 5, 7, 4, 3, 6, 8]
Antwoord 13
Willekeurige gehele getallen genereren tussen 0 en 9.
import numpy
X = numpy.random.randint(0, 10, size=10)
print(X)
Uitvoer:
[4 8 0 4 9 6 9 9 0 7]
Antwoord 14
De beste manier is om de functie Willekeurig importeren te gebruiken
import random
print(random.sample(range(10), 10))
of zonder enige bibliotheekimport:
n={}
for i in range(10):
n[i]=i
for p in range(10):
print(n.popitem()[1])
hier verwijdert de popitemseen willekeurige waarde van het woordenboek n
.
Antwoord 15
random.sample
is een andere die kan worden gebruikt
import random
n = 1 # specify the no. of numbers
num = random.sample(range(10), n)
num[0] # is the required number
Antwoord 16
Je hebt de random
python-module nodig die deel uitmaakt van je standaardbibliotheek.
Gebruik de code…
from random import randint
num1= randint(0,9)
Hiermee wordt de variabele num1
ingesteld op een willekeurig getal tussen 0
en 9
inclusief.
Antwoord 17
Dit is meer een wiskundige benadering, maar het werkt 100% van de tijd:
Stel dat u de functie random.random()
wilt gebruiken om een getal tussen a
en b
te genereren. Om dit te bereiken, doet u het volgende:
num = (b-a)*random.random() + a;
Natuurlijk kunt u meer getallen genereren.
Antwoord 18
Van de documentatiepagina voor de willekeurige-module:
Waarschuwing: de pseudo-willekeurige generatoren van deze module mogen niet worden
gebruikt voor veiligheidsdoeleinden. Gebruik os.urandom() of SystemRandom als u:
vereisen een cryptografisch veilige pseudo-willekeurige nummergenerator.
willekeurig.SystemRandom, wat werd geïntroduceerd in Python 2.4, wordt beschouwd als cryptografisch veilig. Het is nog steeds beschikbaar in Python 3.7.1, dat op het moment van schrijven actueel is.
>>> import string
>>> string.digits
'0123456789'
>>> import random
>>> random.SystemRandom().choice(string.digits)
'8'
>>> random.SystemRandom().choice(string.digits)
'1'
>>> random.SystemRandom().choice(string.digits)
'8'
>>> random.SystemRandom().choice(string.digits)
'5'
In plaats van string.digits
, kan range
worden gebruikt voor sommige van de andere antwoorden, samen met misschien een begrip. Mix en match volgens uw behoeften.
Antwoord 19
Ik dacht dat ik deze antwoorden zou aanvullen met quantumrand
, die gebruikmaakt van de kwantumgenerator van ANU. Helaas is hiervoor een internetverbinding vereist, maar als u zich zorgen maakt over “hoe willekeurig” de cijfers zijn, kan dit handig zijn.
https://pypi.org/project/quantumrand/
Voorbeeld
import quantumrand
number = quantumrand.randint(0, 9)
print(number)
Uitvoer: 4
De documenten hebben veel verschillende voorbeelden, waaronder dobbelstenen en een lijstkiezer.
Antwoord 20
Je kunt proberen de willekeurige module uit Python te importeren en deze vervolgens een keuze te laten maken tussen de negen getallen. Het is heel eenvoudig.
import random
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
U kunt proberen de waarde die de computer heeft gekozen in een variabele te plaatsen als u deze later wilt gebruiken, maar als dat niet het geval is, zou de afdrukfunctie als volgt moeten werken:
choice = random.choice(numbers)
print(choice)
Antwoord 21
Ik had hier meer geluk mee voor Python 3.6
str_Key = ""
str_RandomKey = ""
for int_I in range(128):
str_Key = random.choice('0123456789')
str_RandomKey = str_RandomKey + str_Key
Voeg gewoon tekens toe zoals ‘ABCD’ en ‘abcd’ of ‘^!~=-><‘ om de karakterpool om uit te halen te veranderen, verander het bereik om het aantal gegenereerde karakters te veranderen.
Antwoord 22
OpenTURNS maakt het niet alleen mogelijk om de willekeurige gehele getallen te simuleren, maar ook om de bijbehorende distributie te definiëren met de UserDefined
gedefinieerde klasse.
Het volgende simuleert 12 uitkomsten van de verdeling.
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)
Hiermee wordt afgedrukt:
0 [8]
1 [7]
2 [4]
3 [7]
4 [3]
5 [3]
6 [2]
7 [9]
8 [0]
9 [5]
10 [9]
11 [6]
De haakjes staan er omdatx
een Point
in 1-dimensie is.
Het zou gemakkelijker zijn om de 12 uitkomsten te genereren in een enkele aanroep naar getSample
:
sample = distribution.getSample(12)
zou opleveren:
>>> print(sample)
[ v0 ]
0 : [ 3 ]
1 : [ 9 ]
2 : [ 6 ]
3 : [ 3 ]
4 : [ 2 ]
5 : [ 6 ]
6 : [ 9 ]
7 : [ 5 ]
8 : [ 9 ]
9 : [ 5 ]
10 : [ 3 ]
11 : [ 2 ]
Meer details over dit onderwerp vindt u hier: http:/ /openturns.github.io/openturns/master/user_manual/_generated/openturns.UserDefined.html