Generieren Sie zufällige ganze Zahlen zwischen 0 und 9

Lesezeit: 4 Minuten

Benutzer-Avatar
Aneurysma

Wie kann ich in Python zufällige Ganzzahlen zwischen 0 und 9 (einschließlich) generieren?

Zum Beispiel, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9

Benutzer-Avatar
kowschenin

Versuchen random.randrange:

from random import randrange
print(randrange(10))

  • Nur eine Anmerkung, dies sind Pseudozufallszahlen und sie sind nicht kryptografisch sicher. Verwenden Sie dies auf keinen Fall, wenn Sie nicht möchten, dass ein Angreifer Ihre Zahlen errät. Verwenden Sie die secrets Modul für bessere Zufallszahlen. Bezug: docs.python.org/3/library/random.html

    Benutzer6269864

    18. Oktober 2018 um 8:08 Uhr

  • Insbesondere sollten Geheimnisse dem standardmäßigen Pseudozufallszahlengenerator im Zufallsmodul vorgezogen werden, der für die Modellierung und Simulation entwickelt wurde, nicht für Sicherheit oder Kryptografie.

    – florian.isopp

    1. Dezember 2020 um 23:07 Uhr

  • Um zu ersparen, dass jemand zum Secrets-Modul navigieren muss, um dies zu erreichen: import secrets secrets.randbelow(10)

    – Sazerac

    5. Februar 2021 um 4:47 Uhr


  • Beachten Sie, dass das Secrets-Modul erstmals in Version 3.6 zu Python hinzugefügt wurde

    – Benutzer3540325

    30. April 2021 um 8:56 Uhr

  • @ user3540325: Vor Version 3.6 erstellt eine enge Annäherung eine Instanz von random.SystemRandom() und Aufrufen der Methoden dieser Instanz; random.SystemRandom()wie secrets (von dem ich glaube, dass es in dieser Hinsicht implementiert ist) beruht auf der vom Betriebssystem bereitgestellten kryptografischen Zufälligkeit (z CryptGenRandom unter Windows, /dev/urandom auf UNIX-likes).

    – ShadowRanger

    17. Mai um 15:25 Uhr

Benutzer-Avatar
JMSaaudio

Versuchen random.randint:

import random
print(random.randint(0, 9))

Docs-Status:

random.randint(a, b)

Gibt eine zufällige ganze Zahl N zurück, sodass a <= N <= b.

  • Wie für 3.8 noch “Gib eine zufällige ganze Zahl N zurück, so dass a <= N <= b. Pseudonym für randrange(a, b+1)” @Yli

    – Dennis

    20. Juni 2020 um 1:06 Uhr


Benutzer-Avatar
Andreas Hase

Versuche dies:

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)

Benutzer-Avatar
Benutzer14372

from random import randint

x = [randint(0, 9) for p in range(0, 10)]

Dadurch werden 10 pseudozufällige Ganzzahlen im Bereich von 0 bis einschließlich 9 generiert.

Benutzer-Avatar
Chris_Rands

Das secrets Modul ist neu in Python 3.6. Das ist besser als die random Modul für Kryptographie oder Sicherheitszwecke.

So drucken Sie zufällig eine Ganzzahl im inklusiven Bereich 0-9:

from secrets import randbelow
print(randbelow(10))

Einzelheiten finden Sie unter PEP 506.

Beachten Sie, dass es wirklich vom Anwendungsfall abhängt. Mit dem random Modul können Sie einen zufälligen Seed setzen, nützlich für pseudozufällige, aber reproduzierbare Ergebnisse, und dies ist mit dem nicht möglich secrets Modul.

random Modul ist auch schneller (getestet auf Python 3.9):

>>> timeit.timeit("random.randrange(10)", setup="import random")
0.4920286529999771
>>> timeit.timeit("secrets.randbelow(10)", setup="import secrets")
2.0670733770000425

  • Dies würde die Antwort verbessern und sollte hinzugefügt werden. Die sicherheitsbewussteren Antworten sollten immer hinzugefügt werden, falls verfügbar.

    – SudoKid

    7. Februar 2018 um 17:15 Uhr

  • Ist es vernünftig, das anzunehmen secrets wird viel langsamer sein als random? Irgendwo muss doch ein Nachteil sein.

    – Markieren Sie Lösegeld

    17. Dezember 2021 um 23:13 Uhr

  • @MarkRansom siehe Bearbeiten

    – Chris_Rands

    18. Dezember 2021 um 18:22 Uhr

Ich würde eines der folgenden versuchen:

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.> random.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.> zufällig.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]

Geschwindigkeit:

np.random.uniform und np.random.randint sind viel schneller (~10 mal schneller) als np.random.choice, random.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)

Anmerkungen:

1.> np.random.randint generiert zufällige ganze Zahlen über das halboffene Intervall [low, high).

2.> np.random.uniform generates uniformly distributed numbers over the half-open interval [low, high).

3.> np.random.choice generates a random sample over the half-open interval [low, high) as if the argument a was np.arange(n).

4.> random.randrange(stop) generates a random number from range(start, stop, step).

5.> random.randint(a, b) returns a random integer N such that a <= N <= b.

6.> astype(int) casts the numpy array to int data type.

7.> I have chosen size = (15,). This will give you a numpy array of length = 15.

  • This would improve the answer and should be added. The more security minded answers should always be added if available.

    – SudoKid

    Feb 7, 2018 at 17:15

  • Is it reasonable to assume that secrets will be much slower than random? There has to be a downside someplace.

    – Mark Ransom

    Dec 17, 2021 at 23:13

  • @MarkRansom see edit

    – Chris_Rands

    Dec 18, 2021 at 18:22

user avatar
Commoner

Choose the size of the array (in this example, I have chosen the size to be 20). And then, use the following:

import numpy as np   
np.random.randint(10, size=(1, 20))

You can expect to see an output of the following form (different random integers will be returned each time you run it; hence you can expect the integers in the output array to differ from the example given below).

array([[1, 6, 1, 2, 8, 6, 3, 3, 2, 5, 6, 5, 0, 9, 5, 6, 4, 5, 9, 3]])

  • Es ist auch hilfreich zu wissen, wie Numpy ein zufälliges Array einer bestimmten Größe generieren kann, nicht nur eine einzelne Zufallszahl. (Dokumente: numpy.random.randint)

    – jkdev

    25. Juni 2017 um 18:19 Uhr


1159220cookie-checkGenerieren Sie zufällige ganze Zahlen zwischen 0 und 9

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy