Genereer willekeurige gehele getallen tussen 0 en 9

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 randommodule 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:

1.> numpy.random.randint

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])

2.> numpy.random.uniform

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])

3.> numpy.random.choice

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])

4.> willekeurig.randrange

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]

5.> willekeurig.randint

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 anp.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 &lt ;= 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.randomretourneert een willekeurige float in het bereik [0.0, 1.0)
  • B: random.randintretourneert een willekeurig geheel getal nzodat a <= N <= b
  • C: random.randrangealias naar randint(a, b+1)
  • D: random.shuffleschudt een reeks op zijn plaats
  • E: random.choiceretourneert een willekeurig element uit de niet-lege reeks
  • F: random.choicesretourneert kselecties uit een populatie (met vervanging, Python 3.6+)
  • G: random.samplegeeft kunieke 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 randintof randrangezijn 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

choicewerkt 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.choicein 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.sampleis 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 randompython-module nodig die deel uitmaakt van je standaardbibliotheek.
Gebruik de code…

from random import randint
num1= randint(0,9)

Hiermee wordt de variabele num1ingesteld op een willekeurig getal tussen 0en 9inclusief.


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 aen bte 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 rangeworden 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 UserDefinedgedefinieerde 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 omdatxeen Pointin 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

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Other episodes